cfi_flash: Make all flash access functions weak
authorStefan Roese <sr@denx.de>
Mon, 17 Nov 2008 13:45:22 +0000 (14:45 +0100)
committerStefan Roese <sr@denx.de>
Mon, 24 Nov 2008 09:55:35 +0000 (10:55 +0100)
This patch defines all flash access functions as weak so that
they can be overridden by board specific versions.

This will be used by the upcoming VCTH board support where the NOR
FLASH unfortunately can't be accessed memory-mapped. Special
accessor functions are needed here.

To enable this weak functions you need to define
CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS in your board config header.
Otherwise the "old" default functions will be used resulting
in smaller code.

Signed-off-by: Stefan Roese <sr@denx.de>
Acked-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
drivers/mtd/cfi_flash.c

index 24e9b9fa2e52c0affd3bd12b0fd09e0a7032da23..f10d5fea18f0a13baac8b9ac7fb6a9817d9ba24b 100644 (file)
@@ -209,38 +209,38 @@ struct cfi_pri_hdr {
        u8      minor_version;
 } __attribute__((packed));
 
-static void flash_write8(u8 value, void *addr)
+static void __flash_write8(u8 value, void *addr)
 {
        __raw_writeb(value, addr);
 }
 
-static void flash_write16(u16 value, void *addr)
+static void __flash_write16(u16 value, void *addr)
 {
        __raw_writew(value, addr);
 }
 
-static void flash_write32(u32 value, void *addr)
+static void __flash_write32(u32 value, void *addr)
 {
        __raw_writel(value, addr);
 }
 
-static void flash_write64(u64 value, void *addr)
+static void __flash_write64(u64 value, void *addr)
 {
        /* No architectures currently implement __raw_writeq() */
        *(volatile u64 *)addr = value;
 }
 
-static u8 flash_read8(void *addr)
+static u8 __flash_read8(void *addr)
 {
        return __raw_readb(addr);
 }
 
-static u16 flash_read16(void *addr)
+static u16 __flash_read16(void *addr)
 {
        return __raw_readw(addr);
 }
 
-static u32 flash_read32(void *addr)
+static u32 __flash_read32(void *addr)
 {
        return __raw_readl(addr);
 }
@@ -251,7 +251,25 @@ static u64 __flash_read64(void *addr)
        return *(volatile u64 *)addr;
 }
 
+#ifdef CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS
+void flash_write8(u8 value, void *addr)__attribute__((weak, alias("__flash_write8")));
+void flash_write16(u16 value, void *addr)__attribute__((weak, alias("__flash_write16")));
+void flash_write32(u32 value, void *addr)__attribute__((weak, alias("__flash_write32")));
+void flash_write64(u64 value, void *addr)__attribute__((weak, alias("__flash_write64")));
+u8 flash_read8(void *addr)__attribute__((weak, alias("__flash_read8")));
+u16 flash_read16(void *addr)__attribute__((weak, alias("__flash_read16")));
+u32 flash_read32(void *addr)__attribute__((weak, alias("__flash_read32")));
 u64 flash_read64(void *addr)__attribute__((weak, alias("__flash_read64")));
+#else
+#define flash_write8   __flash_write8
+#define flash_write16  __flash_write16
+#define flash_write32  __flash_write32
+#define flash_write64  __flash_write64
+#define flash_read8    __flash_read8
+#define flash_read16   __flash_read16
+#define flash_read32   __flash_read32
+#define flash_read64   __flash_read64
+#endif
 
 /*-----------------------------------------------------------------------
  */