summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-08-12 11:39:29 +0000
committerCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-08-12 11:39:29 +0000
commit415e513d90042b91c1a50a9afe1282e393e574b8 (patch)
tree601ab4f703afa1c577cd532b3d195543a5a7fdb2
parent8fa64816ae22ff9e5fdcc00b153010459edb45f4 (diff)
downloadast2050-flashrom-415e513d90042b91c1a50a9afe1282e393e574b8.zip
ast2050-flashrom-415e513d90042b91c1a50a9afe1282e393e574b8.tar.gz
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>
-rw-r--r--flash.h22
-rw-r--r--flashrom.c19
-rw-r--r--internal.c11
3 files changed, 34 insertions, 18 deletions
diff --git a/flash.h b/flash.h
index b421cf9..abe52c5 100644
--- a/flash.h
+++ b/flash.h
@@ -80,14 +80,17 @@
typedef unsigned long chipaddr;
-extern int programmer;
-#define PROGRAMMER_INTERNAL 0x00
-#define PROGRAMMER_DUMMY 0x01
-#define PROGRAMMER_NIC3COM 0x02
-#define PROGRAMMER_SATASII 0x03
-#define PROGRAMMER_IT87SPI 0x04
-#define PROGRAMMER_FT2232SPI 0x05
-#define PROGRAMMER_SERPROG 0x06
+enum programmer {
+ PROGRAMMER_INTERNAL,
+ PROGRAMMER_DUMMY,
+ PROGRAMMER_NIC3COM,
+ PROGRAMMER_SATASII,
+ PROGRAMMER_IT87SPI,
+ PROGRAMMER_FT2232SPI,
+ PROGRAMMER_SERPROG,
+};
+
+extern enum programmer programmer;
struct programmer_entry {
const char *vendor;
@@ -332,8 +335,10 @@ uint8_t mmio_readb(void *addr);
uint16_t mmio_readw(void *addr);
uint32_t mmio_readl(void *addr);
void internal_delay(int usecs);
+int fallback_shutdown(void);
void *fallback_map(const char *descr, unsigned long phys_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_writel(uint32_t val, chipaddr addr);
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_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_write1(struct flashchip *flash, uint8_t *buf);
int ft2232_spi_write_256(struct flashchip *flash, uint8_t *buf);
/* flashrom.c */
diff --git a/flashrom.c b/flashrom.c
index 12b4e46..a1d0cc2 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -33,7 +33,7 @@
const char *flashrom_version = FLASHROM_VERSION;
char *chip_to_probe = NULL;
int verbose = 0;
-int programmer = PROGRAMMER_INTERNAL;
+enum programmer programmer = PROGRAMMER_INTERNAL;
const struct programmer_entry programmer_table[] = {
{
@@ -102,14 +102,14 @@ const struct programmer_entry programmer_table[] = {
{
.init = it87spi_init,
- .shutdown = dummy_shutdown,
- .map_flash_region = dummy_map,
- .unmap_flash_region = dummy_unmap,
+ .shutdown = fallback_shutdown,
+ .map_flash_region = fallback_map,
+ .unmap_flash_region = fallback_unmap,
.chip_readb = dummy_chip_readb,
.chip_readw = fallback_chip_readw,
.chip_readl = fallback_chip_readl,
.chip_readn = fallback_chip_readn,
- .chip_writeb = dummy_chip_writeb,
+ .chip_writeb = fallback_chip_writeb,
.chip_writew = fallback_chip_writew,
.chip_writel = fallback_chip_writel,
.chip_writen = fallback_chip_writen,
@@ -118,19 +118,20 @@ const struct programmer_entry programmer_table[] = {
{
.init = ft2232_spi_init,
- .shutdown = dummy_shutdown,
- .map_flash_region = dummy_map,
- .unmap_flash_region = dummy_unmap,
+ .shutdown = fallback_shutdown,
+ .map_flash_region = fallback_map,
+ .unmap_flash_region = fallback_unmap,
.chip_readb = dummy_chip_readb,
.chip_readw = fallback_chip_readw,
.chip_readl = fallback_chip_readl,
.chip_readn = fallback_chip_readn,
- .chip_writeb = dummy_chip_writeb,
+ .chip_writeb = fallback_chip_writeb,
.chip_writew = fallback_chip_writew,
.chip_writel = fallback_chip_writel,
.chip_writen = fallback_chip_writen,
.delay = internal_delay,
},
+
{
.init = serprog_init,
.shutdown = serprog_shutdown,
diff --git a/internal.c b/internal.c
index 888c502..3e3808e 100644
--- a/internal.c
+++ b/internal.c
@@ -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 */
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 */
void fallback_chip_writew(uint16_t val, chipaddr addr)
{
OpenPOWER on IntegriCloud