diff --git a/arch/arm/boards/at91rm9200ek/init.c b/arch/arm/boards/at91rm9200ek/init.c index 3ef41a2d7..9b589965e 100644 --- a/arch/arm/boards/at91rm9200ek/init.c +++ b/arch/arm/boards/at91rm9200ek/init.c @@ -50,8 +50,7 @@ static int at91rm9200ek_devices_init(void) at91_add_device_sdram(64 * 1024 * 1024); at91_add_device_eth(ðer_pdata); - add_generic_device("cfi_flash", 0, NULL, AT91_CHIPSELECT_0, 0, - IORESOURCE_MEM, NULL); + add_cfi_flash_device(0, AT91_CHIPSELECT_0, 0, 0); #if defined(CONFIG_DRIVER_CFI) || defined(CONFIG_DRIVER_CFI_OLD) devfs_add_partition("nor0", 0x00000, 0x40000, PARTITION_FIXED, "self"); diff --git a/arch/arm/boards/at91sam9263ek/init.c b/arch/arm/boards/at91sam9263ek/init.c index 655d46af3..036a1c484 100644 --- a/arch/arm/boards/at91sam9263ek/init.c +++ b/arch/arm/boards/at91sam9263ek/init.c @@ -120,8 +120,7 @@ static int at91sam9263ek_devices_init(void) at91_add_device_sdram(64 * 1024 * 1024); ek_add_device_nand(); at91_add_device_eth(&macb_pdata); - add_generic_device("cfi_flash", 0, NULL, AT91_CHIPSELECT_0, 8 * 1024 * 1024, - IORESOURCE_MEM, NULL); + add_cfi_flash_device(0, AT91_CHIPSELECT_0, 8 * 1024 * 1024, 0); ek_add_device_mci(); #if defined(CONFIG_DRIVER_CFI) || defined(CONFIG_DRIVER_CFI_OLD) diff --git a/arch/arm/boards/edb93xx/edb93xx.c b/arch/arm/boards/edb93xx/edb93xx.c index 49a01d650..b169db6e1 100644 --- a/arch/arm/boards/edb93xx/edb93xx.c +++ b/arch/arm/boards/edb93xx/edb93xx.c @@ -38,13 +38,6 @@ * Up to 32MiB NOR type flash, connected to * CS line 6, data width is 16 bit */ -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0x60000000, - .size = EDB93XX_CFI_FLASH_SIZE, -}; - static struct device_d eth_dev = { .id = -1, .name = "ep93xx_eth", @@ -54,7 +47,7 @@ static int ep93xx_devices_init(void) { struct device_d *sdram_dev; - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0x60000000, EDB93XX_CFI_FLASH_SIZE, 0); /* * Create partitions that should be diff --git a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c index 92424e690..4e69bbced 100644 --- a/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c +++ b/arch/arm/boards/eukrea_cpuimx27/eukrea_cpuimx27.c @@ -48,21 +48,6 @@ #include #include -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0xC0000000, - .size = 32 * 1024 * 1024, -}; -#ifdef CONFIG_EUKREA_CPUIMX27_NOR_64MB -static struct device_d cfi_dev1 = { - .id = -1, - .name = "cfi_flash", - .map_base = 0xC2000000, - .size = 32 * 1024 * 1024, -}; -#endif - #if defined CONFIG_EUKREA_CPUIMX27_SDRAM_256MB #define SDRAM0 256 #elif defined CONFIG_EUKREA_CPUIMX27_SDRAM_128MB @@ -254,9 +239,9 @@ static int eukrea_cpuimx27_devices_init(void) for (i = 0; i < ARRAY_SIZE(mode); i++) imx_gpio_mode(mode[i]); - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0xC0000000, 32 * 1024 * 1024, 0); #ifdef CONFIG_EUKREA_CPUIMX27_NOR_64MB - register_device(&cfi_dev1); + add_cfi_flash_device(-1, 0xC2000000, 32 * 1024 * 1024, 0); #endif imx27_add_nand(&nand_info); sdram_dev = add_mem_device("ram0", 0xa0000000, SDRAM0 * 1024 * 1024, diff --git a/arch/arm/boards/freescale-mx35-3-stack/3stack.c b/arch/arm/boards/freescale-mx35-3-stack/3stack.c index b3a03cc18..9113650e9 100644 --- a/arch/arm/boards/freescale-mx35-3-stack/3stack.c +++ b/arch/arm/boards/freescale-mx35-3-stack/3stack.c @@ -59,13 +59,6 @@ #define MX35PDK_BOARD_REV_1 0 #define MX35PDK_BOARD_REV_2 1 -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = IMX_CS0_BASE, - .size = 64 * 1024 * 1024, -}; - static struct fec_platform_data fec_info = { .xcv_type = MII100, .phy_addr = 0x1F, @@ -170,7 +163,7 @@ static int f3s_devices_init(void) * This platform supports NOR and NAND */ imx35_add_nand(&nand_info); - register_device(&cfi_dev); + add_cfi_flash_device(-1, IMX_CS0_BASE, 64 * 1024 * 1024, 0); switch ((reg >> 25) & 0x3) { case 0x01: /* NAND is the source */ diff --git a/arch/arm/boards/imx21ads/imx21ads.c b/arch/arm/boards/imx21ads/imx21ads.c index ab47a8d8a..854f7ab3a 100644 --- a/arch/arm/boards/imx21ads/imx21ads.c +++ b/arch/arm/boards/imx21ads/imx21ads.c @@ -41,13 +41,6 @@ #define MX21ADS_IO_REG 0xCC800000 #define MX21ADS_IO_LCDON (1 << 9) -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0xC8000000, - .size = 32 * 1024 * 1024, -}; - struct imx_nand_platform_data nand_info = { .width = 1, .hw_ecc = 1, @@ -171,7 +164,7 @@ static int mx21ads_devices_init(void) for (i = 0; i < ARRAY_SIZE(mode); i++) imx_gpio_mode(mode[i]); - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0xC8000000, 32 * 1024 * 1024, 0); sdram_dev = add_mem_device("ram0", 0xc0000000, 64 * 1024 * 1024, IORESOURCE_MEM_WRITEABLE); armlinux_add_dram(sdram_dev); diff --git a/arch/arm/boards/imx27ads/imx27ads.c b/arch/arm/boards/imx27ads/imx27ads.c index 8aaf3a25c..db49aac39 100644 --- a/arch/arm/boards/imx27ads/imx27ads.c +++ b/arch/arm/boards/imx27ads/imx27ads.c @@ -34,13 +34,6 @@ #include #include -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0xC0000000, - .size = 32 * 1024 * 1024, -}; - static struct fec_platform_data fec_info = { .xcv_type = MII100, .phy_addr = 1, @@ -114,7 +107,7 @@ static int mx27ads_devices_init(void) for (i = 0; i < ARRAY_SIZE(mode); i++) imx_gpio_mode(mode[i]); - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0xC0000000, 32 * 1024 * 1024, 0); sdram_dev = add_mem_device("ram0", 0xa0000000, 128 * 1024 * 1024, IORESOURCE_MEM_WRITEABLE); diff --git a/arch/arm/boards/mmccpu/init.c b/arch/arm/boards/mmccpu/init.c index 85a18e0ca..eb6b4900f 100644 --- a/arch/arm/boards/mmccpu/init.c +++ b/arch/arm/boards/mmccpu/init.c @@ -54,8 +54,7 @@ static int mmccpu_devices_init(void) at91_add_device_sdram(128 * 1024 * 1024); at91_add_device_eth(&macb_pdata); - add_generic_device("cfi_flash", 0, NULL, AT91_CHIPSELECT_0, 0, - IORESOURCE_MEM, NULL); + add_cfi_flash_device(0, AT91_CHIPSELECT_0, 0, 0); devfs_add_partition("nor0", 0x00000, 256 * 1024, PARTITION_FIXED, "self0"); devfs_add_partition("nor0", 0x40000, 128 * 1024, PARTITION_FIXED, "env0"); diff --git a/arch/arm/boards/netx/netx.c b/arch/arm/boards/netx/netx.c index 5e25b94ba..f3be34810 100644 --- a/arch/arm/boards/netx/netx.c +++ b/arch/arm/boards/netx/netx.c @@ -30,13 +30,6 @@ #include #include -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0xC0000000, - .size = 32 * 1024 * 1024, -}; - struct netx_eth_platform_data eth0_data = { .xcno = 0, }; @@ -60,7 +53,7 @@ static struct device_d netx_eth_dev1 = { static int netx_devices_init(void) { struct device_d *sdram_dev; - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0xC0000000, 32 * 1024 * 1024, 0); sdram_dev = add_mem_device("ram0", 0x80000000, 64 * 1024 * 1024, IORESOURCE_MEM_WRITEABLE); diff --git a/arch/arm/boards/pcm037/pcm037.c b/arch/arm/boards/pcm037/pcm037.c index 7895059ad..6e20d1d6d 100644 --- a/arch/arm/boards/pcm037/pcm037.c +++ b/arch/arm/boards/pcm037/pcm037.c @@ -39,17 +39,6 @@ #include #include -/* - * Up to 32MiB NOR type flash, connected to - * CS line 0, data width is 16 bit - */ -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = IMX_CS0_BASE, - .size = 32 * 1024 * 1024, /* area size */ -}; - /* * SMSC 9217 network controller * connected to CS line 1 and interrupt line @@ -227,7 +216,11 @@ static int imx31_devices_init(void) __REG(CSCR_L(5)) = 0x444A0301; __REG(CSCR_A(5)) = 0x44443302; - register_device(&cfi_dev); + /* + * Up to 32MiB NOR type flash, connected to + * CS line 0, data width is 16 bit + */ + add_cfi_flash_device(-1, IMX_CS0_BASE, 32 * 1024 * 1024, 0); /* * Create partitions that should be diff --git a/arch/arm/boards/pcm038/pcm038.c b/arch/arm/boards/pcm038/pcm038.c index 046fbd50e..2f87b1245 100644 --- a/arch/arm/boards/pcm038/pcm038.c +++ b/arch/arm/boards/pcm038/pcm038.c @@ -47,13 +47,6 @@ #include "pll.h" -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0xC0000000, - .size = 32 * 1024 * 1024, -}; - static struct fec_platform_data fec_info = { .xcv_type = MII100, .phy_addr = 1, @@ -267,7 +260,7 @@ static int pcm038_devices_init(void) spi_register_board_info(pcm038_spi_board_info, ARRAY_SIZE(pcm038_spi_board_info)); imx27_add_spi0(&pcm038_spi_0_data); - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0xC0000000, 32 * 1024 * 1024, 0); imx27_add_nand(&nand_info); sdram_dev = add_mem_device("ram0", 0xa0000000, 128 * 1024 * 1024, IORESOURCE_MEM_WRITEABLE); diff --git a/arch/arm/boards/pcm043/pcm043.c b/arch/arm/boards/pcm043/pcm043.c index 0cfd6751f..3bd64023b 100644 --- a/arch/arm/boards/pcm043/pcm043.c +++ b/arch/arm/boards/pcm043/pcm043.c @@ -46,17 +46,6 @@ #include #include -/* - * Up to 32MiB NOR type flash, connected to - * CS line 0, data width is 16 bit - */ -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = IMX_CS0_BASE, - .size = 32 * 1024 * 1024, /* area size */ -}; - static struct fec_platform_data fec_info = { .xcv_type = MII100, }; @@ -158,7 +147,11 @@ static int imx35_devices_init(void) * This platform supports NOR and NAND */ imx35_add_nand(&nand_info); - register_device(&cfi_dev); + /* + * Up to 32MiB NOR type flash, connected to + * CS line 0, data width is 16 bit + */ + add_cfi_flash_device(-1, IMX_CS0_BASE, 32 * 1024 * 1024, 0); if ((reg & 0xc00) == 0x800) { /* reset mode: external boot */ switch ( (reg >> 25) & 0x3) { diff --git a/arch/arm/boards/pm9261/init.c b/arch/arm/boards/pm9261/init.c index 38e4350d2..1059aecc9 100644 --- a/arch/arm/boards/pm9261/init.c +++ b/arch/arm/boards/pm9261/init.c @@ -151,8 +151,7 @@ static int pm9261_devices_init(void) { at91_add_device_sdram(64 * 1024 * 1024); pm_add_device_nand(); - add_generic_device("cfi_flash", 0, NULL, AT91_CHIPSELECT_0, 4 * 1024 * 1024, - IORESOURCE_MEM, NULL); + add_cfi_flash_device(0, AT91_CHIPSELECT_0, 4 * 1024 * 1024, 0); devfs_add_partition("nor0", 0x00000, 0x40000, PARTITION_FIXED, "self"); devfs_add_partition("nor0", 0x40000, 0x10000, PARTITION_FIXED, "env0"); diff --git a/arch/arm/boards/pm9263/init.c b/arch/arm/boards/pm9263/init.c index 9f86d672a..418b80413 100644 --- a/arch/arm/boards/pm9263/init.c +++ b/arch/arm/boards/pm9263/init.c @@ -104,8 +104,7 @@ static int pm9263_devices_init(void) at91_add_device_sdram(64 * 1024 * 1024); pm_add_device_nand(); at91_add_device_eth(&macb_pdata); - add_generic_device("cfi_flash", 0, NULL, AT91_CHIPSELECT_0, 4 * 1024 * 1024, - IORESOURCE_MEM, NULL); + add_cfi_flash_device(0, AT91_CHIPSELECT_0, 4 * 1024 * 1024, 0); devfs_add_partition("nor0", 0x00000, 0x40000, PARTITION_FIXED, "self0"); devfs_add_partition("nor0", 0x40000, 0x10000, PARTITION_FIXED, "env0"); diff --git a/arch/arm/boards/scb9328/scb9328.c b/arch/arm/boards/scb9328/scb9328.c index 2fe8236d2..d49eaff92 100644 --- a/arch/arm/boards/scb9328/scb9328.c +++ b/arch/arm/boards/scb9328/scb9328.c @@ -33,14 +33,6 @@ #include #include -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - - .map_base = 0x10000000, - .size = 16 * 1024 * 1024, -}; - static struct dm9000_platform_data dm9000_data = { .buswidth = DM9000_WIDTH_16, .srom = 1, @@ -110,7 +102,7 @@ static int scb9328_devices_init(void) CS5U = 0x00008400; CS5L = 0x00000D03; - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0x10000000, 16 * 1024 * 1024, 0); sdram_dev = add_mem_device("ram0", 0x08000000, 16 * 1024 * 1024, IORESOURCE_MEM_WRITEABLE); armlinux_add_dram(sdram_dev); diff --git a/arch/arm/boards/versatile/versatilepb.c b/arch/arm/boards/versatile/versatilepb.c index 5568f216e..830be93f4 100644 --- a/arch/arm/boards/versatile/versatilepb.c +++ b/arch/arm/boards/versatile/versatilepb.c @@ -33,13 +33,6 @@ #include #include -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = VERSATILE_FLASH_BASE, - .size = VERSATILE_FLASH_SIZE, -}; - static int vpb_console_init(void) { versatile_register_uart(0); @@ -58,7 +51,7 @@ static int vpb_devices_init(void) { versatile_add_sdram(64 * 1024 *1024); - register_device(&cfi_dev); + add_cfi_flash_device(-1, VERSATILE_FLASH_BASE, VERSATILE_FLASH_SIZE, 0); devfs_add_partition("nor0", 0x00000, 0x40000, PARTITION_FIXED, "self"); devfs_add_partition("nor0", 0x40000, 0x20000, PARTITION_FIXED, "env0"); diff --git a/arch/blackfin/boards/ipe337/ipe337.c b/arch/blackfin/boards/ipe337/ipe337.c index 81a6a6fa0..4430f3b3a 100644 --- a/arch/blackfin/boards/ipe337/ipe337.c +++ b/arch/blackfin/boards/ipe337/ipe337.c @@ -5,13 +5,6 @@ #include #include -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0x20000000, - .size = 32 * 1024 * 1024, -}; - static struct device_d smc911x_dev = { .id = -1, .name = "smc911x", @@ -20,7 +13,7 @@ static struct device_d smc911x_dev = { }; static int ipe337_devices_init(void) { - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0x20000000, 32 * 1024 * 1024, 0); add_mem_device("ram0", 0x0, 128 * 1024 * 1024, IORESOURCE_MEM_WRITEABLE); diff --git a/arch/nios2/boards/generic/generic.c b/arch/nios2/boards/generic/generic.c index 37adfaa3b..089715b74 100644 --- a/arch/nios2/boards/generic/generic.c +++ b/arch/nios2/boards/generic/generic.c @@ -4,13 +4,6 @@ #include #include -static struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = NIOS_SOPC_FLASH_BASE, - .size = NIOS_SOPC_FLASH_SIZE, -}; - static int phy_address = 1; static struct device_d mac_dev = { @@ -37,7 +30,7 @@ static struct device_d epcs_flash_device = { static int generic_devices_init(void) { - register_device(&cfi_dev); + add_cfi_flash_device(-1, NIOS_SOPC_FLASH_BASE, NIOS_SOPC_FLASH_SIZE, 0); add_mem_device("ram0", NIOS_SOPC_MEMORY_BASE, NIOS_SOPC_MEMORY_SIZE, IORESOURCE_MEM_WRITEABLE); register_device(&mac_dev); diff --git a/arch/ppc/boards/pcm030/pcm030.c b/arch/ppc/boards/pcm030/pcm030.c index 3c23d8315..0f09d3e7d 100644 --- a/arch/ppc/boards/pcm030/pcm030.c +++ b/arch/ppc/boards/pcm030/pcm030.c @@ -37,13 +37,6 @@ #include #include -struct device_d cfi_dev = { - .id = -1, - .name = "cfi_flash", - .map_base = 0xff000000, - .size = 16 * 1024 * 1024, -}; - static struct mpc5xxx_fec_platform_data fec_info = { .xcv_type = MII100, }; @@ -57,7 +50,7 @@ struct device_d eth_dev = { static int devices_init (void) { - register_device(&cfi_dev); + add_cfi_flash_device(-1, 0xff000000, 16 * 1024 * 1024, 0); add_mem_device("ram0", 0x0, 64 * 1024 * 1024, IORESOURCE_MEM_WRITEABLE); register_device(ð_dev); diff --git a/include/driver.h b/include/driver.h index 738cfaee5..af3480393 100644 --- a/include/driver.h +++ b/include/driver.h @@ -220,6 +220,13 @@ static inline struct device_d *add_mem_device(const char *name, resource_size_t IORESOURCE_MEM | flags, NULL); } +static inline struct device_d *add_cfi_flash_device(int id, resource_size_t start, + resource_size_t size, unsigned int flags) +{ + return add_generic_device("cfi_flash", id, NULL, start, size, + IORESOURCE_MEM | flags, NULL); +} + /* linear list over all available devices */ extern struct list_head device_list;