diff options
author | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2009-05-17 15:49:24 +0000 |
---|---|---|
committer | Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> | 2009-05-17 15:49:24 +0000 |
commit | 78185dcb3c58552acb652780c4182a77a74f16f0 (patch) | |
tree | 81c15dc84a3217eb3359b300fea38bca68421ed0 /ichspi.c | |
parent | 05fab75d73019f430c16ad9a9d3800f8e7e40173 (diff) | |
download | flashrom-78185dcb3c58552acb652780c4182a77a74f16f0.tar.gz flashrom-78185dcb3c58552acb652780c4182a77a74f16f0.tar.bz2 flashrom-78185dcb3c58552acb652780c4182a77a74f16f0.zip |
Use accessor functions for MMIO
Some MMIO accesses used volatile, others didn't (and risked
non-execution of side effects) and even with volatile, some accesses
looked dubious.
Since the MMIO accessor functions and the onboard flash accessor
functions are functionally identical (but have different signatures),
make the flash accessors wrappers for the MMIO accessors.
For some of the conversions, I used Coccinelle. Semantic patch follows:
@@ typedef uint8_t; expression a; volatile uint8_t *b; @@ - b[a] + *(b
+ a) @@ expression a; volatile uint8_t *b; @@ - *(b) |= (a); + *(b) =
*(b) | (a); @@ expression a; volatile uint8_t *b; @@ - *(b) = (a); +
mmio_writeb(a, b); @@ volatile uint8_t *b; @@ - *(b) + mmio_readb(b) @@
type T; T b; @@ ( mmio_readb | mmio_writeb ) (..., - (T) - (b) + b )
Corresponding to flashrom svn r524.
Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Uwe tested read, write, erase with this patch on a random board to make
sure nothing breaks.
Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
Diffstat (limited to 'ichspi.c')
-rw-r--r-- | ichspi.c | 14 |
1 files changed, 5 insertions, 9 deletions
@@ -129,21 +129,17 @@ static OPCODES *curopcodes = NULL; /* HW access functions */ static uint32_t REGREAD32(int X) { - volatile uint32_t regval; - regval = *(volatile uint32_t *)((uint8_t *) spibar + X); - return regval; + return mmio_readl(spibar + X); } static uint16_t REGREAD16(int X) { - volatile uint16_t regval; - regval = *(volatile uint16_t *)((uint8_t *) spibar + X); - return regval; + return mmio_readw(spibar + X); } -#define REGWRITE32(X,Y) (*(uint32_t *)((uint8_t *)spibar+X)=Y) -#define REGWRITE16(X,Y) (*(uint16_t *)((uint8_t *)spibar+X)=Y) -#define REGWRITE8(X,Y) (*(uint8_t *)((uint8_t *)spibar+X)=Y) +#define REGWRITE32(X,Y) mmio_writel(Y, spibar+X) +#define REGWRITE16(X,Y) mmio_writew(Y, spibar+X) +#define REGWRITE8(X,Y) mmio_writeb(Y, spibar+X) /* Common SPI functions */ static int find_opcode(OPCODES *op, uint8_t opcode); |