From 1455b2baea9f4379086cabf1dcc1388c478c745c Mon Sep 17 00:00:00 2001 From: Carl-Daniel Hailfinger Date: Mon, 11 May 2009 14:13:25 +0000 Subject: 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 Acked-by: Uwe Hermann --- physmap.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'physmap.c') diff --git a/physmap.c b/physmap.c index 49e1bfc..f1a68db 100644 --- a/physmap.c +++ b/physmap.c @@ -69,12 +69,33 @@ void *sys_physmap(unsigned long phys_addr, size_t len) void physunmap(void *virt_addr, size_t len) { + if (len == 0) { + printf_debug("Not unmapping zero size at %p\n", virt_addr); + return; + } + munmap(virt_addr, len); } #endif void *physmap(const char *descr, unsigned long phys_addr, size_t len) { + if (len == 0) { + printf_debug("Not mapping %s, zero size at 0x%08lx\n", + descr, phys_addr); + return NULL; + } + + if ((getpagesize() - 1) & len) { + fprintf(stderr, "Mapping %s at 0x%08lx, unaligned size 0x%lx\n", + descr, phys_addr, (unsigned long)len); + } + + if ((getpagesize() - 1) & phys_addr) { + fprintf(stderr, "Mapping %s, 0x%lx bytes at unaligned 0x%08lx\n", + descr, (unsigned long)len, phys_addr); + } + void *virt_addr = sys_physmap(phys_addr, len); if (NULL == virt_addr) { -- cgit v1.1