From: Mark A. Greer <[email protected]>

Move the SoC-specific map_desc structure from the common I/O code
into the proper SoC-specific file and make the common I/O init code
take the map_desc as a parameter.  This allows support for SoCs with
different map_desc contents to be easily added.

Signed-off-by: Mark A. Greer <[email protected]>
---
 arch/arm/mach-davinci/board-dm355-evm.c     |    2 --
 arch/arm/mach-davinci/board-dm644x-evm.c    |    2 --
 arch/arm/mach-davinci/board-dm646x-evm.c    |    2 --
 arch/arm/mach-davinci/board-sffsdr.c        |    2 --
 arch/arm/mach-davinci/common.c              |    3 +++
 arch/arm/mach-davinci/devices.c             |    1 -
 arch/arm/mach-davinci/dm355.c               |   11 +++++++++++
 arch/arm/mach-davinci/dm644x.c              |   11 +++++++++++
 arch/arm/mach-davinci/dm646x.c              |   11 +++++++++++
 arch/arm/mach-davinci/include/mach/common.h |    6 +++++-
 arch/arm/mach-davinci/io.c                  |   17 ++---------------
 11 files changed, 43 insertions(+), 25 deletions(-)

diff --git a/arch/arm/mach-davinci/board-dm355-evm.c 
b/arch/arm/mach-davinci/board-dm355-evm.c
index eb9bfb3..f2c5b41 100644
--- a/arch/arm/mach-davinci/board-dm355-evm.c
+++ b/arch/arm/mach-davinci/board-dm355-evm.c
@@ -26,7 +26,6 @@
 #include <asm/setup.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
-#include <asm/mach/map.h>
 #include <asm/mach/flash.h>
 
 #include <mach/hardware.h>
