aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-davinci/Makefile2
-rw-r--r--arch/arm/mach-davinci/board-dm355-evm.c2
-rw-r--r--arch/arm/mach-davinci/board-dm355-leopard.c2
-rw-r--r--arch/arm/mach-davinci/board-dm644x-evm.c2
-rw-r--r--arch/arm/mach-davinci/board-dm646x-evm.c2
-rw-r--r--arch/arm/mach-davinci/board-sffsdr.c2
-rw-r--r--arch/arm/mach-davinci/common.c55
-rw-r--r--arch/arm/mach-davinci/dm355.c18
-rw-r--r--arch/arm/mach-davinci/dm644x.c18
-rw-r--r--arch/arm/mach-davinci/dm646x.c18
-rw-r--r--arch/arm/mach-davinci/include/mach/common.h12
-rw-r--r--arch/arm/mach-davinci/include/mach/dm355.h3
-rw-r--r--arch/arm/mach-davinci/io.c38
13 files changed, 127 insertions, 47 deletions
diff --git a/arch/arm/mach-davinci/Makefile b/arch/arm/mach-davinci/Makefile
index 2873149da7f0..74d25f69934e 100644
--- a/arch/arm/mach-davinci/Makefile
+++ b/arch/arm/mach-davinci/Makefile
@@ -5,7 +5,7 @@
5 5
6# Common objects 6# Common objects
7obj-y := time.o irq.o clock.o serial.o io.o id.o psc.o \ 7obj-y := time.o irq.o clock.o serial.o io.o id.o psc.o \
8 gpio.o devices.o dma.o usb.o 8 gpio.o devices.o dma.o usb.o common.o
9 9
10obj-$(CONFIG_DAVINCI_MUX) += mux.o 10obj-$(CONFIG_DAVINCI_MUX) += mux.o
11obj-$(CONFIG_CP_INTC) += cp_intc.o 11obj-$(CONFIG_CP_INTC) += cp_intc.o
diff --git a/arch/arm/mach-davinci/board-dm355-evm.c b/arch/arm/mach-davinci/board-dm355-evm.c
index 087441313dd7..5ac2f565d860 100644
--- a/arch/arm/mach-davinci/board-dm355-evm.c
+++ b/arch/arm/mach-davinci/board-dm355-evm.c
@@ -37,6 +37,7 @@
37#include <mach/serial.h> 37#include <mach/serial.h>
38#include <mach/nand.h> 38#include <mach/nand.h>
39#include <mach/mmc.h> 39#include <mach/mmc.h>
40#include <mach/common.h>
40 41
41#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000 42#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000
42#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 43#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
@@ -188,7 +189,6 @@ static struct davinci_uart_config uart_config __initdata = {
188 189
189static void __init dm355_evm_map_io(void) 190static void __init dm355_evm_map_io(void)
190{ 191{
191 davinci_map_common_io();
192 dm355_init(); 192 dm355_init();
193} 193}
194 194
diff --git a/arch/arm/mach-davinci/board-dm355-leopard.c b/arch/arm/mach-davinci/board-dm355-leopard.c
index d4562f5ff93b..28c9008df4f4 100644
--- a/arch/arm/mach-davinci/board-dm355-leopard.c
+++ b/arch/arm/mach-davinci/board-dm355-leopard.c
@@ -36,6 +36,7 @@
36#include <mach/serial.h> 36#include <mach/serial.h>
37#include <mach/nand.h> 37#include <mach/nand.h>
38#include <mach/mmc.h> 38#include <mach/mmc.h>
39#include <mach/common.h>
39 40
40#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000 41#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000
41#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000 42#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
@@ -187,7 +188,6 @@ static struct davinci_uart_config uart_config __initdata = {
187 188
188static void __init dm355_leopard_map_io(void) 189static void __init dm355_leopard_map_io(void)
189{ 190{
190 davinci_map_common_io();
191 dm355_init(); 191 dm355_init();
192} 192}
193 193
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c b/arch/arm/mach-davinci/board-dm644x-evm.c
index 02e7cdaf8daa..cfe89c409735 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -45,6 +45,7 @@
45#include <mach/psc.h> 45#include <mach/psc.h>
46#include <mach/nand.h> 46#include <mach/nand.h>
47#include <mach/mmc.h> 47#include <mach/mmc.h>
48#include <mach/common.h>
48 49
49#define DM644X_EVM_PHY_MASK (0x2) 50#define DM644X_EVM_PHY_MASK (0x2)
50#define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ 51#define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
@@ -609,7 +610,6 @@ static struct davinci_uart_config uart_config __initdata = {
609static void __init 610static void __init
610davinci_evm_map_io(void) 611davinci_evm_map_io(void)
611{ 612{
612 davinci_map_common_io();
613 dm644x_init(); 613 dm644x_init();
614} 614}
615 615
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c
index aedde3cdb82f..becae51d6dd1 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -47,6 +47,7 @@
47#include <mach/i2c.h> 47#include <mach/i2c.h>
48#include <mach/mmc.h> 48#include <mach/mmc.h>
49#include <mach/emac.h> 49#include <mach/emac.h>
50#include <mach/common.h>
50 51
51#define DM646X_EVM_PHY_MASK (0x2) 52#define DM646X_EVM_PHY_MASK (0x2)
52#define DM646X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ 53#define DM646X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
@@ -265,7 +266,6 @@ static void __init evm_init_i2c(void)
265 266
266static void __init davinci_map_io(void) 267static void __init davinci_map_io(void)
267{ 268{
268 davinci_map_common_io();
269 dm646x_init(); 269 dm646x_init();
270} 270}
271 271
diff --git a/arch/arm/mach-davinci/board-sffsdr.c b/arch/arm/mach-davinci/board-sffsdr.c
index 913dad93540b..938b4467809e 100644
--- a/arch/arm/mach-davinci/board-sffsdr.c
+++ b/arch/arm/mach-davinci/board-sffsdr.c
@@ -53,6 +53,7 @@
53#include <mach/serial.h> 53#include <mach/serial.h>
54#include <mach/psc.h> 54#include <mach/psc.h>
55#include <mach/mux.h> 55#include <mach/mux.h>
56#include <mach/common.h>
56 57
57#define SFFSDR_PHY_MASK (0x2) 58#define SFFSDR_PHY_MASK (0x2)
58#define SFFSDR_MDIO_FREQUENCY (2200000) /* PHY bus frequency */ 59#define SFFSDR_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
@@ -152,7 +153,6 @@ static struct davinci_uart_config uart_config __initdata = {
152 153
153static void __init davinci_sffsdr_map_io(void) 154static void __init davinci_sffsdr_map_io(void)
154{ 155{
155 davinci_map_common_io();
156 dm644x_init(); 156 dm644x_init();
157} 157}
158 158
diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c
new file mode 100644
index 000000000000..9a5486f5519c
--- /dev/null
+++ b/arch/arm/mach-davinci/common.c
@@ -0,0 +1,55 @@
1/*
2 * Code commons to all DaVinci SoCs.
3 *
4 * Author: Mark A. Greer <mgreer@mvista.com>
5 *
6 * 2009 (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/module.h>
12#include <linux/io.h>
13
14#include <asm/tlb.h>
15#include <asm/mach/map.h>
16
17#include <mach/common.h>
18
19struct davinci_soc_info davinci_soc_info;
20EXPORT_SYMBOL(davinci_soc_info);
21
22void __init davinci_common_init(struct davinci_soc_info *soc_info)
23{
24 int ret;
25
26 if (!soc_info) {
27 ret = -EINVAL;
28 goto err;
29 }
30
31 memcpy(&davinci_soc_info, soc_info, sizeof(struct davinci_soc_info));
32
33 if (davinci_soc_info.io_desc && (davinci_soc_info.io_desc_num > 0))
34 iotable_init(davinci_soc_info.io_desc,
35 davinci_soc_info.io_desc_num);
36
37 /*
38 * Normally devicemaps_init() would flush caches and tlb after
39 * mdesc->map_io(), but we must also do it here because of the CPU
40 * revision check below.
41 */
42 local_flush_tlb_all();
43 flush_cache_all();
44
45 /*
46 * We want to check CPU revision early for cpu_is_xxxx() macros.
47 * IO space mapping must be initialized before we can do that.
48 */
49 davinci_check_revision();
50
51 return;
52
53err:
54 pr_err("davinci_common_init: SoC Initialization failed\n");
55}
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index c02115f1eb9b..6d1abfdcfb72 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -16,6 +16,8 @@
16 16
17#include <linux/spi/spi.h> 17#include <linux/spi/spi.h>
18 18
19#include <asm/mach/map.h>
20
19#include <mach/dm355.h> 21#include <mach/dm355.h>
20#include <mach/clock.h> 22#include <mach/clock.h>
21#include <mach/cputype.h> 23#include <mach/cputype.h>
@@ -23,6 +25,7 @@
23#include <mach/psc.h> 25#include <mach/psc.h>
24#include <mach/mux.h> 26#include <mach/mux.h>
25#include <mach/irqs.h> 27#include <mach/irqs.h>
28#include <mach/common.h>
26 29
27#include "clock.h" 30#include "clock.h"
28#include "mux.h" 31#include "mux.h"
@@ -522,8 +525,23 @@ static struct platform_device dm355_edma_device = {
522 525
523/*----------------------------------------------------------------------*/ 526/*----------------------------------------------------------------------*/
524 527
528static struct map_desc dm355_io_desc[] = {
529 {
530 .virtual = IO_VIRT,
531 .pfn = __phys_to_pfn(IO_PHYS),
532 .length = IO_SIZE,
533 .type = MT_DEVICE
534 },
535};
536
537static struct davinci_soc_info davinci_soc_info_dm355 = {
538 .io_desc = dm355_io_desc,
539 .io_desc_num = ARRAY_SIZE(dm355_io_desc),
540};
541
525void __init dm355_init(void) 542void __init dm355_init(void)
526{ 543{
544 davinci_common_init(&davinci_soc_info_dm355);
527 davinci_clk_init(dm355_clks); 545 davinci_clk_init(dm355_clks);
528 davinci_mux_register(dm355_pins, ARRAY_SIZE(dm355_pins));; 546 davinci_mux_register(dm355_pins, ARRAY_SIZE(dm355_pins));;
529} 547}
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
index 0419d571bdca..79f113698b0b 100644
--- a/arch/arm/mach-davinci/dm644x.c
+++ b/arch/arm/mach-davinci/dm644x.c
@@ -13,6 +13,8 @@
13#include <linux/clk.h> 13#include <linux/clk.h>
14#include <linux/platform_device.h> 14#include <linux/platform_device.h>
15 15
16#include <asm/mach/map.h>
17
16#include <mach/dm644x.h> 18#include <mach/dm644x.h>
17#include <mach/clock.h> 19#include <mach/clock.h>
18#include <mach/cputype.h> 20#include <mach/cputype.h>
@@ -20,6 +22,7 @@
20#include <mach/irqs.h> 22#include <mach/irqs.h>
21#include <mach/psc.h> 23#include <mach/psc.h>
22#include <mach/mux.h> 24#include <mach/mux.h>
25#include <mach/common.h>
23 26
24#include "clock.h" 27#include "clock.h"
25#include "mux.h" 28#include "mux.h"
@@ -463,8 +466,23 @@ void dm644x_init_emac(struct emac_platform_data *unused) {}
463 466
464#endif 467#endif
465 468
469static struct map_desc dm644x_io_desc[] = {
470 {
471 .virtual = IO_VIRT,
472 .pfn = __phys_to_pfn(IO_PHYS),
473 .length = IO_SIZE,
474 .type = MT_DEVICE
475 },
476};
477
478static struct davinci_soc_info davinci_soc_info_dm644x = {
479 .io_desc = dm644x_io_desc,
480 .io_desc_num = ARRAY_SIZE(dm644x_io_desc),
481};
482
466void __init dm644x_init(void) 483void __init dm644x_init(void)
467{ 484{
485 davinci_common_init(&davinci_soc_info_dm644x);
468 davinci_clk_init(dm644x_clks); 486 davinci_clk_init(dm644x_clks);
469 davinci_mux_register(dm644x_pins, ARRAY_SIZE(dm644x_pins)); 487 davinci_mux_register(dm644x_pins, ARRAY_SIZE(dm644x_pins));
470} 488}
diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index 975ed062ce24..8547ec02c9e1 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -13,6 +13,8 @@
13#include <linux/clk.h> 13#include <linux/clk.h>
14#include <linux/platform_device.h> 14#include <linux/platform_device.h>
15 15
16#include <asm/mach/map.h>
17
16#include <mach/dm646x.h> 18#include <mach/dm646x.h>
17#include <mach/clock.h> 19#include <mach/clock.h>
18#include <mach/cputype.h> 20#include <mach/cputype.h>
@@ -20,6 +22,7 @@
20#include <mach/irqs.h> 22#include <mach/irqs.h>
21#include <mach/psc.h> 23#include <mach/psc.h>
22#include <mach/mux.h> 24#include <mach/mux.h>
25#include <mach/common.h>
23 26
24#include "clock.h" 27#include "clock.h"
25#include "mux.h" 28#include "mux.h"
@@ -442,8 +445,23 @@ void dm646x_init_emac(struct emac_platform_data *unused) {}
442 445
443#endif 446#endif
444 447
448static struct map_desc dm646x_io_desc[] = {
449 {
450 .virtual = IO_VIRT,
451 .pfn = __phys_to_pfn(IO_PHYS),
452 .length = IO_SIZE,
453 .type = MT_DEVICE
454 },
455};
456
457static struct davinci_soc_info davinci_soc_info_dm646x = {
458 .io_desc = dm646x_io_desc,
459 .io_desc_num = ARRAY_SIZE(dm646x_io_desc),
460};
461
445void __init dm646x_init(void) 462void __init dm646x_init(void)
446{ 463{
464 davinci_common_init(&davinci_soc_info_dm646x);
447 davinci_clk_init(dm646x_clks); 465 davinci_clk_init(dm646x_clks);
448 davinci_mux_register(dm646x_pins, ARRAY_SIZE(dm646x_pins)); 466 davinci_mux_register(dm646x_pins, ARRAY_SIZE(dm646x_pins));
449} 467}
diff --git a/arch/arm/mach-davinci/include/mach/common.h b/arch/arm/mach-davinci/include/mach/common.h
index 191770976250..770a1baa97dc 100644
--- a/arch/arm/mach-davinci/include/mach/common.h
+++ b/arch/arm/mach-davinci/include/mach/common.h
@@ -17,7 +17,6 @@ struct sys_timer;
17extern struct sys_timer davinci_timer; 17extern struct sys_timer davinci_timer;
18 18
19extern void davinci_irq_init(void); 19extern void davinci_irq_init(void);
20extern void davinci_map_common_io(void);
21 20
22/* parameters describe VBUS sourcing for host mode */ 21/* parameters describe VBUS sourcing for host mode */
23extern void setup_usb(unsigned mA, unsigned potpgt_msec); 22extern void setup_usb(unsigned mA, unsigned potpgt_msec);
@@ -25,4 +24,15 @@ extern void setup_usb(unsigned mA, unsigned potpgt_msec);
25/* parameters describe VBUS sourcing for host mode */ 24/* parameters describe VBUS sourcing for host mode */
26extern void setup_usb(unsigned mA, unsigned potpgt_msec); 25extern void setup_usb(unsigned mA, unsigned potpgt_msec);
27 26
27/* SoC specific init support */
28struct davinci_soc_info {
29 struct map_desc *io_desc;
30 unsigned long io_desc_num;
31};
32
33extern struct davinci_soc_info davinci_soc_info;
34
35extern void davinci_common_init(struct davinci_soc_info *soc_info);
36extern void davinci_check_revision(void);
37
28#endif /* __ARCH_ARM_MACH_DAVINCI_COMMON_H */ 38#endif /* __ARCH_ARM_MACH_DAVINCI_COMMON_H */
diff --git a/arch/arm/mach-davinci/include/mach/dm355.h b/arch/arm/mach-davinci/include/mach/dm355.h
index f7100b658992..54903b72438e 100644
--- a/arch/arm/mach-davinci/include/mach/dm355.h
+++ b/arch/arm/mach-davinci/include/mach/dm355.h
@@ -13,10 +13,9 @@
13 13
14#include <mach/hardware.h> 14#include <mach/hardware.h>
15 15
16void __init dm355_init(void);
17
18struct spi_board_info; 16struct spi_board_info;
19 17
18void __init dm355_init(void);
20void dm355_init_spi0(unsigned chipselect_mask, 19void dm355_init_spi0(unsigned chipselect_mask,
21 struct spi_board_info *info, unsigned len); 20 struct spi_board_info *info, unsigned len);
22 21
diff --git a/arch/arm/mach-davinci/io.c b/arch/arm/mach-davinci/io.c
index a548abb513e2..49912b48b1b0 100644
--- a/arch/arm/mach-davinci/io.c
+++ b/arch/arm/mach-davinci/io.c
@@ -9,47 +9,9 @@
9 */ 9 */
10 10
11#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/kernel.h>
13#include <linux/init.h>
14#include <linux/io.h> 12#include <linux/io.h>
15 13
16#include <asm/tlb.h> 14#include <asm/tlb.h>
17#include <asm/memory.h>
18
19#include <asm/mach/map.h>
20#include <mach/clock.h>
21
22extern void davinci_check_revision(void);
23
24/*
25 * The machine specific code may provide the extra mapping besides the
26 * default mapping provided here.
27 */
28static struct map_desc davinci_io_desc[] __initdata = {
29 {
30 .virtual = IO_VIRT,
31 .pfn = __phys_to_pfn(IO_PHYS),
32 .length = IO_SIZE,
33 .type = MT_DEVICE
34 },
35};
36
37void __init davinci_map_common_io(void)
38{
39 iotable_init(davinci_io_desc, ARRAY_SIZE(davinci_io_desc));
40
41 /* Normally devicemaps_init() would flush caches and tlb after
42 * mdesc->map_io(), but we must also do it here because of the CPU
43 * revision check below.
44 */
45 local_flush_tlb_all();
46 flush_cache_all();
47
48 /* We want to check CPU revision early for cpu_is_xxxx() macros.
49 * IO space mapping must be initialized before we can do that.
50 */
51 davinci_check_revision();
52}
53 15
54#define BETWEEN(p, st, sz) ((p) >= (st) && (p) < ((st) + (sz))) 16#define BETWEEN(p, st, sz) ((p) >= (st) && (p) < ((st) + (sz)))
55#define XLATE(p, pst, vst) ((void __iomem *)((p) - (pst) + (vst))) 17#define XLATE(p, pst, vst) ((void __iomem *)((p) - (pst) + (vst)))