From: "stanley.miao" <stanley.miao@windriver.com>
To: Viresh KUMAR <viresh.kumar@st.com>
Cc: pratyush.anand@st.com, vipulkumar.samar@st.com,
bhupesh.sharma@st.com, armando.visconti@st.com,
dmitry.torokhov@gmail.com, Vipin Kumar <vipin.kumar@st.com>,
shiraz.hashim@st.com, rajeev-dlh.kumar@st.com,
linux-mtd@lists.infradead.org, deepak.sikri@st.com,
dwmw2@infradead.org, linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH V2 28/69] ST SPEAr: Adding machine support for nand
Date: Sun, 28 Nov 2010 14:27:28 +0800 [thread overview]
Message-ID: <4CF1F650.8080505@windriver.com> (raw)
In-Reply-To: <1076320a0194c19ef0b4beefdf3c43a44e200439.1285933331.git.viresh.kumar@st.com>
Hi, Viresh,
It looked you missed the file include/mtd/fsmc.h in this patch.
Stanley.
Viresh KUMAR wrote:
> From: Vipin Kumar <vipin.kumar@st.com>
>
> Signed-off-by: Vipin Kumar <vipin.kumar@st.com>
> Signed-off-by: Rajeev Kumar <rajeev-dlh.kumar@st.com>
> Signed-off-by: Shiraz Hashim <shiraz.hashim@st.com>
> Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
> ---
> arch/arm/mach-spear13xx/include/mach/generic.h | 2 +
> arch/arm/mach-spear13xx/include/mach/misc_regs.h | 10 ++
> arch/arm/mach-spear13xx/spear1300_evb.c | 9 ++
> arch/arm/mach-spear13xx/spear13xx.c | 58 +++++++++++++
> arch/arm/mach-spear3xx/include/mach/generic.h | 15 ++--
> arch/arm/mach-spear3xx/include/mach/spear320.h | 3 +
> arch/arm/mach-spear3xx/spear300.c | 98 ++++++++++++++++++++++
> arch/arm/mach-spear3xx/spear300_evb.c | 8 ++
> arch/arm/mach-spear3xx/spear310.c | 26 ++++++
> arch/arm/mach-spear3xx/spear310_evb.c | 8 ++
> arch/arm/mach-spear3xx/spear320.c | 26 ++++++
> arch/arm/mach-spear3xx/spear320_evb.c | 8 ++
> arch/arm/mach-spear6xx/include/mach/generic.h | 1 +
> arch/arm/mach-spear6xx/spear600_evb.c | 8 ++
> arch/arm/mach-spear6xx/spear6xx.c | 26 ++++++
> arch/arm/plat-spear/include/plat/fsmc.h | 36 ++++++++
> 16 files changed, 336 insertions(+), 6 deletions(-)
> create mode 100644 arch/arm/plat-spear/include/plat/fsmc.h
>
> diff --git a/arch/arm/mach-spear13xx/include/mach/generic.h b/arch/arm/mach-spear13xx/include/mach/generic.h
> index 960ff06..745dd99 100644
> --- a/arch/arm/mach-spear13xx/include/mach/generic.h
> +++ b/arch/arm/mach-spear13xx/include/mach/generic.h
> @@ -35,6 +35,7 @@ extern struct platform_device spear13xx_ehci0_device;
> extern struct platform_device spear13xx_ehci1_device;
> extern struct platform_device spear13xx_i2c_device;
> extern struct platform_device spear13xx_kbd_device;
> +extern struct platform_device spear13xx_nand_device;
> extern struct platform_device spear13xx_ohci0_device;
> extern struct platform_device spear13xx_ohci1_device;
> extern struct platform_device spear13xx_rtc_device;
> @@ -51,6 +52,7 @@ void __init spear1300_init(void);
> void __init spear13xx_map_io(void);
> void __init spear13xx_init_irq(void);
> void __init spear13xx_init(void);
> +void __init nand_mach_init(u32 busw);
> void spear13xx_secondary_startup(void);
>
> #endif /* __MACH_GENERIC_H */
> diff --git a/arch/arm/mach-spear13xx/include/mach/misc_regs.h b/arch/arm/mach-spear13xx/include/mach/misc_regs.h
> index a8a1119..e6823db 100644
> --- a/arch/arm/mach-spear13xx/include/mach/misc_regs.h
> +++ b/arch/arm/mach-spear13xx/include/mach/misc_regs.h
> @@ -210,6 +210,16 @@
> #define CF_MMC_ACTIVE 0x2
> #define XD_MMC_ACTIVE 0x3
> #define FSMC_CFG ((unsigned int *)(MISC_BASE + 0x330))
> + /* FSMC_CFG register masks */
> + #define FSMC_MEMSEL_MASK 0x3
> + #define FSMC_MEMSEL_SHIFT 0
> + #define FSMC_MEM_NOR 0
> + #define FSMC_MEM_NAND 1
> + #define FSMC_MEM_SRAM 2
> + #define NAND_BANK_MASK 0x3
> + #define NAND_BANK_SHIFT 2
> + #define NAND_DEV_WIDTH16 4
> +
> #define MPMC_CTR_STS ((unsigned int *)(MISC_BASE + 0x334))
>
> /* Inter-Processor Communication Registers */
> diff --git a/arch/arm/mach-spear13xx/spear1300_evb.c b/arch/arm/mach-spear13xx/spear1300_evb.c
> index 1e637fa..56a4294 100644
> --- a/arch/arm/mach-spear13xx/spear1300_evb.c
> +++ b/arch/arm/mach-spear13xx/spear1300_evb.c
> @@ -12,11 +12,14 @@
> */
>
> #include <linux/types.h>
> +#include <linux/mtd/nand.h>
> +#include <mtd/fsmc.h>
> #include <asm/mach/arch.h>
> #include <asm/mach-types.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> #include <plat/keyboard.h>
> +#include <plat/fsmc.h>
> #include <plat/smi.h>
>
> static struct amba_device *amba_devs[] __initdata = {
> @@ -30,6 +33,7 @@ static struct platform_device *plat_devs[] __initdata = {
> &spear13xx_ehci1_device,
> &spear13xx_i2c_device,
> &spear13xx_kbd_device,
> + &spear13xx_nand_device,
> &spear13xx_ohci0_device,
> &spear13xx_ohci1_device,
> &spear13xx_rtc_device,
> @@ -52,6 +56,11 @@ static void __init spear1300_evb_init(void)
> /* set keyboard plat data */
> kbd_set_plat_data(&spear13xx_kbd_device, &kbd_data);
>
> + /* set nand device's plat data */
> + fsmc_nand_set_plat_data(&spear13xx_nand_device, NULL, 0,
> + NAND_SKIP_BBTSCAN, FSMC_NAND_BW8);
> + nand_mach_init(FSMC_NAND_BW8);
> +
> /* call spear1300 machine init function */
> spear1300_init();
>
> diff --git a/arch/arm/mach-spear13xx/spear13xx.c b/arch/arm/mach-spear13xx/spear13xx.c
> index f7d30a9..55d654f 100644
> --- a/arch/arm/mach-spear13xx/spear13xx.c
> +++ b/arch/arm/mach-spear13xx/spear13xx.c
> @@ -15,6 +15,7 @@
> #include <linux/amba/pl061.h>
> #include <linux/ptrace.h>
> #include <linux/io.h>
> +#include <mtd/fsmc.h>
> #include <asm/hardware/gic.h>
> #include <asm/irq.h>
> #include <asm/localtimer.h>
> @@ -23,6 +24,7 @@
> #include <mach/irqs.h>
> #include <mach/generic.h>
> #include <mach/hardware.h>
> +#include <mach/misc_regs.h>
>
> /* Add spear13xx machines common devices here */
> /* gpio device registeration */
> @@ -97,6 +99,62 @@ struct platform_device spear13xx_i2c_device = {
> .resource = i2c_resources,
> };
>
> +/* nand device registeration */
> +void __init nand_mach_init(u32 busw)
> +{
> + u32 fsmc_cfg = readl(FSMC_CFG);
> + fsmc_cfg &= ~(FSMC_MEMSEL_MASK << FSMC_MEMSEL_SHIFT);
> + fsmc_cfg |= (FSMC_MEM_NAND << FSMC_MEMSEL_SHIFT);
> +
> + if (busw == FSMC_NAND_BW16)
> + fsmc_cfg |= 1 << NAND_DEV_WIDTH16;
> + else
> + fsmc_cfg &= ~(1 << NAND_DEV_WIDTH16);
> +
> + writel(fsmc_cfg, FSMC_CFG);
> +}
> +
> +static void nand_select_bank(u32 bank, u32 busw)
> +{
> + u32 fsmc_cfg = readl(FSMC_CFG);
> +
> + fsmc_cfg &= ~(NAND_BANK_MASK << NAND_BANK_SHIFT);
> + fsmc_cfg |= (bank << NAND_BANK_SHIFT);
> +
> + if (busw)
> + fsmc_cfg |= 1 << NAND_DEV_WIDTH16;
> + else
> + fsmc_cfg &= ~(1 << NAND_DEV_WIDTH16);
> +
> + writel(fsmc_cfg, FSMC_CFG);
> +}
> +
> +static struct fsmc_nand_platform_data nand_platform_data = {
> + .select_bank = nand_select_bank,
> +};
> +
> +static struct resource nand_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR13XX_FSMC_MEM_BASE,
> + .end = SPEAR13XX_FSMC_MEM_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR13XX_FSMC_BASE,
> + .end = SPEAR13XX_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device spear13xx_nand_device = {
> + .name = "nand",
> + .id = -1,
> + .resource = nand_resources,
> + .num_resources = ARRAY_SIZE(nand_resources),
> + .dev.platform_data = &nand_platform_data,
> +};
> +
> /* usb host device registeration */
> static struct resource ehci0_resources[] = {
> [0] = {
> diff --git a/arch/arm/mach-spear3xx/include/mach/generic.h b/arch/arm/mach-spear3xx/include/mach/generic.h
> index 91c0c09..6aac229 100644
> --- a/arch/arm/mach-spear3xx/include/mach/generic.h
> +++ b/arch/arm/mach-spear3xx/include/mach/generic.h
> @@ -111,6 +111,10 @@ extern struct pmx_driver pmx_driver;
> extern struct amba_device clcd_device;
> extern struct amba_device gpio1_device;
> extern struct platform_device kbd_device;
> +extern struct platform_device nand0_device;
> +extern struct platform_device nand1_device;
> +extern struct platform_device nand2_device;
> +extern struct platform_device nand3_device;
>
> /* pad mux modes */
> extern struct pmx_mode nand_mode;
> @@ -148,12 +152,12 @@ void __init spear300_init(void);
>
> /* Add misc structure declarations here */
> extern struct clcd_board clcd_plat_data;
> -#endif /* CONFIG_MACH_SPEAR300 */
>
> /* spear310 declarations */
> -#ifdef CONFIG_MACH_SPEAR310
> +#elif defined(CONFIG_MACH_SPEAR310)
> /* Add spear310 machine device structure declarations here */
> extern struct platform_device plgpio_device;
> +extern struct platform_device nand_device;
>
> /* pad mux devices */
> extern struct pmx_dev pmx_emi_cs_0_1_4_5;
> @@ -168,13 +172,12 @@ extern struct pmx_dev pmx_tdm0;
> /* Add spear310 machine function declarations here */
> void __init spear310_init(void);
>
> -#endif /* CONFIG_MACH_SPEAR310 */
> -
> /* spear320 declarations */
> -#ifdef CONFIG_MACH_SPEAR320
> +#elif defined(CONFIG_MACH_SPEAR320)
> /* Add spear320 machine device structure declarations here */
> extern struct amba_device clcd_device;
> extern struct platform_device i2c1_device;
> +extern struct platform_device nand_device;
> extern struct platform_device plgpio_device;
> extern struct platform_device pwm_device;
>
> @@ -213,6 +216,6 @@ void __init spear320_init(void);
>
> /* Add misc structure declarations here */
> extern struct clcd_board clcd_plat_data;
> -#endif /* CONFIG_MACH_SPEAR320 */
> +#endif
>
> #endif /* __MACH_GENERIC_H */
> diff --git a/arch/arm/mach-spear3xx/include/mach/spear320.h b/arch/arm/mach-spear3xx/include/mach/spear320.h
> index 53677e4..aa6727c 100644
> --- a/arch/arm/mach-spear3xx/include/mach/spear320.h
> +++ b/arch/arm/mach-spear3xx/include/mach/spear320.h
> @@ -22,6 +22,9 @@
> #define SPEAR320_FSMC_BASE 0x4C000000
> #define SPEAR320_FSMC_SIZE 0x01000000
>
> +#define SPEAR320_NAND_BASE 0x50000000
> +#define SPEAR320_NAND_SIZE 0x04000000
> +
> #define SPEAR320_I2S_BASE 0x60000000
> #define SPEAR320_I2S_SIZE 0x10000000
>
> diff --git a/arch/arm/mach-spear3xx/spear300.c b/arch/arm/mach-spear3xx/spear300.c
> index c80d4e1..c213614 100644
> --- a/arch/arm/mach-spear3xx/spear300.c
> +++ b/arch/arm/mach-spear3xx/spear300.c
> @@ -14,6 +14,7 @@
> #include <linux/types.h>
> #include <linux/amba/pl061.h>
> #include <linux/ptrace.h>
> +#include <mtd/fsmc.h>
> #include <asm/irq.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> @@ -426,6 +427,103 @@ struct platform_device kbd_device = {
> .resource = kbd_resources,
> };
>
> +/* nand device registeration */
> +static struct fsmc_nand_platform_data nand0_platform_data;
> +
> +static struct resource nand0_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR300_NAND_0_BASE,
> + .end = SPEAR300_NAND_0_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR300_FSMC_BASE,
> + .end = SPEAR300_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device nand0_device = {
> + .name = "nand",
> + .id = 0,
> + .resource = nand0_resources,
> + .num_resources = ARRAY_SIZE(nand0_resources),
> + .dev.platform_data = &nand0_platform_data,
> +};
> +
> +static struct fsmc_nand_platform_data nand1_platform_data;
> +
> +static struct resource nand1_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR300_NAND_1_BASE,
> + .end = SPEAR300_NAND_1_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR300_FSMC_BASE,
> + .end = SPEAR300_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device nand1_device = {
> + .name = "nand",
> + .id = 1,
> + .resource = nand1_resources,
> + .num_resources = ARRAY_SIZE(nand1_resources),
> + .dev.platform_data = &nand1_platform_data,
> +};
> +
> +static struct fsmc_nand_platform_data nand2_platform_data;
> +
> +static struct resource nand2_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR300_NAND_2_BASE,
> + .end = SPEAR300_NAND_2_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR300_FSMC_BASE,
> + .end = SPEAR300_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device nand2_device = {
> + .name = "nand",
> + .id = 2,
> + .resource = nand2_resources,
> + .num_resources = ARRAY_SIZE(nand2_resources),
> + .dev.platform_data = &nand2_platform_data,
> +};
> +
> +static struct fsmc_nand_platform_data nand3_platform_data;
> +
> +static struct resource nand3_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR300_NAND_3_BASE,
> + .end = SPEAR300_NAND_3_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR300_FSMC_BASE,
> + .end = SPEAR300_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device nand3_device = {
> + .name = "nand",
> + .id = 3,
> + .resource = nand3_resources,
> + .num_resources = ARRAY_SIZE(nand3_resources),
> + .dev.platform_data = &nand3_platform_data,
> +};
> +
> /* spear3xx shared irq */
> struct shirq_dev_config shirq_ras1_config[] = {
> {
> diff --git a/arch/arm/mach-spear3xx/spear300_evb.c b/arch/arm/mach-spear3xx/spear300_evb.c
> index 7bd8963..41ad013 100644
> --- a/arch/arm/mach-spear3xx/spear300_evb.c
> +++ b/arch/arm/mach-spear3xx/spear300_evb.c
> @@ -11,10 +11,13 @@
> * warranty of any kind, whether express or implied.
> */
>
> +#include <linux/mtd/nand.h>
> +#include <mtd/fsmc.h>
> #include <asm/mach/arch.h>
> #include <asm/mach-types.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> +#include <plat/fsmc.h>
> #include <plat/keyboard.h>
> #include <plat/smi.h>
>
> @@ -49,6 +52,7 @@ static struct platform_device *plat_devs[] __initdata = {
> /* spear3xx specific devices */
> &ehci_device,
> &i2c_device,
> + &nand0_device,
> &ohci0_device,
> &ohci1_device,
> &rtc_device,
> @@ -79,6 +83,10 @@ static void __init spear300_evb_init(void)
> /* set keyboard plat data */
> kbd_set_plat_data(&kbd_device, &kbd_data);
>
> + /* set nand0 device's plat data */
> + fsmc_nand_set_plat_data(&nand0_device, NULL, 0, NAND_SKIP_BBTSCAN,
> + FSMC_NAND_BW8);
> +
> /* call spear300 machine init function */
> spear300_init();
>
> diff --git a/arch/arm/mach-spear3xx/spear310.c b/arch/arm/mach-spear3xx/spear310.c
> index 88b55b5..1c84303 100644
> --- a/arch/arm/mach-spear3xx/spear310.c
> +++ b/arch/arm/mach-spear3xx/spear310.c
> @@ -12,6 +12,7 @@
> */
>
> #include <linux/ptrace.h>
> +#include <mtd/fsmc.h>
> #include <asm/irq.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> @@ -177,6 +178,31 @@ int spear300_o2p(int offset)
> return offset + 2;
> }
>
> +/* nand device registeration */
> +static struct fsmc_nand_platform_data nand_platform_data;
> +
> +static struct resource nand_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR310_NAND_BASE,
> + .end = SPEAR310_NAND_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR310_FSMC_BASE,
> + .end = SPEAR310_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device nand_device = {
> + .name = "nand",
> + .id = -1,
> + .resource = nand_resources,
> + .num_resources = ARRAY_SIZE(nand_resources),
> + .dev.platform_data = &nand_platform_data,
> +};
> +
> static struct plgpio_platform_data plgpio_plat_data = {
> .gpio_base = 8,
> .irq_base = SPEAR_PLGPIO_INT_BASE,
> diff --git a/arch/arm/mach-spear3xx/spear310_evb.c b/arch/arm/mach-spear3xx/spear310_evb.c
> index cd076c9..857afae 100644
> --- a/arch/arm/mach-spear3xx/spear310_evb.c
> +++ b/arch/arm/mach-spear3xx/spear310_evb.c
> @@ -11,10 +11,13 @@
> * warranty of any kind, whether express or implied.
> */
>
> +#include <linux/mtd/nand.h>
> +#include <mtd/fsmc.h>
> #include <asm/mach/arch.h>
> #include <asm/mach-types.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> +#include <plat/fsmc.h>
> #include <plat/smi.h>
>
> /* padmux devices to enable */
> @@ -54,6 +57,7 @@ static struct platform_device *plat_devs[] __initdata = {
> /* spear3xx specific devices */
> &ehci_device,
> &i2c_device,
> + &nand_device,
> &ohci0_device,
> &ohci1_device,
> &rtc_device,
> @@ -72,6 +76,10 @@ static void __init spear310_evb_init(void)
> pmx_driver.devs = pmx_devs;
> pmx_driver.devs_count = ARRAY_SIZE(pmx_devs);
>
> + /* set nand device's plat data */
> + fsmc_nand_set_plat_data(&nand_device, NULL, 0, NAND_SKIP_BBTSCAN,
> + FSMC_NAND_BW8);
> +
> /* call spear310 machine init function */
> spear310_init();
>
> diff --git a/arch/arm/mach-spear3xx/spear320.c b/arch/arm/mach-spear3xx/spear320.c
> index 75e7890..3def755 100644
> --- a/arch/arm/mach-spear3xx/spear320.c
> +++ b/arch/arm/mach-spear3xx/spear320.c
> @@ -12,6 +12,7 @@
> */
>
> #include <linux/ptrace.h>
> +#include <mtd/fsmc.h>
> #include <asm/irq.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> @@ -431,6 +432,31 @@ struct platform_device i2c1_device = {
> .resource = i2c1_resources,
> };
>
> +/* nand device registeration */
> +static struct fsmc_nand_platform_data nand_platform_data;
> +
> +static struct resource nand_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR320_NAND_BASE,
> + .end = SPEAR320_NAND_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR320_FSMC_BASE,
> + .end = SPEAR320_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device nand_device = {
> + .name = "nand",
> + .id = -1,
> + .resource = nand_resources,
> + .num_resources = ARRAY_SIZE(nand_resources),
> + .dev.platform_data = &nand_platform_data,
> +};
> +
> static struct resource plgpio_resources[] = {
> {
> .start = SPEAR320_SOC_CONFIG_BASE,
> diff --git a/arch/arm/mach-spear3xx/spear320_evb.c b/arch/arm/mach-spear3xx/spear320_evb.c
> index 7f7b5dd..3a066bb 100644
> --- a/arch/arm/mach-spear3xx/spear320_evb.c
> +++ b/arch/arm/mach-spear3xx/spear320_evb.c
> @@ -11,10 +11,13 @@
> * warranty of any kind, whether express or implied.
> */
>
> +#include <linux/mtd/nand.h>
> +#include <mtd/fsmc.h>
> #include <asm/mach/arch.h>
> #include <asm/mach-types.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> +#include <plat/fsmc.h>
> #include <plat/smi.h>
>
> /* padmux devices to enable */
> @@ -52,6 +55,7 @@ static struct platform_device *plat_devs[] __initdata = {
> /* spear3xx specific devices */
> &ehci_device,
> &i2c_device,
> + &nand_device,
> &ohci0_device,
> &ohci1_device,
> &rtc_device,
> @@ -72,6 +76,10 @@ static void __init spear320_evb_init(void)
> pmx_driver.devs = pmx_devs;
> pmx_driver.devs_count = ARRAY_SIZE(pmx_devs);
>
> + /* set nand device's plat data */
> + fsmc_nand_set_plat_data(&nand_device, NULL, 0, NAND_SKIP_BBTSCAN,
> + FSMC_NAND_BW8);
> +
> /* call spear320 machine init function */
> spear320_init();
>
> diff --git a/arch/arm/mach-spear6xx/include/mach/generic.h b/arch/arm/mach-spear6xx/include/mach/generic.h
> index f885898..ff90419 100644
> --- a/arch/arm/mach-spear6xx/include/mach/generic.h
> +++ b/arch/arm/mach-spear6xx/include/mach/generic.h
> @@ -36,6 +36,7 @@ extern struct amba_device wdt_device;
> extern struct platform_device ehci0_device;
> extern struct platform_device ehci1_device;
> extern struct platform_device i2c_device;
> +extern struct platform_device nand_device;
> extern struct platform_device ohci0_device;
> extern struct platform_device ohci1_device;
> extern struct platform_device rtc_device;
> diff --git a/arch/arm/mach-spear6xx/spear600_evb.c b/arch/arm/mach-spear6xx/spear600_evb.c
> index 0eb5f50..f3b1fb4 100644
> --- a/arch/arm/mach-spear6xx/spear600_evb.c
> +++ b/arch/arm/mach-spear6xx/spear600_evb.c
> @@ -11,10 +11,13 @@
> * warranty of any kind, whether express or implied.
> */
>
> +#include <linux/mtd/nand.h>
> +#include <mtd/fsmc.h>
> #include <asm/mach/arch.h>
> #include <asm/mach-types.h>
> #include <mach/generic.h>
> #include <mach/spear.h>
> +#include <plat/fsmc.h>
> #include <plat/smi.h>
>
> static struct amba_device *amba_devs[] __initdata = {
> @@ -33,6 +36,7 @@ static struct platform_device *plat_devs[] __initdata = {
> &i2c_device,
> &ohci0_device,
> &ohci1_device,
> + &nand_device,
> &rtc_device,
> &smi_device,
> };
> @@ -41,6 +45,10 @@ static void __init spear600_evb_init(void)
> {
> unsigned int i;
>
> + /* set nand device's plat data */
> + fsmc_nand_set_plat_data(&nand_device, NULL, 0, NAND_SKIP_BBTSCAN,
> + FSMC_NAND_BW8);
> +
> /* call spear600 machine init function */
> spear600_init();
>
> diff --git a/arch/arm/mach-spear6xx/spear6xx.c b/arch/arm/mach-spear6xx/spear6xx.c
> index 2eec8ac..cc4fd39 100644
> --- a/arch/arm/mach-spear6xx/spear6xx.c
> +++ b/arch/arm/mach-spear6xx/spear6xx.c
> @@ -15,6 +15,7 @@
> #include <linux/amba/pl061.h>
> #include <linux/ptrace.h>
> #include <linux/io.h>
> +#include <mtd/fsmc.h>
> #include <asm/hardware/vic.h>
> #include <asm/irq.h>
> #include <asm/mach/arch.h>
> @@ -152,6 +153,31 @@ struct platform_device i2c_device = {
> .resource = i2c_resources,
> };
>
> +/* nand device registeration */
> +static struct fsmc_nand_platform_data nand_platform_data;
> +
> +static struct resource nand_resources[] = {
> + {
> + .name = "nand_data",
> + .start = SPEAR6XX_ICM1_NAND_BASE,
> + .end = SPEAR6XX_ICM1_NAND_BASE + SZ_16 - 1,
> + .flags = IORESOURCE_MEM,
> + }, {
> + .name = "fsmc_regs",
> + .start = SPEAR6XX_ICM1_FSMC_BASE,
> + .end = SPEAR6XX_ICM1_FSMC_BASE + SZ_4K - 1,
> + .flags = IORESOURCE_MEM,
> + },
> +};
> +
> +struct platform_device nand_device = {
> + .name = "nand",
> + .id = -1,
> + .resource = nand_resources,
> + .num_resources = ARRAY_SIZE(nand_resources),
> + .dev.platform_data = &nand_platform_data,
> +};
> +
> /* usb host device registeration */
> static struct resource ehci0_resources[] = {
> [0] = {
> diff --git a/arch/arm/plat-spear/include/plat/fsmc.h b/arch/arm/plat-spear/include/plat/fsmc.h
> new file mode 100644
> index 0000000..bb161fb
> --- /dev/null
> +++ b/arch/arm/plat-spear/include/plat/fsmc.h
> @@ -0,0 +1,36 @@
> +/*
> + * arch/arm/plat-spear/include/plat/fsmc.h
> + *
> + * FSMC definitions for SPEAr platform
> + *
> + * Copyright (C) 2010 ST Microelectronics
> + * Vipin Kumar <vipin.kumar@st.com>
> + *
> + * This file is licensed under the terms of the GNU General Public
> + * License version 2. This program is licensed "as is" without any
> + * warranty of any kind, whether express or implied.
> + */
> +
> +#ifndef __PLAT_FSMC_H
> +#define __PLAT_FSMC_H
> +
> +#include <mtd/fsmc.h>
> +
> +/* This function is used to set platform data field of pdev->dev */
> +static inline void fsmc_nand_set_plat_data(struct platform_device *pdev,
> + struct mtd_partition *partitions, unsigned int nr_partitions,
> + unsigned int options, unsigned int width)
> +{
> + struct fsmc_nand_platform_data *plat_data;
> + plat_data = dev_get_platdata(&pdev->dev);
> +
> + if (partitions) {
> + plat_data->partitions = partitions;
> + plat_data->nr_partitions = nr_partitions;
> + }
> +
> + plat_data->options = options;
> + plat_data->width = width;
> +}
> +
> +#endif /* __PLAT_FSMC_H */
>
next prev parent reply other threads:[~2010-11-28 6:27 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <cover.1285933331.git.viresh.kumar@st.com>
2010-10-01 11:55 ` [PATCH V2 25/69] ST SPEAr: Add smi driver for serial NOR flash Viresh KUMAR
2010-10-19 5:55 ` viresh kumar
2010-10-29 11:49 ` viresh kumar
2010-12-17 10:58 ` viresh kumar
2010-12-17 17:00 ` Artem Bityutskiy
2010-10-01 11:55 ` [PATCH V2 26/69] ST SPEAr: Adding support for serial nor flash in all spear platforms Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 27/69] ST SPEAr: Adding Watchdog support Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 28/69] ST SPEAr: Adding machine support for nand Viresh KUMAR
2010-11-28 6:27 ` stanley.miao [this message]
2010-11-29 4:21 ` viresh kumar
2010-10-01 11:55 ` [PATCH V2 29/69] Newly erased page read workaround Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 30/69] ST SPEAr: Added PCIE host controller base driver support Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 31/69] ST SPEAr: Adding support for SSP PL022 Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 32/69] ST SPEAr: Adding support for SDHCI (SDIO) Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 33/69] ST SPEAr: Changing resource size of amba devices to SZ_4K Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 34/69] ST SPEAr: Replacing SIZE macro's with actual required size Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 35/69] SPEAr: defines base addresses as ulong Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 36/69] ST SPEAr: Adding miscellaneous devices Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 37/69] ST SPEAr 13xx : Adding support for SPEAr1310 Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 38/69] ST SPEAr: Adding support for DDR in clock framework Viresh KUMAR
2010-10-01 11:55 ` [PATCH V2 39/69] ST SPEAr : EMI (Extrenal Memory Interface) controller driver Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 40/69] ST SPEAr : FSMC (Flexible Static Memory Controller) NOR interface driver Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 41/69] SPEAr Clock Framework: Adding support for PLL frequency change Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 42/69] SPEAr Power Management: Added the support for Standby mode Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 43/69] GIC: Added dummy handlers for Power Management Suspend Resume Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 44/69] SPEAr CPU freq: Adding support for CPU Freq framework Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 45/69] ST SPEAr: PCIE gadget suppport Viresh KUMAR
2010-10-19 21:47 ` Andrew Morton
2010-10-21 14:18 ` Pratyush ANAND
2010-10-21 17:25 ` Andrew Morton
2010-10-01 11:56 ` [PATCH V2 46/69] ST SPEAr13xx: Adding machine support for pci gadget Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 47/69] ST SPEAr13xx: Adding CPU hotplug support added for SMP platforms Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 48/69] ST SPEAr: replace readl, writel with __raw_readl, __raw_writel in uncompress.h Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 49/69] ST SPEAr13xx: add L2 cache support Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 50/69] ST SPEAr13xx: Modified static mappings Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 51/69] SPEAr: Adding and Updating Clock definitions Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 52/69] SPEAr : Pad multiplexing handling modified Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 53/69] SPEAr13xx : Fixed part devices in SPEAr13xx addded to the generic implementation Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 54/69] SPEAr : Updating pad multiplexing support Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 55/69] ST SPEAr3xx: Passing pmx devices address from machine *.c files Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 56/69] ST SPEAr Clock Framework: Updating for single image solution Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 57/69] SPEAr3xx: Make local structures static Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 58/69] SPEAR3xx: Rename register/irq defines to remove naming conflicts Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 59/69] SPEAr3xx: Rework pmx_dev code to remove conflicts Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 60/69] SPEAr3xx: Rework KConfig to allow all boards to be compiled in Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 61/69] SPEAr3xx: Replace defconfigs with single unified defconfig Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 62/69] ST SPEAr: Appending spear3** with global structures Viresh KUMAR
2010-10-01 16:21 ` viresh kumar
2010-10-04 6:01 ` viresh kumar
2010-10-01 11:56 ` [PATCH V2 63/69] ST SPEAr3xx: Updating plgpio and emi source to make it compliant with single image strategy Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 64/69] SPEAr6xx: Rework Kconfig for single image solution Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 65/69] ST SPEAR6xx: renaming spear600_defconfig as spear6xx_defconfig Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 66/69] ST SPEAr13xx: Pass default padmux settings as parameter to spear13**_init routine Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 67/69] ST SPEAr: Adding devices & clocks Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 68/69] ST SPEAr: Adding information in Documentation/ and MAINTAINERS Viresh KUMAR
2010-10-01 11:56 ` [PATCH V2 69/69] ST SPEAr: Updating defconfigs Viresh KUMAR
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4CF1F650.8080505@windriver.com \
--to=stanley.miao@windriver.com \
--cc=armando.visconti@st.com \
--cc=bhupesh.sharma@st.com \
--cc=deepak.sikri@st.com \
--cc=dmitry.torokhov@gmail.com \
--cc=dwmw2@infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mtd@lists.infradead.org \
--cc=pratyush.anand@st.com \
--cc=rajeev-dlh.kumar@st.com \
--cc=shiraz.hashim@st.com \
--cc=vipin.kumar@st.com \
--cc=vipulkumar.samar@st.com \
--cc=viresh.kumar@st.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).