omap2/3/4: ioremap omap_globals module
Santosh Shilimkar [Mon, 15 Feb 2010 12:33:37 +0000 (17:33 +0530)]
This is a clean-up patch towards dynamic allocation of IO space
instead of using harcoded macros to calculate virtual addresses.

Also update the sdrc, prcm and control module to allocate
iospace dynamically

Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Reviewed-by: Kevin Hilman <khilman@deeprootsystems.com>
Reviewed-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>

arch/arm/mach-omap2/control.c
arch/arm/mach-omap2/prcm.c
arch/arm/mach-omap2/sdrc.c
arch/arm/plat-omap/common.c
arch/arm/plat-omap/include/plat/common.h

index cdd1f35..43f8a33 100644 (file)
@@ -140,7 +140,11 @@ static struct omap3_control_regs control_context;
 
 void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
 {
-       omap2_ctrl_base = omap2_globals->ctrl;
+       /* Static mapping, never released */
+       if (omap2_globals->ctrl) {
+               omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K);
+               WARN_ON(!omap2_ctrl_base);
+       }
 }
 
 void __iomem *omap_ctrl_base_get(void)
index e8e121a..338d5f6 100644 (file)
@@ -279,9 +279,19 @@ int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, const char *name)
 
 void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals)
 {
-       prm_base = omap2_globals->prm;
-       cm_base = omap2_globals->cm;
-       cm2_base = omap2_globals->cm2;
+       /* Static mapping, never released */
+       if (omap2_globals->prm) {
+               prm_base = ioremap(omap2_globals->prm, SZ_8K);
+               WARN_ON(!prm_base);
+       }
+       if (omap2_globals->cm) {
+               cm_base = ioremap(omap2_globals->cm, SZ_8K);
+               WARN_ON(!cm_base);
+       }
+       if (omap2_globals->cm2) {
+               cm2_base = ioremap(omap2_globals->cm2, SZ_8K);
+               WARN_ON(!cm2_base);
+       }
 }
 
 #ifdef CONFIG_ARCH_OMAP3
index cbfbd14..4c65f56 100644 (file)
@@ -119,8 +119,15 @@ int omap2_sdrc_get_params(unsigned long r,
 
 void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals)
 {
-       omap2_sdrc_base = omap2_globals->sdrc;
-       omap2_sms_base = omap2_globals->sms;
+       /* Static mapping, never released */
+       if (omap2_globals->sdrc) {
+               omap2_sdrc_base = ioremap(omap2_globals->sdrc, SZ_64K);
+               WARN_ON(!omap2_sdrc_base);
+       }
+       if (omap2_globals->sms) {
+               omap2_sms_base = ioremap(omap2_globals->sms, SZ_64K);
+               WARN_ON(!omap2_sms_base);
+       }
 }
 
 /**
index 4f29e8c..088c1a0 100644 (file)
@@ -256,11 +256,11 @@ static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
 static struct omap_globals omap242x_globals = {
        .class  = OMAP242X_CLASS,
        .tap    = OMAP2_L4_IO_ADDRESS(0x48014000),
-       .sdrc   = OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE),
-       .sms    = OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE),
-       .ctrl   = OMAP2_L4_IO_ADDRESS(OMAP2420_CTRL_BASE),
-       .prm    = OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE),
-       .cm     = OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE),
+       .sdrc   = OMAP2420_SDRC_BASE,
+       .sms    = OMAP2420_SMS_BASE,
+       .ctrl   = OMAP2420_CTRL_BASE,
+       .prm    = OMAP2420_PRM_BASE,
+       .cm     = OMAP2420_CM_BASE,
        .uart1_phys     = OMAP2_UART1_BASE,
        .uart2_phys     = OMAP2_UART2_BASE,
        .uart3_phys     = OMAP2_UART3_BASE,
@@ -277,11 +277,11 @@ void __init omap2_set_globals_242x(void)
 static struct omap_globals omap243x_globals = {
        .class  = OMAP243X_CLASS,
        .tap    = OMAP2_L4_IO_ADDRESS(0x4900a000),
-       .sdrc   = OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE),
-       .sms    = OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE),
-       .ctrl   = OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE),
-       .prm    = OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE),
-       .cm     = OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE),
+       .sdrc   = OMAP243X_SDRC_BASE,
+       .sms    = OMAP243X_SMS_BASE,
+       .ctrl   = OMAP243X_CTRL_BASE,
+       .prm    = OMAP2430_PRM_BASE,
+       .cm     = OMAP2430_CM_BASE,
        .uart1_phys     = OMAP2_UART1_BASE,
        .uart2_phys     = OMAP2_UART2_BASE,
        .uart3_phys     = OMAP2_UART3_BASE,
@@ -298,11 +298,11 @@ void __init omap2_set_globals_243x(void)
 static struct omap_globals omap3_globals = {
        .class  = OMAP343X_CLASS,
        .tap    = OMAP2_L4_IO_ADDRESS(0x4830A000),
-       .sdrc   = OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE),
-       .sms    = OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE),
-       .ctrl   = OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE),
-       .prm    = OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE),
-       .cm     = OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE),
+       .sdrc   = OMAP343X_SDRC_BASE,
+       .sms    = OMAP343X_SMS_BASE,
+       .ctrl   = OMAP343X_CTRL_BASE,
+       .prm    = OMAP3430_PRM_BASE,
+       .cm     = OMAP3430_CM_BASE,
        .uart1_phys     = OMAP3_UART1_BASE,
        .uart2_phys     = OMAP3_UART2_BASE,
        .uart3_phys     = OMAP3_UART3_BASE,
@@ -325,10 +325,10 @@ void __init omap2_set_globals_36xx(void)
 static struct omap_globals omap4_globals = {
        .class  = OMAP443X_CLASS,
        .tap    = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
-       .ctrl   = OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE),
-       .prm    = OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE),
-       .cm     = OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE),
-       .cm2    = OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE),
+       .ctrl   = OMAP443X_CTRL_BASE,
+       .prm    = OMAP4430_PRM_BASE,
+       .cm     = OMAP4430_CM_BASE,
+       .cm2    = OMAP4430_CM2_BASE,
        .uart1_phys     = OMAP4_UART1_BASE,
        .uart2_phys     = OMAP4_UART2_BASE,
        .uart3_phys     = OMAP4_UART3_BASE,
index e04a58e..7556e27 100644 (file)
@@ -37,16 +37,20 @@ extern void __iomem *gic_cpu_base_addr;
 extern void omap_map_common_io(void);
 extern struct sys_timer omap_timer;
 
-/* IO bases for various OMAP processors */
+/*
+ * IO bases for various OMAP processors
+ * Except the tap base, rest all the io bases
+ * listed are physical addresses.
+ */
 struct omap_globals {
        u32             class;          /* OMAP class to detect */
        void __iomem    *tap;           /* Control module ID code */
-       void __iomem    *sdrc;          /* SDRAM Controller */
-       void __iomem    *sms;           /* SDRAM Memory Scheduler */
-       void __iomem    *ctrl;          /* System Control Module */
-       void __iomem    *prm;           /* Power and Reset Management */
-       void __iomem    *cm;            /* Clock Management */
-       void __iomem    *cm2;
+       unsigned long   sdrc;           /* SDRAM Controller */
+       unsigned long   sms;            /* SDRAM Memory Scheduler */
+       unsigned long   ctrl;           /* System Control Module */
+       unsigned long   prm;            /* Power and Reset Management */
+       unsigned long   cm;             /* Clock Management */
+       unsigned long   cm2;
        unsigned long   uart1_phys;
        unsigned long   uart2_phys;
        unsigned long   uart3_phys;