[PATCH v3] ep93xx: move physmap flash registration into core.c
Ryan Mallon
ryan at bluewatersys.com
Wed Jun 9 16:59:07 EDT 2010
H Hartley Sweeten wrote:
> Create a core.c __init function to handle the physmap flash
> registration for all the ep93xx platforms. Also, modify all
> the ep93xx platforms to use this new function.
>
> This simplifies all the ep93xx platform init code and removes
> all the static variables that would exist in a unified kernel
> supporting multiple ep93xx platforms.
Looks fine. Not sure I understand the second part about the unified
kernel though. Can't we already build all ep93xx boards (at least those
at the same phys offset) into one kernel?
~Ryan
> Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
> Cc: Ryan Mallon <ryan at bluewatersys.com>
> Acked-by: Martin Guy <martinwguy at gmail.com>
>
> ---
>
> v3 - Rebased to 2.6.35-rc2
>
> arch/arm/mach-ep93xx/adssphere.c | 24 +---------------
> arch/arm/mach-ep93xx/core.c | 38 ++++++++++++++++++++++++++
> arch/arm/mach-ep93xx/edb93xx.c | 31 +-------------------
> arch/arm/mach-ep93xx/gesbc9312.c | 24 +---------------
> arch/arm/mach-ep93xx/include/mach/platform.h | 3 ++
> arch/arm/mach-ep93xx/micro9.c | 37 ++++++-------------------
> arch/arm/mach-ep93xx/simone.c | 24 +---------------
> arch/arm/mach-ep93xx/ts72xx.c | 27 +++---------------
> 8 files changed, 59 insertions(+), 149 deletions(-)
>
> diff --git a/arch/arm/mach-ep93xx/adssphere.c b/arch/arm/mach-ep93xx/adssphere.c
> index 3a1a855..f744f67 100644
> --- a/arch/arm/mach-ep93xx/adssphere.c
> +++ b/arch/arm/mach-ep93xx/adssphere.c
> @@ -13,7 +13,6 @@
> #include <linux/kernel.h>
> #include <linux/init.h>
> #include <linux/platform_device.h>
> -#include <linux/mtd/physmap.h>
>
> #include <mach/hardware.h>
>
> @@ -21,26 +20,6 @@
> #include <asm/mach/arch.h>
>
>
> -static struct physmap_flash_data adssphere_flash_data = {
> - .width = 4,
> -};
> -
> -static struct resource adssphere_flash_resource = {
> - .start = EP93XX_CS6_PHYS_BASE,
> - .end = EP93XX_CS6_PHYS_BASE + SZ_32M - 1,
> - .flags = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device adssphere_flash = {
> - .name = "physmap-flash",
> - .id = 0,
> - .dev = {
> - .platform_data = &adssphere_flash_data,
> - },
> - .num_resources = 1,
> - .resource = &adssphere_flash_resource,
> -};
> -
> static struct ep93xx_eth_data __initdata adssphere_eth_data = {
> .phy_id = 1,
> };
> @@ -48,8 +27,7 @@ static struct ep93xx_eth_data __initdata adssphere_eth_data = {
> static void __init adssphere_init_machine(void)
> {
> ep93xx_init_devices();
> - platform_device_register(&adssphere_flash);
> -
> + ep93xx_register_flash(4, EP93XX_CS6_PHYS_BASE, SZ_32M);
> ep93xx_register_eth(&adssphere_eth_data, 1);
> }
>
> diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
> index 9092677..b87c85f 100644
> --- a/arch/arm/mach-ep93xx/core.c
> +++ b/arch/arm/mach-ep93xx/core.c
> @@ -29,6 +29,7 @@
> #include <linux/termios.h>
> #include <linux/amba/bus.h>
> #include <linux/amba/serial.h>
> +#include <linux/mtd/physmap.h>
> #include <linux/i2c.h>
> #include <linux/i2c-gpio.h>
> #include <linux/spi/spi.h>
> @@ -348,6 +349,43 @@ static struct platform_device ep93xx_ohci_device = {
>
>
> /*************************************************************************
> + * EP93xx physmap'ed flash
> + *************************************************************************/
> +static struct physmap_flash_data ep93xx_flash_data;
> +
> +static struct resource ep93xx_flash_resource = {
> + .flags = IORESOURCE_MEM,
> +};
> +
> +static struct platform_device ep93xx_flash = {
> + .name = "physmap-flash",
> + .id = 0,
> + .dev = {
> + .platform_data = &ep93xx_flash_data,
> + },
> + .num_resources = 1,
> + .resource = &ep93xx_flash_resource,
> +};
> +
> +/**
> + * ep93xx_register_flash() - Register the external flash device.
> + * @width: bank width in octets
> + * @start: resource start address
> + * @size: resource size
> + */
> +void __init ep93xx_register_flash(unsigned int width,
> + resource_size_t start, resource_size_t size)
> +{
> + ep93xx_flash_data.width = width;
> +
> + ep93xx_flash_resource.start = start;
> + ep93xx_flash_resource.end = start + size - 1;
> +
> + platform_device_register(&ep93xx_flash);
> +}
> +
> +
> +/*************************************************************************
> * EP93xx ethernet peripheral handling
> *************************************************************************/
> static struct ep93xx_eth_data ep93xx_eth_data;
> diff --git a/arch/arm/mach-ep93xx/edb93xx.c b/arch/arm/mach-ep93xx/edb93xx.c
> index 3884182..c2ce903 100644
> --- a/arch/arm/mach-ep93xx/edb93xx.c
> +++ b/arch/arm/mach-ep93xx/edb93xx.c
> @@ -27,7 +27,6 @@
> #include <linux/kernel.h>
> #include <linux/init.h>
> #include <linux/platform_device.h>
> -#include <linux/mtd/physmap.h>
> #include <linux/gpio.h>
> #include <linux/i2c.h>
> #include <linux/i2c-gpio.h>
> @@ -38,39 +37,13 @@
> #include <asm/mach/arch.h>
>
>
> -static struct physmap_flash_data edb93xx_flash_data;
> -
> -static struct resource edb93xx_flash_resource = {
> - .flags = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device edb93xx_flash = {
> - .name = "physmap-flash",
> - .id = 0,
> - .dev = {
> - .platform_data = &edb93xx_flash_data,
> - },
> - .num_resources = 1,
> - .resource = &edb93xx_flash_resource,
> -};
> -
> -static void __init __edb93xx_register_flash(unsigned int width,
> - resource_size_t start, resource_size_t size)
> -{
> - edb93xx_flash_data.width = width;
> - edb93xx_flash_resource.start = start;
> - edb93xx_flash_resource.end = start + size - 1;
> -
> - platform_device_register(&edb93xx_flash);
> -}
> -
> static void __init edb93xx_register_flash(void)
> {
> if (machine_is_edb9307() || machine_is_edb9312() ||
> machine_is_edb9315()) {
> - __edb93xx_register_flash(4, EP93XX_CS6_PHYS_BASE, SZ_32M);
> + ep93xx_register_flash(4, EP93XX_CS6_PHYS_BASE, SZ_32M);
> } else {
> - __edb93xx_register_flash(2, EP93XX_CS6_PHYS_BASE, SZ_16M);
> + ep93xx_register_flash(2, EP93XX_CS6_PHYS_BASE, SZ_16M);
> }
> }
>
> diff --git a/arch/arm/mach-ep93xx/gesbc9312.c b/arch/arm/mach-ep93xx/gesbc9312.c
> index a809618..d97168c 100644
> --- a/arch/arm/mach-ep93xx/gesbc9312.c
> +++ b/arch/arm/mach-ep93xx/gesbc9312.c
> @@ -13,7 +13,6 @@
> #include <linux/kernel.h>
> #include <linux/init.h>
> #include <linux/platform_device.h>
> -#include <linux/mtd/physmap.h>
>
> #include <mach/hardware.h>
>
> @@ -21,26 +20,6 @@
> #include <asm/mach/arch.h>
>
>
> -static struct physmap_flash_data gesbc9312_flash_data = {
> - .width = 4,
> -};
> -
> -static struct resource gesbc9312_flash_resource = {
> - .start = EP93XX_CS6_PHYS_BASE,
> - .end = EP93XX_CS6_PHYS_BASE + SZ_8M - 1,
> - .flags = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device gesbc9312_flash = {
> - .name = "physmap-flash",
> - .id = 0,
> - .dev = {
> - .platform_data = &gesbc9312_flash_data,
> - },
> - .num_resources = 1,
> - .resource = &gesbc9312_flash_resource,
> -};
> -
> static struct ep93xx_eth_data __initdata gesbc9312_eth_data = {
> .phy_id = 1,
> };
> @@ -48,8 +27,7 @@ static struct ep93xx_eth_data __initdata gesbc9312_eth_data = {
> static void __init gesbc9312_init_machine(void)
> {
> ep93xx_init_devices();
> - platform_device_register(&gesbc9312_flash);
> -
> + ep93xx_register_flash(4, EP93XX_CS6_PHYS_BASE, SZ_8M);
> ep93xx_register_eth(&gesbc9312_eth_data, 0);
> }
>
> diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h
> index 9a4413d..a6c0917 100644
> --- a/arch/arm/mach-ep93xx/include/mach/platform.h
> +++ b/arch/arm/mach-ep93xx/include/mach/platform.h
> @@ -43,6 +43,9 @@ static inline void ep93xx_devcfg_clear_bits(unsigned int bits)
>
> unsigned int ep93xx_chip_revision(void);
>
> +void ep93xx_register_flash(unsigned int width,
> + resource_size_t start, resource_size_t size);
> +
> void ep93xx_register_eth(struct ep93xx_eth_data *data, int copy_addr);
> void ep93xx_register_i2c(struct i2c_gpio_platform_data *data,
> struct i2c_board_info *devices, int num);
> diff --git a/arch/arm/mach-ep93xx/micro9.c b/arch/arm/mach-ep93xx/micro9.c
> index 1cc911b..2ba7763 100644
> --- a/arch/arm/mach-ep93xx/micro9.c
> +++ b/arch/arm/mach-ep93xx/micro9.c
> @@ -14,7 +14,6 @@
> #include <linux/kernel.h>
> #include <linux/init.h>
> #include <linux/platform_device.h>
> -#include <linux/mtd/physmap.h>
> #include <linux/io.h>
>
> #include <mach/hardware.h>
> @@ -31,31 +30,6 @@
> * Micro9-Lite uses a separate MTD map driver for flash support
> * Micro9-Slim has up to 64MB of either 32-bit or 16-bit flash on CS1
> *************************************************************************/
> -static struct physmap_flash_data micro9_flash_data;
> -
> -static struct resource micro9_flash_resource = {
> - .start = EP93XX_CS1_PHYS_BASE,
> - .end = EP93XX_CS1_PHYS_BASE + SZ_64M - 1,
> - .flags = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device micro9_flash = {
> - .name = "physmap-flash",
> - .id = 0,
> - .dev = {
> - .platform_data = µ9_flash_data,
> - },
> - .num_resources = 1,
> - .resource = µ9_flash_resource,
> -};
> -
> -static void __init __micro9_register_flash(unsigned int width)
> -{
> - micro9_flash_data.width = width;
> -
> - platform_device_register(µ9_flash);
> -}
> -
> static unsigned int __init micro9_detect_bootwidth(void)
> {
> u32 v;
> @@ -70,10 +44,17 @@ static unsigned int __init micro9_detect_bootwidth(void)
>
> static void __init micro9_register_flash(void)
> {
> + unsigned int width;
> +
> if (machine_is_micro9())
> - __micro9_register_flash(4);
> + width = 4;
> else if (machine_is_micro9m() || machine_is_micro9s())
> - __micro9_register_flash(micro9_detect_bootwidth());
> + width = micro9_detect_bootwidth();
> + else
> + width = 0;
> +
> + if (width)
> + ep93xx_register_flash(width, EP93XX_CS1_PHYS_BASE, SZ_64M);
> }
>
>
> diff --git a/arch/arm/mach-ep93xx/simone.c b/arch/arm/mach-ep93xx/simone.c
> index 388aec9..5dded58 100644
> --- a/arch/arm/mach-ep93xx/simone.c
> +++ b/arch/arm/mach-ep93xx/simone.c
> @@ -18,7 +18,6 @@
> #include <linux/kernel.h>
> #include <linux/init.h>
> #include <linux/platform_device.h>
> -#include <linux/mtd/physmap.h>
> #include <linux/gpio.h>
> #include <linux/i2c.h>
> #include <linux/i2c-gpio.h>
> @@ -29,26 +28,6 @@
> #include <asm/mach-types.h>
> #include <asm/mach/arch.h>
>
> -static struct physmap_flash_data simone_flash_data = {
> - .width = 2,
> -};
> -
> -static struct resource simone_flash_resource = {
> - .start = EP93XX_CS6_PHYS_BASE,
> - .end = EP93XX_CS6_PHYS_BASE + SZ_8M - 1,
> - .flags = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device simone_flash = {
> - .name = "physmap-flash",
> - .id = 0,
> - .num_resources = 1,
> - .resource = &simone_flash_resource,
> - .dev = {
> - .platform_data = &simone_flash_data,
> - },
> -};
> -
> static struct ep93xx_eth_data __initdata simone_eth_data = {
> .phy_id = 1,
> };
> @@ -77,8 +56,7 @@ static struct i2c_board_info __initdata simone_i2c_board_info[] = {
> static void __init simone_init_machine(void)
> {
> ep93xx_init_devices();
> -
> - platform_device_register(&simone_flash);
> + ep93xx_register_flash(2, EP93XX_CS6_PHYS_BASE, SZ_8M);
> ep93xx_register_eth(&simone_eth_data, 1);
> ep93xx_register_fb(&simone_fb_info);
> ep93xx_register_i2c(&simone_i2c_gpio_data, simone_i2c_board_info,
> diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
> index ae7319e..93aeab8 100644
> --- a/arch/arm/mach-ep93xx/ts72xx.c
> +++ b/arch/arm/mach-ep93xx/ts72xx.c
> @@ -17,7 +17,6 @@
> #include <linux/platform_device.h>
> #include <linux/io.h>
> #include <linux/m48t86.h>
> -#include <linux/mtd/physmap.h>
> #include <linux/mtd/nand.h>
> #include <linux/mtd/partitions.h>
>
> @@ -173,31 +172,13 @@ static struct platform_device ts72xx_nand_flash = {
> };
>
>
> -/*************************************************************************
> - * NOR flash (TS-7200 only)
> - *************************************************************************/
> -static struct physmap_flash_data ts72xx_nor_data = {
> - .width = 2,
> -};
> -
> -static struct resource ts72xx_nor_resource = {
> - .start = EP93XX_CS6_PHYS_BASE,
> - .end = EP93XX_CS6_PHYS_BASE + SZ_16M - 1,
> - .flags = IORESOURCE_MEM,
> -};
> -
> -static struct platform_device ts72xx_nor_flash = {
> - .name = "physmap-flash",
> - .id = 0,
> - .dev.platform_data = &ts72xx_nor_data,
> - .resource = &ts72xx_nor_resource,
> - .num_resources = 1,
> -};
> -
> static void __init ts72xx_register_flash(void)
> {
> + /*
> + * TS7200 has NOR flash all other TS72xx board have NAND flash.
> + */
> if (board_is_ts7200()) {
> - platform_device_register(&ts72xx_nor_flash);
> + ep93xx_register_flash(2, EP93XX_CS6_PHYS_BASE, SZ_16M);
> } else {
> resource_size_t start;
>
>
>
--
Bluewater Systems Ltd - ARM Technology Solution Centre
Ryan Mallon 5 Amuri Park, 404 Barbadoes St
ryan at bluewatersys.com PO Box 13 889, Christchurch 8013
http://www.bluewatersys.com New Zealand
Phone: +64 3 3779127 Freecall: Australia 1800 148 751
Fax: +64 3 3779135 USA 1800 261 2934
More information about the linux-arm-kernel
mailing list