mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-01 22:21:16 +02:00
Abstract mapping/unmapping of flash regions
Flash mapping/unmapping was performed without an abstraction layer, so even the dummy flasher caused memory mappings to be set up. Add map/unmap functions to the external flasher abstraction. Fix a possible scribble-over-low-memory corner case which fortunately never triggered so far. With this patch, --programmer dummy works fine as non-root. Corresponding to flashrom svn r493. 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:
15
flash.h
15
flash.h
@ -87,6 +87,9 @@ struct programmer_entry {
|
||||
int (*init) (void);
|
||||
int (*shutdown) (void);
|
||||
|
||||
void * (*map_flash_region) (const char *descr, unsigned long phys_addr, size_t len);
|
||||
void (*unmap_flash_region) (void *virt_addr, size_t len);
|
||||
|
||||
void (*chip_writeb) (uint8_t val, volatile void *addr);
|
||||
void (*chip_writew) (uint16_t val, volatile void *addr);
|
||||
void (*chip_writel) (uint32_t val, volatile void *addr);
|
||||
@ -107,6 +110,16 @@ static inline int programmer_shutdown(void)
|
||||
return programmer_table[programmer].shutdown();
|
||||
}
|
||||
|
||||
static inline void *programmer_map_flash_region(const char *descr, unsigned long phys_addr, size_t len)
|
||||
{
|
||||
return programmer_table[programmer].map_flash_region(descr, phys_addr, len);
|
||||
}
|
||||
|
||||
static inline void programmer_unmap_flash_region(void *virt_addr, size_t len)
|
||||
{
|
||||
programmer_table[programmer].unmap_flash_region(virt_addr, len);
|
||||
}
|
||||
|
||||
static inline void chip_writeb(uint8_t val, volatile void *addr)
|
||||
{
|
||||
programmer_table[programmer].chip_writeb(val, addr);
|
||||
@ -579,6 +592,8 @@ uint32_t internal_chip_readl(const volatile void *addr);
|
||||
/* dummyflasher.c */
|
||||
int dummy_init(void);
|
||||
int dummy_shutdown(void);
|
||||
void *dummy_map(const char *descr, unsigned long phys_addr, size_t len);
|
||||
void dummy_unmap(void *virt_addr, size_t len);
|
||||
void dummy_chip_writeb(uint8_t val, volatile void *addr);
|
||||
void dummy_chip_writew(uint16_t val, volatile void *addr);
|
||||
void dummy_chip_writel(uint32_t val, volatile void *addr);
|
||||
|
Reference in New Issue
Block a user