Merge branch 'depends/rmk/memory_h' into next/cleanup2
[pandora-kernel.git] / arch / arm / mach-omap2 / io.c
index d6d01cb..a5d8dce 100644 (file)
 #include "clock2xxx.h"
 #include "clock3xxx.h"
 #include "clock44xx.h"
-#include "io.h"
 
+#include <plat/common.h>
 #include <plat/omap-pm.h>
+#include "voltage.h"
 #include "powerdomain.h"
 
 #include "clockdomain.h"
 #include <plat/omap_hwmod.h>
 #include <plat/multi.h>
+#include <plat/common.h>
 
 /*
  * The machine specific code may provide the extra mapping besides the
@@ -238,26 +240,11 @@ static struct map_desc omap44xx_io_desc[] __initdata = {
 };
 #endif
 
-static void __init _omap2_map_common_io(void)
-{
-       /* Normally devicemaps_init() would flush caches and tlb after
-        * mdesc->map_io(), but we must also do it here because of the CPU
-        * revision check below.
-        */
-       local_flush_tlb_all();
-       flush_cache_all();
-
-       omap2_check_revision();
-       omap_sram_init();
-       omap_init_consistent_dma_size();
-}
-
 #ifdef CONFIG_SOC_OMAP2420
 void __init omap242x_map_common_io(void)
 {
        iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
        iotable_init(omap242x_io_desc, ARRAY_SIZE(omap242x_io_desc));
-       _omap2_map_common_io();
 }
 #endif
 
@@ -266,7 +253,6 @@ void __init omap243x_map_common_io(void)
 {
        iotable_init(omap24xx_io_desc, ARRAY_SIZE(omap24xx_io_desc));
        iotable_init(omap243x_io_desc, ARRAY_SIZE(omap243x_io_desc));
-       _omap2_map_common_io();
 }
 #endif
 
@@ -274,7 +260,6 @@ void __init omap243x_map_common_io(void)
 void __init omap34xx_map_common_io(void)
 {
        iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc));
-       _omap2_map_common_io();
 }
 #endif
 
@@ -282,7 +267,6 @@ void __init omap34xx_map_common_io(void)
 void __init omapti816x_map_common_io(void)
 {
        iotable_init(omapti816x_io_desc, ARRAY_SIZE(omapti816x_io_desc));
-       _omap2_map_common_io();
 }
 #endif
 
@@ -290,7 +274,6 @@ void __init omapti816x_map_common_io(void)
 void __init omap44xx_map_common_io(void)
 {
        iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
-       _omap2_map_common_io();
 }
 #endif
 
@@ -336,29 +319,16 @@ static int _set_hwmod_postsetup_state(struct omap_hwmod *oh, void *data)
 /* See irq.c, omap4-common.c and entry-macro.S */
 void __iomem *omap_irq_base;
 
-void __init omap2_init_common_infrastructure(void)
+static void __init omap_common_init_early(void)
 {
-       u8 postsetup_state;
+       omap2_check_revision();
+       omap_ioremap_init();
+       omap_init_consistent_dma_size();
+}
 
-       if (cpu_is_omap242x()) {
-               omap2xxx_powerdomains_init();
-               omap2xxx_clockdomains_init();
-               omap2420_hwmod_init();
-       } else if (cpu_is_omap243x()) {
-               omap2xxx_powerdomains_init();
-               omap2xxx_clockdomains_init();
-               omap2430_hwmod_init();
-       } else if (cpu_is_omap34xx()) {
-               omap3xxx_powerdomains_init();
-               omap3xxx_clockdomains_init();
-               omap3xxx_hwmod_init();
-       } else if (cpu_is_omap44xx()) {
-               omap44xx_powerdomains_init();
-               omap44xx_clockdomains_init();
-               omap44xx_hwmod_init();
-       } else {
-               pr_err("Could not init hwmod data - unknown SoC\n");
-        }
+static void __init omap_hwmod_init_postsetup(void)
+{
+       u8 postsetup_state;
 
        /* Set the default postsetup state for all hwmods */
 #ifdef CONFIG_PM_RUNTIME
@@ -376,7 +346,7 @@ void __init omap2_init_common_infrastructure(void)
         * omap_hwmod_late_init(), so boards that desire full watchdog
         * coverage of kernel initialization can reprogram the
         * postsetup_state between the calls to
-        * omap2_init_common_infra() and omap2_init_common_devices().
+        * omap2_init_common_infra() and omap_sdrc_init().
         *
         * XXX ideally we could detect whether the MPU WDT was currently
         * enabled here and make this conditional
@@ -387,27 +357,101 @@ void __init omap2_init_common_infrastructure(void)
                                     &postsetup_state);
 
        omap_pm_if_early_init();
