also make serprog_map report if mapping doesnt fit in the 24-bit address space of serprog.
Signed-off-by: Urja Rannikko urjaman@gmail.com --- The previous version didnt compile on 64-bit because size_t and -Werror ... thus v2.
--- flashrom.c | 2 +- programmer.h | 1 + serprog.c | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/flashrom.c b/flashrom.c index a389cb2..d51a44c 100644 --- a/flashrom.c +++ b/flashrom.c @@ -212,7 +212,7 @@ const struct programmer_entry programmer_table[] = { /* FIXME */ .devs.note = "All programmer devices speaking the serprog protocol\n", .init = serprog_init, - .map_flash_region = fallback_map, + .map_flash_region = serprog_map, .unmap_flash_region = fallback_unmap, .delay = serprog_delay, }, diff --git a/programmer.h b/programmer.h index 913522b..3bf292d 100644 --- a/programmer.h +++ b/programmer.h @@ -706,6 +706,7 @@ int register_master(const struct registered_master *mst); #if CONFIG_SERPROG == 1 int serprog_init(void); void serprog_delay(unsigned int usecs); +void *serprog_map(const char *descr, uintptr_t phys_addr, size_t len); #endif
/* serial.c */ diff --git a/serprog.c b/serprog.c index 3de0182..8e4286a 100644 --- a/serprog.c +++ b/serprog.c @@ -943,3 +943,15 @@ static int serprog_spi_read(struct flashctx *flash, uint8_t *buf, } return 0; } + +void *serprog_map(const char *descr, uintptr_t phys_addr, size_t len) +{ + if ((phys_addr & 0xFF000000) == 0xFF000000) { + /* This is normal, no need to report anything. */ + return (void*)phys_addr; + } else { + msg_pwarn(MSGHEADER "incompatible mapping %s, 0x%zx bytes at 0x%0*" PRIxPTR ", returning NULL\n", + descr, len, PRIxPTR_WIDTH, phys_addr); + return NULL; + } +}