Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
[pandora-kernel.git] / arch / arm / mach-davinci / board-evm.c
1 /*
2  * TI DaVinci EVM board support
3  *
4  * Author: Kevin Hilman, MontaVista Software, Inc. <source@mvista.com>
5  *
6  * 2007 (c) MontaVista Software, Inc. This file is licensed under
7  * the terms of the GNU General Public License version 2. This program
8  * is licensed "as is" without any warranty of any kind, whether express
9  * or implied.
10  */
11 #include <linux/kernel.h>
12 #include <linux/module.h>
13 #include <linux/init.h>
14 #include <linux/dma-mapping.h>
15 #include <linux/platform_device.h>
16 #include <linux/mtd/mtd.h>
17 #include <linux/mtd/partitions.h>
18 #include <linux/mtd/physmap.h>
19
20 #include <asm/setup.h>
21 #include <asm/io.h>
22 #include <asm/mach-types.h>
23 #include <asm/hardware.h>
24
25 #include <asm/mach/arch.h>
26 #include <asm/mach/map.h>
27 #include <asm/mach/flash.h>
28
29 #include <asm/arch/common.h>
30
31 /* other misc. init functions */
32 void __init davinci_psc_init(void);
33 void __init davinci_irq_init(void);
34 void __init davinci_map_common_io(void);
35
36 /* NOR Flash base address set to CS0 by default */
37 #define NOR_FLASH_PHYS 0x02000000
38
39 static struct mtd_partition davinci_evm_partitions[] = {
40         /* bootloader (U-Boot, etc) in first 4 sectors */
41         {
42                 .name           = "bootloader",
43                 .offset         = 0,
44                 .size           = 4 * SZ_64K,
45                 .mask_flags     = MTD_WRITEABLE, /* force read-only */
46         },
47         /* bootloader params in the next 1 sectors */
48         {
49                 .name           = "params",
50                 .offset         = MTDPART_OFS_APPEND,
51                 .size           = SZ_64K,
52                 .mask_flags     = 0,
53         },
54         /* kernel */
55         {
56                 .name           = "kernel",
57                 .offset         = MTDPART_OFS_APPEND,
58                 .size           = SZ_2M,
59                 .mask_flags     = 0
60         },
61         /* file system */
62         {
63                 .name           = "filesystem",
64                 .offset         = MTDPART_OFS_APPEND,
65                 .size           = MTDPART_SIZ_FULL,
66                 .mask_flags     = 0
67         }
68 };
69
70 static struct physmap_flash_data davinci_evm_flash_data = {
71         .width          = 2,
72         .parts          = davinci_evm_partitions,
73         .nr_parts       = ARRAY_SIZE(davinci_evm_partitions),
74 };
75
76 /* NOTE: CFI probe will correctly detect flash part as 32M, but EMIF
77  * limits addresses to 16M, so using addresses past 16M will wrap */
78 static struct resource davinci_evm_flash_resource = {
79         .start          = NOR_FLASH_PHYS,
80         .end            = NOR_FLASH_PHYS + SZ_16M - 1,
81         .flags          = IORESOURCE_MEM,
82 };
83
84 static struct platform_device davinci_evm_flash_device = {
85         .name           = "physmap-flash",
86         .id             = 0,
87         .dev            = {
88                 .platform_data  = &davinci_evm_flash_data,
89         },
90         .num_resources  = 1,
91         .resource       = &davinci_evm_flash_resource,
92 };
93
94 static struct platform_device *davinci_evm_devices[] __initdata = {
95         &davinci_evm_flash_device,
96 };
97
98 static void __init
99 davinci_evm_map_io(void)
100 {
101         davinci_map_common_io();
102 }
103
104 static __init void davinci_evm_init(void)
105 {
106         davinci_psc_init();
107
108 #if defined(CONFIG_BLK_DEV_DAVINCI) || defined(CONFIG_BLK_DEV_DAVINCI_MODULE)
109         printk(KERN_WARNING "WARNING: both IDE and NOR flash are enabled, "
110                "but share pins.\n\t Disable IDE for NOR support.\n");
111 #endif
112
113         platform_add_devices(davinci_evm_devices,
114                              ARRAY_SIZE(davinci_evm_devices));
115 }
116
117 static __init void davinci_evm_irq_init(void)
118 {
119         davinci_irq_init();
120 }
121
122 MACHINE_START(DAVINCI_EVM, "DaVinci EVM")
123         /* Maintainer: MontaVista Software <source@mvista.com> */
124         .phys_io      = IO_PHYS,
125         .io_pg_offst  = (io_p2v(IO_PHYS) >> 18) & 0xfffc,
126         .boot_params  = (DAVINCI_DDR_BASE + 0x100),
127         .map_io       = davinci_evm_map_io,
128         .init_irq     = davinci_evm_irq_init,
129         .timer        = &davinci_timer,
130         .init_machine = davinci_evm_init,
131 MACHINE_END