mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +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:
parent
9862251f89
commit
9ee107721f
8
flash.h
8
flash.h
@ -611,6 +611,10 @@ void internal_chip_writel(uint32_t val, volatile void *addr);
|
|||||||
uint8_t internal_chip_readb(const volatile void *addr);
|
uint8_t internal_chip_readb(const volatile void *addr);
|
||||||
uint16_t internal_chip_readw(const volatile void *addr);
|
uint16_t internal_chip_readw(const volatile void *addr);
|
||||||
uint32_t internal_chip_readl(const volatile void *addr);
|
uint32_t internal_chip_readl(const volatile void *addr);
|
||||||
|
void fallback_chip_writew(uint16_t val, volatile void *addr);
|
||||||
|
void fallback_chip_writel(uint32_t val, volatile void *addr);
|
||||||
|
uint16_t fallback_chip_readw(const volatile void *addr);
|
||||||
|
uint32_t fallback_chip_readl(const volatile void *addr);
|
||||||
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
#if defined(__FreeBSD__) || defined(__DragonFly__)
|
||||||
extern int io_fd;
|
extern int io_fd;
|
||||||
#endif
|
#endif
|
||||||
@ -635,11 +639,7 @@ int nic3com_shutdown(void);
|
|||||||
void *nic3com_map(const char *descr, unsigned long phys_addr, size_t len);
|
void *nic3com_map(const char *descr, unsigned long phys_addr, size_t len);
|
||||||
void nic3com_unmap(void *virt_addr, size_t len);
|
void nic3com_unmap(void *virt_addr, size_t len);
|
||||||
void nic3com_chip_writeb(uint8_t val, volatile void *addr);
|
void nic3com_chip_writeb(uint8_t val, volatile void *addr);
|
||||||
void nic3com_chip_writew(uint16_t val, volatile void *addr);
|
|
||||||
void nic3com_chip_writel(uint32_t val, volatile void *addr);
|
|
||||||
uint8_t nic3com_chip_readb(const volatile void *addr);
|
uint8_t nic3com_chip_readb(const volatile void *addr);
|
||||||
uint16_t nic3com_chip_readw(const volatile void *addr);
|
|
||||||
uint32_t nic3com_chip_readl(const volatile void *addr);
|
|
||||||
extern struct pcidev_status nics_3com[];
|
extern struct pcidev_status nics_3com[];
|
||||||
|
|
||||||
/* flashrom.c */
|
/* flashrom.c */
|
||||||
|
@ -69,11 +69,11 @@ const struct programmer_entry programmer_table[] = {
|
|||||||
.map_flash_region = nic3com_map,
|
.map_flash_region = nic3com_map,
|
||||||
.unmap_flash_region = nic3com_unmap,
|
.unmap_flash_region = nic3com_unmap,
|
||||||
.chip_readb = nic3com_chip_readb,
|
.chip_readb = nic3com_chip_readb,
|
||||||
.chip_readw = nic3com_chip_readw,
|
.chip_readw = fallback_chip_readw,
|
||||||
.chip_readl = nic3com_chip_readl,
|
.chip_readl = fallback_chip_readl,
|
||||||
.chip_writeb = nic3com_chip_writeb,
|
.chip_writeb = nic3com_chip_writeb,
|
||||||
.chip_writew = nic3com_chip_writew,
|
.chip_writew = fallback_chip_writew,
|
||||||
.chip_writel = nic3com_chip_writel,
|
.chip_writel = fallback_chip_writel,
|
||||||
},
|
},
|
||||||
|
|
||||||
{},
|
{},
|
||||||
|
31
internal.c
31
internal.c
@ -168,3 +168,34 @@ uint32_t internal_chip_readl(const volatile void *addr)
|
|||||||
return *(volatile uint32_t *) 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;
|
||||||
|
}
|
||||||
|
18
nic3com.c
18
nic3com.c
@ -93,14 +93,6 @@ void nic3com_chip_writeb(uint8_t val, volatile void *addr)
|
|||||||
OUTB(val, io_base_addr + BIOS_ROM_DATA);
|
OUTB(val, io_base_addr + BIOS_ROM_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nic3com_chip_writew(uint16_t val, volatile void *addr)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void nic3com_chip_writel(uint32_t val, volatile void *addr)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t nic3com_chip_readb(const volatile void *addr)
|
uint8_t nic3com_chip_readb(const volatile void *addr)
|
||||||
{
|
{
|
||||||
uint8_t val;
|
uint8_t val;
|
||||||
@ -110,13 +102,3 @@ uint8_t nic3com_chip_readb(const volatile void *addr)
|
|||||||
|
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t nic3com_chip_readw(const volatile void *addr)
|
|
||||||
{
|
|
||||||
return 0xffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t nic3com_chip_readl(const volatile void *addr)
|
|
||||||
{
|
|
||||||
return 0xffffffff;
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user