+}
 
-       if (cpu_is_omap2420())
-               omap2420_clk_init();
-       else if (cpu_is_omap2430())
-               omap2430_clk_init();
-       else if (cpu_is_omap34xx())
-               omap3xxx_clk_init();
-       else if (cpu_is_omap44xx())
-               omap4xxx_clk_init();
-       else
-               pr_err("Could not init clock framework - unknown SoC\n");
+void __init omap2420_init_early(void)
+{
+       omap2_set_globals_242x();
+       omap_common_init_early();
+       omap2xxx_voltagedomains_init();
+       omap242x_powerdomains_init();
+       omap242x_clockdomains_init();
+       omap2420_hwmod_init();
+       omap_hwmod_init_postsetup();
+       omap2420_clk_init();
 }
 
-void __init omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0,
+void __init omap2430_init_early(void)
+{
+       omap2_set_globals_243x();
+       omap_common_init_early();
+       omap2xxx_voltagedomains_init();
+       omap243x_powerdomains_init();
+       omap243x_clockdomains_init();
+       omap2430_hwmod_init();
+       omap_hwmod_init_postsetup();
+       omap2430_clk_init();
+}
+
+/*
+ * Currently only board-omap3beagle.c should call this because of the
+ * same machine_id for 34xx and 36xx beagle.. Will get fixed with DT.
+ */
+void __init omap3_init_early(void)
+{
+       omap2_set_globals_3xxx();
+       omap_common_init_early();
+       omap3xxx_voltagedomains_init();
+       omap3xxx_powerdomains_init();
+       omap3xxx_clockdomains_init();
+       omap3xxx_hwmod_init();
+       omap_hwmod_init_postsetup();
+       omap3xxx_clk_init();
+}
+
+void __init omap3430_init_early(void)
+{
+       omap3_init_early();
+}
+
+void __init omap35xx_init_early(void)
+{
+       omap3_init_early();
+}
+
+void __init omap3630_init_early(void)
+{
+       omap3_init_early();
+}
+
+void __init am35xx_init_early(void)
+{
+       omap3_init_early();
+}
+
+void __init ti816x_init_early(void)
+{
+       omap2_set_globals_ti816x();
+       omap_common_init_early();
+       omap3xxx_voltagedomains_init();
+       omap3xxx_powerdomains_init();
+       omap3xxx_clockdomains_init();
+       omap3xxx_hwmod_init();
+       omap_hwmod_init_postsetup();
+       omap3xxx_clk_init();
+}
+
+void __init omap4430_init_early(void)
+{
+       omap2_set_globals_443x();
+       omap_common_init_early();
+       omap44xx_voltagedomains_init();
+       omap44xx_powerdomains_init();
+       omap44xx_clockdomains_init();
+       omap44xx_hwmod_init();
+       omap_hwmod_init_postsetup();
+       omap4xxx_clk_init();
+}
+
+void __init omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0,
                                      struct omap_sdrc_params *sdrc_cs1)
 {
+       omap_sram_init();
+
        if (cpu_is_omap24xx() || omap3_has_sdrc()) {
                omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
                _omap2_init_reprogram_sdrc();
        }
-
 }
 
 /*