mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-01 14:11:15 +02:00
Add generic 16 bit and 32 bit chip read/write emulation to the external flasher infrastructure
The emulation works by splitting 32 bit accesses into 16 bit accesses and 16 bit accesses into to 8 bit accesses. That way, external flashers can mix and match the amount of emulation they need. Corresponding to flashrom svn r517. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Uwe Hermann <uwe@hermann-uwe.de>
This commit is contained in:
31
internal.c
31
internal.c
@ -168,3 +168,34 @@ uint32_t internal_chip_readl(const volatile void *addr)
|
||||
return *(volatile uint32_t *) addr;
|
||||
}
|
||||
|
||||
/* Little-endian fallback for drivers not supporting 16 bit accesses */
|
||||
void fallback_chip_writew(uint16_t val, volatile void *addr)
|
||||
{
|
||||
chip_writeb(val & 0xff, addr);
|
||||
chip_writeb((val >> 8) & 0xff, addr + 1);
|
||||
}
|
||||
|
||||
/* Little-endian fallback for drivers not supporting 16 bit accesses */
|
||||
uint16_t fallback_chip_readw(const volatile void *addr)
|
||||
{
|
||||
uint16_t val;
|
||||
val = chip_readb(addr);
|
||||
val |= chip_readb(addr + 1) << 8;
|
||||
return val;
|
||||
}
|
||||
|
||||
/* Little-endian fallback for drivers not supporting 32 bit accesses */
|
||||
void fallback_chip_writel(uint32_t val, volatile void *addr)
|
||||
{
|
||||
chip_writew(val & 0xffff, addr);
|
||||
chip_writew((val >> 16) & 0xffff, addr + 2);
|
||||
}
|
||||
|
||||
/* Little-endian fallback for drivers not supporting 32 bit accesses */
|
||||
uint32_t fallback_chip_readl(const volatile void *addr)
|
||||
{
|
||||
uint32_t val;
|
||||
val = chip_readw(addr);
|
||||
val |= chip_readw(addr + 2) << 16;
|
||||
return val;
|
||||
}
|
||||
|
Reference in New Issue
Block a user