@@ -189,7 +188,6 @@ static struct davinci_uart_config uart_config __initdata = {
 
 static void __init dm355_evm_map_io(void)
 {
-       davinci_map_common_io();
        davinci_soc_init(&davinci_soc_info_dm355);
 }
 
diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c 
b/arch/arm/mach-davinci/board-dm644x-evm.c
index 53c06dc..d11d96f 100644
--- a/arch/arm/mach-davinci/board-dm644x-evm.c
+++ b/arch/arm/mach-davinci/board-dm644x-evm.c
@@ -32,7 +32,6 @@
 #include <asm/mach-types.h>
 
 #include <asm/mach/arch.h>
-#include <asm/mach/map.h>
 #include <asm/mach/flash.h>
 
 #include <mach/dm644x.h>
@@ -590,7 +589,6 @@ static struct davinci_uart_config uart_config __initdata = {
 static void __init
 davinci_evm_map_io(void)
 {
-       davinci_map_common_io();
        davinci_soc_init(&davinci_soc_info_dm644x);
 }
 
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c 
b/arch/arm/mach-davinci/board-dm646x-evm.c
index bb61d8c..e9e38c8 100644
--- a/arch/arm/mach-davinci/board-dm646x-evm.c
+++ b/arch/arm/mach-davinci/board-dm646x-evm.c
@@ -31,7 +31,6 @@
 #include <asm/mach-types.h>
 
 #include <asm/mach/arch.h>
-#include <asm/mach/map.h>
 #include <asm/mach/flash.h>
 #include <mach/dm646x.h>
 #include <mach/common.h>
@@ -115,7 +114,6 @@ static void __init evm_init_i2c(void)
 
 static void __init davinci_map_io(void)
 {
-       davinci_map_common_io();
        davinci_soc_init(&davinci_soc_info_dm646x);
 }
 
diff --git a/arch/arm/mach-davinci/board-sffsdr.c 
b/arch/arm/mach-davinci/board-sffsdr.c
index db408f0..c06b966 100644
--- a/arch/arm/mach-davinci/board-sffsdr.c
+++ b/arch/arm/mach-davinci/board-sffsdr.c
@@ -43,7 +43,6 @@
 #include <asm/mach-types.h>
 
 #include <asm/mach/arch.h>
-#include <asm/mach/map.h>
 #include <asm/mach/flash.h>
 
 #include <mach/dm644x.h>
@@ -147,7 +146,6 @@ static struct davinci_uart_config uart_config __initdata = {
 
 static void __init davinci_sffsdr_map_io(void)
 {
-       davinci_map_common_io();
        davinci_soc_init(&davinci_soc_info_dm644x);
 }
 
diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c
index 2f4d375..8198558 100644
--- a/arch/arm/mach-davinci/common.c
+++ b/arch/arm/mach-davinci/common.c
@@ -33,6 +33,9 @@ int __init davinci_soc_init(struct davinci_soc_info *soc_info)
 
        memcpy(davinci_soc_info, soc_info, sizeof(struct davinci_soc_info));
 
+       davinci_map_common_io(davinci_soc_info->io_desc,
+                       davinci_soc_info->io_desc_num);
+
        if (davinci_soc_info->cpu_clks) {
                ret = davinci_clk_init(davinci_soc_info->cpu_clks);
 
diff --git a/arch/arm/mach-davinci/devices.c b/arch/arm/mach-davinci/devices.c
index a0f5a60..f0f4463 100644
--- a/arch/arm/mach-davinci/devices.c
+++ b/arch/arm/mach-davinci/devices.c
@@ -20,7 +20,6 @@
 
 #include <asm/io.h>
 #include <asm/mach-types.h>
-#include <asm/mach/map.h>
 
 #include <mach/hardware.h>
 #include <mach/edma.h>
diff --git a/arch/arm/mach-davinci/dm355.c b/arch/arm/mach-davinci/dm355.c
index 1e446ee..76691fc 100644
--- a/arch/arm/mach-davinci/dm355.c
+++ b/arch/arm/mach-davinci/dm355.c
@@ -467,10 +467,21 @@ EVT_CFG(DM355,  EVT9_ASP1_RX,           1,    1,    0,    
 false)
 EVT_CFG(DM355,  EVT26_MMC0_RX,       2,    1,    0,     false)
 };
 
+static struct map_desc dm355_io_desc[] __initdata = {
+       {
+               .virtual        = IO_VIRT,
+               .pfn            = __phys_to_pfn(IO_PHYS),
+               .length         = IO_SIZE,
+               .type           = MT_DEVICE
+       },
+};
+
 DAVINCI_SOC_START(dm355)
        .cpu_id         = DAVINCI_CPU_ID_DM355,
        .cpu_clks       = dm355_clks,
        .mux_pins       = dm355_pins,
        .mux_pins_num   = ARRAY_SIZE(dm355_pins),
        .mux_base       = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE),
+       .io_desc        = dm355_io_desc,
+       .io_desc_num    = ARRAY_SIZE(dm355_io_desc),
 DAVINCI_SOC_END
diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
index 92cda29..3475a0b 100644
--- a/arch/arm/mach-davinci/dm644x.c
+++ b/arch/arm/mach-davinci/dm644x.c
@@ -359,10 +359,21 @@ MUX_CFG(DM644X, LOEEN,            0,   24,    1,    1,    
 true)
 MUX_CFG(DM644X, LFLDEN,                0,   25,    1,    1,     false)
 };
 
+static struct map_desc dm644x_io_desc[] __initdata = {
+       {
+               .virtual        = IO_VIRT,
+               .pfn            = __phys_to_pfn(IO_PHYS),
+               .length         = IO_SIZE,
+               .type           = MT_DEVICE
+       },
+};
+
 DAVINCI_SOC_START(dm644x)
        .cpu_id         = DAVINCI_CPU_ID_DM6446,
        .cpu_clks       = dm644x_clks,
        .mux_pins       = dm644x_pins,
        .mux_pins_num   = ARRAY_SIZE(dm644x_pins),
        .mux_base       = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE),
