mtd: cfi: Zap cfi_flash_base in DM case
authorMarek Vasut <marek.vasut@gmail.com>
Tue, 12 Sep 2017 17:09:08 +0000 (19:09 +0200)
committerStefan Roese <sr@denx.de>
Tue, 26 Sep 2017 08:57:53 +0000 (10:57 +0200)
Embed the flash base into struct flash_info instead of having ad-hoc
static array in the code. This does not only remove static variable,
but also allows CFI-like controllers, ie. HyperFlash ones, to use most
of the CFI flash code by populating the flash_info with matching base
address.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Signed-off-by: Stefan Roese <sr@denx.de>
drivers/mtd/cfi_flash.c
include/flash.h

index f3bb72788a9c34cac16cbf21393fe2870ddeeabe..df04a425e2078e715b42b792c7a7d00411674a5d 100644 (file)
@@ -111,11 +111,9 @@ static void cfi_flash_init_dm(void)
        }
 }
 
-static phys_addr_t cfi_flash_base[CFI_MAX_FLASH_BANKS];
-
 phys_addr_t cfi_flash_bank_addr(int i)
 {
-       return cfi_flash_base[i];
+       return flash_info[i].base;
 }
 #else
 __weak phys_addr_t cfi_flash_bank_addr(int i)
@@ -2458,10 +2456,12 @@ static int cfi_flash_probe(struct udevice *dev)
        while (idx < len) {
                addr = fdt_translate_address((void *)blob,
                                             node, cell + idx);
-               cfi_flash_base[cfi_flash_num_flash_banks++] = addr;
+               flash_info[cfi_flash_num_flash_banks].dev = dev;
+               flash_info[cfi_flash_num_flash_banks].base = addr;
+               cfi_flash_num_flash_banks++;
                idx += addrc + sizec;
        }
-       gd->bd->bi_flashstart = cfi_flash_base[0];
+       gd->bd->bi_flashstart = flash_info[0].base;
 
        return 0;
 }
index f53fe913496b877a5c7d1814295f34a4c0d26818..0eedb1efa892135071a84adccfeb1ffbdf9e1247 100644 (file)
@@ -47,6 +47,10 @@ typedef struct {
 #ifdef CONFIG_MTD
        struct mtd_info *mtd;
 #endif
+#ifdef CONFIG_CFI_FLASH                        /* DM-specific parts */
+       struct udevice *dev;
+       phys_addr_t base;
+#endif
 } flash_info_t;
 
 extern flash_info_t flash_info[]; /* info for FLASH chips      */