diff options
-rw-r--r-- | arch/arm/mach-u300/clock.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-u300/core.c | 47 | ||||
-rw-r--r-- | arch/arm/mach-u300/include/mach/u300-regs.h | 2 |
3 files changed, 45 insertions, 10 deletions
diff --git a/arch/arm/mach-u300/clock.c b/arch/arm/mach-u300/clock.c index 60acf9e708ae..7458fc6df5c6 100644 --- a/arch/arm/mach-u300/clock.c +++ b/arch/arm/mach-u300/clock.c | |||
@@ -66,7 +66,7 @@ static DEFINE_SPINLOCK(syscon_resetreg_lock); | |||
66 | * AMBA bus | 66 | * AMBA bus |
67 | * | | 67 | * | |
68 | * +- CPU | 68 | * +- CPU |
69 | * +- NANDIF NAND Flash interface | 69 | * +- FSMC NANDIF NAND Flash interface |
70 | * +- SEMI Shared Memory interface | 70 | * +- SEMI Shared Memory interface |
71 | * +- ISP Image Signal Processor (U335 only) | 71 | * +- ISP Image Signal Processor (U335 only) |
72 | * +- CDS (U335 only) | 72 | * +- CDS (U335 only) |
@@ -726,7 +726,7 @@ static struct clk cpu_clk = { | |||
726 | }; | 726 | }; |
727 | 727 | ||
728 | static struct clk nandif_clk = { | 728 | static struct clk nandif_clk = { |
729 | .name = "NANDIF", | 729 | .name = "FSMC", |
730 | .parent = &amba_clk, | 730 | .parent = &amba_clk, |
731 | .hw_ctrld = false, | 731 | .hw_ctrld = false, |
732 | .reset = true, | 732 | .reset = true, |
@@ -1259,7 +1259,7 @@ static struct clk_lookup lookups[] = { | |||
1259 | /* Connected directly to the AMBA bus */ | 1259 | /* Connected directly to the AMBA bus */ |
1260 | DEF_LOOKUP("amba", &amba_clk), | 1260 | DEF_LOOKUP("amba", &amba_clk), |
1261 | DEF_LOOKUP("cpu", &cpu_clk), | 1261 | DEF_LOOKUP("cpu", &cpu_clk), |
1262 | DEF_LOOKUP("fsmc", &nandif_clk), | 1262 | DEF_LOOKUP("fsmc-nand", &nandif_clk), |
1263 | DEF_LOOKUP("semi", &semi_clk), | 1263 | DEF_LOOKUP("semi", &semi_clk), |
1264 | #ifdef CONFIG_MACH_U300_BS335 | 1264 | #ifdef CONFIG_MACH_U300_BS335 |
1265 | DEF_LOOKUP("isp", &isp_clk), | 1265 | DEF_LOOKUP("isp", &isp_clk), |
diff --git a/arch/arm/mach-u300/core.c b/arch/arm/mach-u300/core.c index ea41c236be0f..aa53ee22438f 100644 --- a/arch/arm/mach-u300/core.c +++ b/arch/arm/mach-u300/core.c | |||
@@ -21,7 +21,8 @@ | |||
21 | #include <linux/gpio.h> | 21 | #include <linux/gpio.h> |
22 | #include <linux/clk.h> | 22 | #include <linux/clk.h> |
23 | #include <linux/err.h> | 23 | #include <linux/err.h> |
24 | #include <mach/coh901318.h> | 24 | #include <linux/mtd/nand.h> |
25 | #include <linux/mtd/fsmc.h> | ||
25 | 26 | ||
26 | #include <asm/types.h> | 27 | #include <asm/types.h> |
27 | #include <asm/setup.h> | 28 | #include <asm/setup.h> |
@@ -30,6 +31,7 @@ | |||
30 | #include <asm/mach/map.h> | 31 | #include <asm/mach/map.h> |
31 | #include <asm/mach/irq.h> | 32 | #include <asm/mach/irq.h> |
32 | 33 | ||
34 | #include <mach/coh901318.h> | ||
33 | #include <mach/hardware.h> | 35 | #include <mach/hardware.h> |
34 | #include <mach/syscon.h> | 36 | #include <mach/syscon.h> |
35 | #include <mach/dma_channels.h> | 37 | #include <mach/dma_channels.h> |
@@ -285,6 +287,13 @@ static struct resource rtc_resources[] = { | |||
285 | */ | 287 | */ |
286 | static struct resource fsmc_resources[] = { | 288 | static struct resource fsmc_resources[] = { |
287 | { | 289 | { |
290 | .name = "nand_data", | ||
291 | .start = U300_NAND_CS0_PHYS_BASE, | ||
292 | .end = U300_NAND_CS0_PHYS_BASE + SZ_16K - 1, | ||
293 | .flags = IORESOURCE_MEM, | ||
294 | }, | ||
295 | { | ||
296 | .name = "fsmc_regs", | ||
288 | .start = U300_NAND_IF_PHYS_BASE, | 297 | .start = U300_NAND_IF_PHYS_BASE, |
289 | .end = U300_NAND_IF_PHYS_BASE + SZ_4K - 1, | 298 | .end = U300_NAND_IF_PHYS_BASE + SZ_4K - 1, |
290 | .flags = IORESOURCE_MEM, | 299 | .flags = IORESOURCE_MEM, |
@@ -1429,11 +1438,39 @@ static struct platform_device rtc_device = { | |||
1429 | .resource = rtc_resources, | 1438 | .resource = rtc_resources, |
1430 | }; | 1439 | }; |
1431 | 1440 | ||
1432 | static struct platform_device fsmc_device = { | 1441 | static struct mtd_partition u300_partitions[] = { |
1433 | .name = "nandif", | 1442 | { |
1443 | .name = "bootrecords", | ||
1444 | .offset = 0, | ||
1445 | .size = SZ_128K, | ||
1446 | }, | ||
1447 | { | ||
1448 | .name = "free", | ||
1449 | .offset = SZ_128K, | ||
1450 | .size = 8064 * SZ_1K, | ||
1451 | }, | ||
1452 | { | ||
1453 | .name = "platform", | ||
1454 | .offset = 8192 * SZ_1K, | ||
1455 | .size = 253952 * SZ_1K, | ||
1456 | }, | ||
1457 | }; | ||
1458 | |||
1459 | static struct fsmc_nand_platform_data nand_platform_data = { | ||
1460 | .partitions = u300_partitions, | ||
1461 | .nr_partitions = ARRAY_SIZE(u300_partitions), | ||
1462 | .options = NAND_SKIP_BBTSCAN, | ||
1463 | .width = FSMC_NAND_BW8, | ||
1464 | }; | ||
1465 | |||
1466 | static struct platform_device nand_device = { | ||
1467 | .name = "fsmc-nand", | ||
1434 | .id = -1, | 1468 | .id = -1, |
1435 | .num_resources = ARRAY_SIZE(fsmc_resources), | ||
1436 | .resource = fsmc_resources, | 1469 | .resource = fsmc_resources, |
1470 | .num_resources = ARRAY_SIZE(fsmc_resources), | ||
1471 | .dev = { | ||
1472 | .platform_data = &nand_platform_data, | ||
1473 | }, | ||
1437 | }; | 1474 | }; |
1438 | 1475 | ||
1439 | static struct platform_device ave_device = { | 1476 | static struct platform_device ave_device = { |
@@ -1465,7 +1502,7 @@ static struct platform_device *platform_devs[] __initdata = { | |||
1465 | &keypad_device, | 1502 | &keypad_device, |
1466 | &rtc_device, | 1503 | &rtc_device, |
1467 | &gpio_device, | 1504 | &gpio_device, |
1468 | &fsmc_device, | 1505 | &nand_device, |
1469 | &wdog_device, | 1506 | &wdog_device, |
1470 | &ave_device | 1507 | &ave_device |
1471 | }; | 1508 | }; |
diff --git a/arch/arm/mach-u300/include/mach/u300-regs.h b/arch/arm/mach-u300/include/mach/u300-regs.h index 56721a0cd2af..8b85df4c8d8f 100644 --- a/arch/arm/mach-u300/include/mach/u300-regs.h +++ b/arch/arm/mach-u300/include/mach/u300-regs.h | |||
@@ -20,11 +20,9 @@ | |||
20 | 20 | ||
21 | /* NAND Flash CS0 */ | 21 | /* NAND Flash CS0 */ |
22 | #define U300_NAND_CS0_PHYS_BASE 0x80000000 | 22 | #define U300_NAND_CS0_PHYS_BASE 0x80000000 |
23 | #define U300_NAND_CS0_VIRT_BASE 0xff040000 | ||
24 | 23 | ||
25 | /* NFIF */ | 24 | /* NFIF */ |
26 | #define U300_NAND_IF_PHYS_BASE 0x9f800000 | 25 | #define U300_NAND_IF_PHYS_BASE 0x9f800000 |
27 | #define U300_NAND_IF_VIRT_BASE 0xff030000 | ||
28 | 26 | ||
29 | /* AHB Peripherals */ | 27 | /* AHB Peripherals */ |
30 | #define U300_AHB_PER_PHYS_BASE 0xa0000000 | 28 | #define U300_AHB_PER_PHYS_BASE 0xa0000000 |