summaryrefslogtreecommitdiffstats
path: root/w39v080fa.c
diff options
context:
space:
mode:
authorCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-03-05 19:24:22 +0000
committerCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-03-05 19:24:22 +0000
commitc6c526cfd4cd2a604dd07aaa73cb1cb64678743d (patch)
tree42326fb1bdeb491df1db567eacdec088bee46c7d /w39v080fa.c
parentf2170967edfccc72d4a3b4665f2ab5dee3c42d70 (diff)
downloadflashrom-c6c526cfd4cd2a604dd07aaa73cb1cb64678743d.zip
flashrom-c6c526cfd4cd2a604dd07aaa73cb1cb64678743d.tar.gz
Use helper functions to access flash chips
Right now we perform direct pointer manipulation without any abstraction to read from and write to memory mapped flash chips. That makes it impossible to drive any flasher which does not mmap the whole chip. Using helper functions readb() and writeb() allows a driver for external flash programmers like Paraflasher to replace readb and writeb with calls to its own chip access routines. This patch has the additional advantage of removing lots of unnecessary casts to volatile uint8_t * and now-superfluous parentheses which caused poor readability. I used the semantic patcher Coccinelle to create this patch. The semantic patch follows: @@ expression a; typedef uint8_t; volatile uint8_t *b; @@ - *(b) = (a); + writeb(a, b); @@ volatile uint8_t *b; @@ - *(b) + readb(b) @@ type T; T b; @@ ( readb | writeb ) (..., - (T) - (b) + b ) In contrast to a sed script, the semantic patch performs type checking before converting anything. Tested-by: Joe Julian Corresponding to flashrom svn r418 and coreboot v2 svn r3971. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: FENG Yu Ning <fengyuning1984@gmail.com>
Diffstat (limited to 'w39v080fa.c')
-rw-r--r--w39v080fa.c52
1 files changed, 26 insertions, 26 deletions
diff --git a/w39v080fa.c b/w39v080fa.c
index 66534ce..6278fbc 100644
--- a/w39v080fa.c
+++ b/w39v080fa.c
@@ -27,19 +27,19 @@ int probe_winbond_fwhub(struct flashchip *flash)
uint8_t vid, did;
/* Product Identification Entry */
- *(volatile uint8_t *)(bios + 0x5555) = 0xAA;
- *(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
- *(volatile uint8_t *)(bios + 0x5555) = 0x90;
+ writeb(0xAA, bios + 0x5555);
+ writeb(0x55, bios + 0x2AAA);
+ writeb(0x90, bios + 0x5555);
myusec_delay(10);
/* Read product ID */
- vid = *(volatile uint8_t *)bios;
- did = *(volatile uint8_t *)(bios + 0x01);
+ vid = readb(bios);
+ did = readb(bios + 0x01);
/* Product Identifixation Exit */
- *(volatile uint8_t *)(bios + 0x5555) = 0xAA;
- *(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
- *(volatile uint8_t *)(bios + 0x5555) = 0xF0;
+ writeb(0xAA, bios + 0x5555);
+ writeb(0x55, bios + 0x2AAA);
+ writeb(0xF0, bios + 0x5555);
myusec_delay(10);
printf_debug("%s: vid 0x%x, did 0x%x\n", __FUNCTION__, vid, did);
@@ -58,16 +58,16 @@ static int unlock_block_winbond_fwhub(struct flashchip *flash, int offset)
uint8_t locking;
printf_debug("Trying to unlock block @0x%08x = 0x%02x\n", offset,
- *wrprotect);
+ readb(wrprotect));
- locking = *wrprotect;
+ locking = readb(wrprotect);
switch (locking & 0x7) {
case 0:
printf_debug("Full Access.\n");
return 0;
case 1:
printf_debug("Write Lock (Default State).\n");
- *wrprotect = 0;
+ writeb(0, wrprotect);
return 0;
case 2:
printf_debug("Locked Open (Full Access, Lock Down).\n");
@@ -77,11 +77,11 @@ static int unlock_block_winbond_fwhub(struct flashchip *flash, int offset)
return -1;
case 4:
printf_debug("Read Lock.\n");
- *wrprotect = 0;
+ writeb(0, wrprotect);
return 0;
case 5:
printf_debug("Read/Write Lock.\n");
- *wrprotect = 0;
+ writeb(0, wrprotect);
return 0;
case 6:
fprintf(stderr, "Error: Read Lock, Locked Down.\n");
@@ -106,18 +106,18 @@ int unlock_winbond_fwhub(struct flashchip *flash)
*/
/* Product Identification Entry */
- *(volatile uint8_t *)(bios + 0x5555) = 0xAA;
- *(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
- *(volatile uint8_t *)(bios + 0x5555) = 0x90;
+ writeb(0xAA, bios + 0x5555);
+ writeb(0x55, bios + 0x2AAA);
+ writeb(0x90, bios + 0x5555);
myusec_delay(10);
/* Read Hardware Lock Bits */
- locking = *(volatile uint8_t *)(bios + 0xffff2);
+ locking = readb(bios + 0xffff2);
/* Product Identification Exit */
- *(volatile uint8_t *)(bios + 0x5555) = 0xAA;
- *(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
- *(volatile uint8_t *)(bios + 0x5555) = 0xF0;
+ writeb(0xAA, bios + 0x5555);
+ writeb(0x55, bios + 0x2AAA);
+ writeb(0xF0, bios + 0x5555);
myusec_delay(10);
printf_debug("Lockout bits:\n");
@@ -151,13 +151,13 @@ static int erase_sector_winbond_fwhub(volatile uint8_t *bios,
printf("0x%08x\b\b\b\b\b\b\b\b\b\b", sector);
/* Sector Erase */
- *(volatile uint8_t *)(bios + 0x5555) = 0xAA;
- *(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
- *(volatile uint8_t *)(bios + 0x5555) = 0x80;
+ writeb(0xAA, bios + 0x5555);
+ writeb(0x55, bios + 0x2AAA);
+ writeb(0x80, bios + 0x5555);
- *(volatile uint8_t *)(bios + 0x5555) = 0xAA;
- *(volatile uint8_t *)(bios + 0x2AAA) = 0x55;
- *(volatile uint8_t *)(bios + sector) = 0x30;
+ writeb(0xAA, bios + 0x5555);
+ writeb(0x55, bios + 0x2AAA);
+ writeb(0x30, bios + sector);
/* wait for Toggle bit ready */
toggle_ready_jedec(bios);
OpenPOWER on IntegriCloud