Commit 93ac5a55 authored by Linus Walleij's avatar Linus Walleij Committed by David Woodhouse

ARM: platform data to use the FSMC NAND with the U300

Just as it says, if this is merged along with the other patch, the
driver supports the U300 NAND flash interface.
Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 6c009ab8
...@@ -66,7 +66,7 @@ static DEFINE_SPINLOCK(syscon_resetreg_lock); ...@@ -66,7 +66,7 @@ static DEFINE_SPINLOCK(syscon_resetreg_lock);
* AMBA bus * AMBA bus
* | * |
* +- CPU * +- CPU
* +- NANDIF NAND Flash interface * +- FSMC NANDIF NAND Flash interface
* +- SEMI Shared Memory interface * +- SEMI Shared Memory interface
* +- ISP Image Signal Processor (U335 only) * +- ISP Image Signal Processor (U335 only)
* +- CDS (U335 only) * +- CDS (U335 only)
...@@ -726,7 +726,7 @@ static struct clk cpu_clk = { ...@@ -726,7 +726,7 @@ static struct clk cpu_clk = {
}; };
static struct clk nandif_clk = { static struct clk nandif_clk = {
.name = "NANDIF", .name = "FSMC",
.parent = &amba_clk, .parent = &amba_clk,
.hw_ctrld = false, .hw_ctrld = false,
.reset = true, .reset = true,
...@@ -1259,7 +1259,7 @@ static struct clk_lookup lookups[] = { ...@@ -1259,7 +1259,7 @@ static struct clk_lookup lookups[] = {
/* Connected directly to the AMBA bus */ /* Connected directly to the AMBA bus */
DEF_LOOKUP("amba", &amba_clk), DEF_LOOKUP("amba", &amba_clk),
DEF_LOOKUP("cpu", &cpu_clk), DEF_LOOKUP("cpu", &cpu_clk),
DEF_LOOKUP("fsmc", &nandif_clk), DEF_LOOKUP("fsmc-nand", &nandif_clk),
DEF_LOOKUP("semi", &semi_clk), DEF_LOOKUP("semi", &semi_clk),
#ifdef CONFIG_MACH_U300_BS335 #ifdef CONFIG_MACH_U300_BS335
DEF_LOOKUP("isp", &isp_clk), DEF_LOOKUP("isp", &isp_clk),
......
...@@ -21,7 +21,8 @@ ...@@ -21,7 +21,8 @@
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/err.h> #include <linux/err.h>
#include <mach/coh901318.h> #include <linux/mtd/nand.h>
#include <linux/mtd/fsmc.h>
#include <asm/types.h> #include <asm/types.h>
#include <asm/setup.h> #include <asm/setup.h>
...@@ -30,6 +31,7 @@ ...@@ -30,6 +31,7 @@
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/mach/irq.h> #include <asm/mach/irq.h>
#include <mach/coh901318.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <mach/syscon.h> #include <mach/syscon.h>
#include <mach/dma_channels.h> #include <mach/dma_channels.h>
...@@ -285,6 +287,13 @@ static struct resource rtc_resources[] = { ...@@ -285,6 +287,13 @@ static struct resource rtc_resources[] = {
*/ */
static struct resource fsmc_resources[] = { static struct resource fsmc_resources[] = {
{ {
.name = "nand_data",
.start = U300_NAND_CS0_PHYS_BASE,
.end = U300_NAND_CS0_PHYS_BASE + SZ_16K - 1,
.flags = IORESOURCE_MEM,
},
{
.name = "fsmc_regs",
.start = U300_NAND_IF_PHYS_BASE, .start = U300_NAND_IF_PHYS_BASE,
.end = U300_NAND_IF_PHYS_BASE + SZ_4K - 1, .end = U300_NAND_IF_PHYS_BASE + SZ_4K - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
...@@ -1429,11 +1438,39 @@ static struct platform_device rtc_device = { ...@@ -1429,11 +1438,39 @@ static struct platform_device rtc_device = {
.resource = rtc_resources, .resource = rtc_resources,
}; };
static struct platform_device fsmc_device = { static struct mtd_partition u300_partitions[] = {
.name = "nandif", {
.name = "bootrecords",
.offset = 0,
.size = SZ_128K,
},
{
.name = "free",
.offset = SZ_128K,
.size = 8064 * SZ_1K,
},
{
.name = "platform",
.offset = 8192 * SZ_1K,
.size = 253952 * SZ_1K,
},
};
static struct fsmc_nand_platform_data nand_platform_data = {
.partitions = u300_partitions,
.nr_partitions = ARRAY_SIZE(u300_partitions),
.options = NAND_SKIP_BBTSCAN,
.width = FSMC_NAND_BW8,
};
static struct platform_device nand_device = {
.name = "fsmc-nand",
.id = -1, .id = -1,
.num_resources = ARRAY_SIZE(fsmc_resources),
.resource = fsmc_resources, .resource = fsmc_resources,
.num_resources = ARRAY_SIZE(fsmc_resources),
.dev = {
.platform_data = &nand_platform_data,
},
}; };
static struct platform_device ave_device = { static struct platform_device ave_device = {
...@@ -1465,7 +1502,7 @@ static struct platform_device *platform_devs[] __initdata = { ...@@ -1465,7 +1502,7 @@ static struct platform_device *platform_devs[] __initdata = {
&keypad_device, &keypad_device,
&rtc_device, &rtc_device,
&gpio_device, &gpio_device,
&fsmc_device, &nand_device,
&wdog_device, &wdog_device,
&ave_device &ave_device
}; };
......
...@@ -20,11 +20,9 @@ ...@@ -20,11 +20,9 @@
/* NAND Flash CS0 */ /* NAND Flash CS0 */
#define U300_NAND_CS0_PHYS_BASE 0x80000000 #define U300_NAND_CS0_PHYS_BASE 0x80000000
#define U300_NAND_CS0_VIRT_BASE 0xff040000
/* NFIF */ /* NFIF */
#define U300_NAND_IF_PHYS_BASE 0x9f800000 #define U300_NAND_IF_PHYS_BASE 0x9f800000
#define U300_NAND_IF_VIRT_BASE 0xff030000
/* AHB Peripherals */ /* AHB Peripherals */
#define U300_AHB_PER_PHYS_BASE 0xa0000000 #define U300_AHB_PER_PHYS_BASE 0xa0000000
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment