1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-07-01 14:11:15 +02:00

Add fallback functions for programmer shutdown and memory mapping and fix FT2232 and IT87

FT2232 and IT87 programmers used functions of the dummy programmer
instead of fallback functions.

The dummy programmer is a "real" programmer with possible side effects
and its functions should not be abused by other programmers. Make
FT2232 and IT87 use official fallback functions instead. Create
fallback_shutdown(). Create fallback_chip_writeb(). Convert the
programmer #defines to an enum.

Corresponding to flashrom svn r678.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
Acked-by: Stefan Reinauer <stepan@coresystems.de>
This commit is contained in:
Carl-Daniel Hailfinger
2009-08-12 11:39:29 +00:00
parent 8fa64816ae
commit 415e513d90
3 changed files with 34 additions and 18 deletions

22
flash.h
View File

@ -80,14 +80,17 @@
typedef unsigned long chipaddr; typedef unsigned long chipaddr;
extern int programmer; enum programmer {
#define PROGRAMMER_INTERNAL 0x00 PROGRAMMER_INTERNAL,
#define PROGRAMMER_DUMMY 0x01 PROGRAMMER_DUMMY,
#define PROGRAMMER_NIC3COM 0x02 PROGRAMMER_NIC3COM,
#define PROGRAMMER_SATASII 0x03 PROGRAMMER_SATASII,
#define PROGRAMMER_IT87SPI 0x04 PROGRAMMER_IT87SPI,
#define PROGRAMMER_FT2232SPI 0x05 PROGRAMMER_FT2232SPI,
#define PROGRAMMER_SERPROG 0x06 PROGRAMMER_SERPROG,
};
extern enum programmer programmer;
struct programmer_entry { struct programmer_entry {
const char *vendor; const char *vendor;
@ -332,8 +335,10 @@ uint8_t mmio_readb(void *addr);
uint16_t mmio_readw(void *addr); uint16_t mmio_readw(void *addr);
uint32_t mmio_readl(void *addr); uint32_t mmio_readl(void *addr);
void internal_delay(int usecs); void internal_delay(int usecs);
int fallback_shutdown(void);
void *fallback_map(const char *descr, unsigned long phys_addr, size_t len); void *fallback_map(const char *descr, unsigned long phys_addr, size_t len);
void fallback_unmap(void *virt_addr, size_t len); void fallback_unmap(void *virt_addr, size_t len);
void fallback_chip_writeb(uint8_t val, chipaddr addr);
void fallback_chip_writew(uint16_t val, chipaddr addr); void fallback_chip_writew(uint16_t val, chipaddr addr);
void fallback_chip_writel(uint32_t val, chipaddr addr); void fallback_chip_writel(uint32_t val, chipaddr addr);
void fallback_chip_writen(uint8_t *buf, chipaddr addr, size_t len); void fallback_chip_writen(uint8_t *buf, chipaddr addr, size_t len);
@ -382,7 +387,6 @@ extern char *ft2232spi_param;
int ft2232_spi_init(void); int ft2232_spi_init(void);
int ft2232_spi_send_command(unsigned int writecnt, unsigned int readcnt, const unsigned char *writearr, unsigned char *readarr); int ft2232_spi_send_command(unsigned int writecnt, unsigned int readcnt, const unsigned char *writearr, unsigned char *readarr);
int ft2232_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len); int ft2232_spi_read(struct flashchip *flash, uint8_t *buf, int start, int len);
int ft2232_spi_write1(struct flashchip *flash, uint8_t *buf);
int ft2232_spi_write_256(struct flashchip *flash, uint8_t *buf); int ft2232_spi_write_256(struct flashchip *flash, uint8_t *buf);
/* flashrom.c */ /* flashrom.c */

View File

@ -33,7 +33,7 @@
const char *flashrom_version = FLASHROM_VERSION; const char *flashrom_version = FLASHROM_VERSION;
char *chip_to_probe = NULL; char *chip_to_probe = NULL;
int verbose = 0; int verbose = 0;
int programmer = PROGRAMMER_INTERNAL; enum programmer programmer = PROGRAMMER_INTERNAL;
const struct programmer_entry programmer_table[] = { const struct programmer_entry programmer_table[] = {
{ {
@ -102,14 +102,14 @@ const struct programmer_entry programmer_table[] = {
{ {
.init = it87spi_init, .init = it87spi_init,
.shutdown = dummy_shutdown, .shutdown = fallback_shutdown,
.map_flash_region = dummy_map, .map_flash_region = fallback_map,
.unmap_flash_region = dummy_unmap, .unmap_flash_region = fallback_unmap,
.chip_readb = dummy_chip_readb, .chip_readb = dummy_chip_readb,
.chip_readw = fallback_chip_readw, .chip_readw = fallback_chip_readw,
.chip_readl = fallback_chip_readl, .chip_readl = fallback_chip_readl,
.chip_readn = fallback_chip_readn, .chip_readn = fallback_chip_readn,
.chip_writeb = dummy_chip_writeb, .chip_writeb = fallback_chip_writeb,
.chip_writew = fallback_chip_writew, .chip_writew = fallback_chip_writew,
.chip_writel = fallback_chip_writel, .chip_writel = fallback_chip_writel,
.chip_writen = fallback_chip_writen, .chip_writen = fallback_chip_writen,
@ -118,19 +118,20 @@ const struct programmer_entry programmer_table[] = {
{ {
.init = ft2232_spi_init, .init = ft2232_spi_init,
.shutdown = dummy_shutdown, .shutdown = fallback_shutdown,
.map_flash_region = dummy_map, .map_flash_region = fallback_map,
.unmap_flash_region = dummy_unmap, .unmap_flash_region = fallback_unmap,
.chip_readb = dummy_chip_readb, .chip_readb = dummy_chip_readb,
.chip_readw = fallback_chip_readw, .chip_readw = fallback_chip_readw,
.chip_readl = fallback_chip_readl, .chip_readl = fallback_chip_readl,
.chip_readn = fallback_chip_readn, .chip_readn = fallback_chip_readn,
.chip_writeb = dummy_chip_writeb, .chip_writeb = fallback_chip_writeb,
.chip_writew = fallback_chip_writew, .chip_writew = fallback_chip_writew,
.chip_writel = fallback_chip_writel, .chip_writel = fallback_chip_writel,
.chip_writen = fallback_chip_writen, .chip_writen = fallback_chip_writen,
.delay = internal_delay, .delay = internal_delay,
}, },
{ {
.init = serprog_init, .init = serprog_init,
.shutdown = serprog_shutdown, .shutdown = serprog_shutdown,

View File

@ -218,6 +218,12 @@ void internal_delay(int usecs)
} }
} }
/* Fallback shutdown() for programmers which don't need special handling */
int fallback_shutdown(void)
{
return 0;
}
/* Fallback map() for programmers which don't need special handling */ /* Fallback map() for programmers which don't need special handling */
void *fallback_map(const char *descr, unsigned long phys_addr, size_t len) void *fallback_map(const char *descr, unsigned long phys_addr, size_t len)
{ {
@ -229,6 +235,11 @@ void fallback_unmap(void *virt_addr, size_t len)
{ {
} }
/* No-op fallback for drivers not supporting addr/data pair accesses */
void fallback_chip_writeb(uint8_t val, chipaddr addr)
{
}
/* Little-endian fallback for drivers not supporting 16 bit accesses */ /* Little-endian fallback for drivers not supporting 16 bit accesses */
void fallback_chip_writew(uint16_t val, chipaddr addr) void fallback_chip_writew(uint16_t val, chipaddr addr)
{ {