+       .io_desc        = dm644x_io_desc,
+       .io_desc_num    = ARRAY_SIZE(dm644x_io_desc),
 DAVINCI_SOC_END
diff --git a/arch/arm/mach-davinci/dm646x.c b/arch/arm/mach-davinci/dm646x.c
index 0b0f9dd..2405f29 100644
--- a/arch/arm/mach-davinci/dm646x.c
+++ b/arch/arm/mach-davinci/dm646x.c
@@ -270,10 +270,21 @@ MUX_CFG(DM646X, AUDCK1,           0,   29,    1,    0,    
 false)
 MUX_CFG(DM646X, AUDCK0,                0,   28,    1,    0,     false)
 };
 
+static struct map_desc dm646x_io_desc[] __initdata = {
+       {
+               .virtual        = IO_VIRT,
+               .pfn            = __phys_to_pfn(IO_PHYS),
+               .length         = IO_SIZE,
+               .type           = MT_DEVICE
+       },
+};
+
 DAVINCI_SOC_START(dm646x)
        .cpu_id         = DAVINCI_CPU_ID_DM6467,
        .cpu_clks       = dm646x_clks,
        .mux_pins       = dm646x_pins,
        .mux_pins_num   = ARRAY_SIZE(dm646x_pins),
        .mux_base       = IO_ADDRESS(DAVINCI_SYSTEM_MODULE_BASE),
+       .io_desc        = dm646x_io_desc,
+       .io_desc_num    = ARRAY_SIZE(dm646x_io_desc),
 DAVINCI_SOC_END
diff --git a/arch/arm/mach-davinci/include/mach/common.h 
b/arch/arm/mach-davinci/include/mach/common.h
index 741968a..128203f 100644
--- a/arch/arm/mach-davinci/include/mach/common.h
+++ b/arch/arm/mach-davinci/include/mach/common.h
@@ -12,12 +12,14 @@
 #ifndef __ARCH_ARM_MACH_DAVINCI_COMMON_H
 #define __ARCH_ARM_MACH_DAVINCI_COMMON_H
 
+#include <asm/mach/map.h>
+
 struct sys_timer;
 
 extern struct sys_timer davinci_timer;
 
 extern void davinci_irq_init(void);
-extern void davinci_map_common_io(void);
+extern void davinci_map_common_io(struct map_desc *io_desc, int num);
 
 /* parameters describe VBUS sourcing for host mode */
 extern void setup_usb(unsigned mA, unsigned potpgt_msec);
@@ -32,6 +34,8 @@ struct davinci_soc_info {
        const struct mux_config *mux_pins;
        unsigned long mux_pins_num;
        void __iomem *mux_base;
+       struct map_desc *io_desc;
+       unsigned long io_desc_num;
 };
 
 #define DAVINCI_SOC_START(_name)                                       \
diff --git a/arch/arm/mach-davinci/io.c b/arch/arm/mach-davinci/io.c
index 41a394c..66777e8 100644
--- a/arch/arm/mach-davinci/io.c
+++ b/arch/arm/mach-davinci/io.c
@@ -20,22 +20,9 @@
 #include <mach/clock.h>
 #include <mach/mux.h>
 
-/*
- * The machine specific code may provide the extra mapping besides the
- * default mapping provided here.
- */
-static struct map_desc davinci_io_desc[] __initdata = {
-       {
-               .virtual        = IO_VIRT,
-               .pfn            = __phys_to_pfn(IO_PHYS),
-               .length         = IO_SIZE,
-               .type           = MT_DEVICE
-       },
-};
-
-void __init davinci_map_common_io(void)
+void __init davinci_map_common_io(struct map_desc *io_desc, int num)
 {
-       iotable_init(davinci_io_desc, ARRAY_SIZE(davinci_io_desc));
+       iotable_init(io_desc, num);
 
        /* Normally devicemaps_init() would flush caches and tlb after
         * mdesc->map_io(), but we must also do it here because of the CPU
-- 
1.6.0.3


_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to