ARM: OMAP: Move set_globals initialization to happen in init_early
Otherwise we can't do generic map_io as we currently rely on static mappings that work only because of arch_ioremap. Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Tested-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
@@ -37,7 +37,6 @@ static void __init ti8168_evm_init(void)
|
|||||||
|
|
||||||
static void __init ti8168_evm_map_io(void)
|
static void __init ti8168_evm_map_io(void)
|
||||||
{
|
{
|
||||||
omap2_set_globals_ti816x();
|
|
||||||
omapti816x_map_common_io();
|
omapti816x_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -45,11 +45,11 @@ static void __init __omap2_set_globals(struct omap_globals *omap2_globals)
|
|||||||
static struct omap_globals omap242x_globals = {
|
static struct omap_globals omap242x_globals = {
|
||||||
.class = OMAP242X_CLASS,
|
.class = OMAP242X_CLASS,
|
||||||
.tap = OMAP2_L4_IO_ADDRESS(0x48014000),
|
.tap = OMAP2_L4_IO_ADDRESS(0x48014000),
|
||||||
.sdrc = OMAP2420_SDRC_BASE,
|
.sdrc = OMAP2_L3_IO_ADDRESS(OMAP2420_SDRC_BASE),
|
||||||
.sms = OMAP2420_SMS_BASE,
|
.sms = OMAP2_L3_IO_ADDRESS(OMAP2420_SMS_BASE),
|
||||||
.ctrl = OMAP242X_CTRL_BASE,
|
.ctrl = OMAP2_L4_IO_ADDRESS(OMAP242X_CTRL_BASE),
|
||||||
.prm = OMAP2420_PRM_BASE,
|
.prm = OMAP2_L4_IO_ADDRESS(OMAP2420_PRM_BASE),
|
||||||
.cm = OMAP2420_CM_BASE,
|
.cm = OMAP2_L4_IO_ADDRESS(OMAP2420_CM_BASE),
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init omap2_set_globals_242x(void)
|
void __init omap2_set_globals_242x(void)
|
||||||
@@ -59,7 +59,6 @@ void __init omap2_set_globals_242x(void)
|
|||||||
|
|
||||||
void __init omap242x_map_io(void)
|
void __init omap242x_map_io(void)
|
||||||
{
|
{
|
||||||
omap2_set_globals_242x();
|
|
||||||
omap242x_map_common_io();
|
omap242x_map_common_io();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -69,11 +68,11 @@ void __init omap242x_map_io(void)
|
|||||||
static struct omap_globals omap243x_globals = {
|
static struct omap_globals omap243x_globals = {
|
||||||
.class = OMAP243X_CLASS,
|
.class = OMAP243X_CLASS,
|
||||||
.tap = OMAP2_L4_IO_ADDRESS(0x4900a000),
|
.tap = OMAP2_L4_IO_ADDRESS(0x4900a000),
|
||||||
.sdrc = OMAP243X_SDRC_BASE,
|
.sdrc = OMAP2_L3_IO_ADDRESS(OMAP243X_SDRC_BASE),
|
||||||
.sms = OMAP243X_SMS_BASE,
|
.sms = OMAP2_L3_IO_ADDRESS(OMAP243X_SMS_BASE),
|
||||||
.ctrl = OMAP243X_CTRL_BASE,
|
.ctrl = OMAP2_L4_IO_ADDRESS(OMAP243X_CTRL_BASE),
|
||||||
.prm = OMAP2430_PRM_BASE,
|
.prm = OMAP2_L4_IO_ADDRESS(OMAP2430_PRM_BASE),
|
||||||
.cm = OMAP2430_CM_BASE,
|
.cm = OMAP2_L4_IO_ADDRESS(OMAP2430_CM_BASE),
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init omap2_set_globals_243x(void)
|
void __init omap2_set_globals_243x(void)
|
||||||
@@ -83,7 +82,6 @@ void __init omap2_set_globals_243x(void)
|
|||||||
|
|
||||||
void __init omap243x_map_io(void)
|
void __init omap243x_map_io(void)
|
||||||
{
|
{
|
||||||
omap2_set_globals_243x();
|
|
||||||
omap243x_map_common_io();
|
omap243x_map_common_io();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -93,11 +91,11 @@ void __init omap243x_map_io(void)
|
|||||||
static struct omap_globals omap3_globals = {
|
static struct omap_globals omap3_globals = {
|
||||||
.class = OMAP343X_CLASS,
|
.class = OMAP343X_CLASS,
|
||||||
.tap = OMAP2_L4_IO_ADDRESS(0x4830A000),
|
.tap = OMAP2_L4_IO_ADDRESS(0x4830A000),
|
||||||
.sdrc = OMAP343X_SDRC_BASE,
|
.sdrc = OMAP2_L3_IO_ADDRESS(OMAP343X_SDRC_BASE),
|
||||||
.sms = OMAP343X_SMS_BASE,
|
.sms = OMAP2_L3_IO_ADDRESS(OMAP343X_SMS_BASE),
|
||||||
.ctrl = OMAP343X_CTRL_BASE,
|
.ctrl = OMAP2_L4_IO_ADDRESS(OMAP343X_CTRL_BASE),
|
||||||
.prm = OMAP3430_PRM_BASE,
|
.prm = OMAP2_L4_IO_ADDRESS(OMAP3430_PRM_BASE),
|
||||||
.cm = OMAP3430_CM_BASE,
|
.cm = OMAP2_L4_IO_ADDRESS(OMAP3430_CM_BASE),
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init omap2_set_globals_3xxx(void)
|
void __init omap2_set_globals_3xxx(void)
|
||||||
@@ -107,7 +105,6 @@ void __init omap2_set_globals_3xxx(void)
|
|||||||
|
|
||||||
void __init omap3_map_io(void)
|
void __init omap3_map_io(void)
|
||||||
{
|
{
|
||||||
omap2_set_globals_3xxx();
|
|
||||||
omap34xx_map_common_io();
|
omap34xx_map_common_io();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,9 +119,9 @@ void __init omap3_map_io(void)
|
|||||||
static struct omap_globals ti816x_globals = {
|
static struct omap_globals ti816x_globals = {
|
||||||
.class = OMAP343X_CLASS,
|
.class = OMAP343X_CLASS,
|
||||||
.tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE),
|
.tap = OMAP2_L4_IO_ADDRESS(TI816X_TAP_BASE),
|
||||||
.ctrl = TI816X_CTRL_BASE,
|
.ctrl = OMAP2_L4_IO_ADDRESS(TI816X_CTRL_BASE),
|
||||||
.prm = TI816X_PRCM_BASE,
|
.prm = OMAP2_L4_IO_ADDRESS(TI816X_PRCM_BASE),
|
||||||
.cm = TI816X_PRCM_BASE,
|
.cm = OMAP2_L4_IO_ADDRESS(TI816X_PRCM_BASE),
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init omap2_set_globals_ti816x(void)
|
void __init omap2_set_globals_ti816x(void)
|
||||||
@@ -137,11 +134,11 @@ void __init omap2_set_globals_ti816x(void)
|
|||||||
static struct omap_globals omap4_globals = {
|
static struct omap_globals omap4_globals = {
|
||||||
.class = OMAP443X_CLASS,
|
.class = OMAP443X_CLASS,
|
||||||
.tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
|
.tap = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
|
||||||
.ctrl = OMAP443X_SCM_BASE,
|
.ctrl = OMAP2_L4_IO_ADDRESS(OMAP443X_SCM_BASE),
|
||||||
.ctrl_pad = OMAP443X_CTRL_BASE,
|
.ctrl_pad = OMAP2_L4_IO_ADDRESS(OMAP443X_CTRL_BASE),
|
||||||
.prm = OMAP4430_PRM_BASE,
|
.prm = OMAP2_L4_IO_ADDRESS(OMAP4430_PRM_BASE),
|
||||||
.cm = OMAP4430_CM_BASE,
|
.cm = OMAP2_L4_IO_ADDRESS(OMAP4430_CM_BASE),
|
||||||
.cm2 = OMAP4430_CM2_BASE,
|
.cm2 = OMAP2_L4_IO_ADDRESS(OMAP4430_CM2_BASE),
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init omap2_set_globals_443x(void)
|
void __init omap2_set_globals_443x(void)
|
||||||
@@ -153,7 +150,6 @@ void __init omap2_set_globals_443x(void)
|
|||||||
|
|
||||||
void __init omap4_map_io(void)
|
void __init omap4_map_io(void)
|
||||||
{
|
{
|
||||||
omap2_set_globals_443x();
|
|
||||||
omap44xx_map_common_io();
|
omap44xx_map_common_io();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -149,17 +149,11 @@ static struct omap3_control_regs control_context;
|
|||||||
|
|
||||||
void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
|
void __init omap2_set_globals_control(struct omap_globals *omap2_globals)
|
||||||
{
|
{
|
||||||
/* Static mapping, never released */
|
if (omap2_globals->ctrl)
|
||||||
if (omap2_globals->ctrl) {
|
omap2_ctrl_base = omap2_globals->ctrl;
|
||||||
omap2_ctrl_base = ioremap(omap2_globals->ctrl, SZ_4K);
|
|
||||||
WARN_ON(!omap2_ctrl_base);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Static mapping, never released */
|
if (omap2_globals->ctrl_pad)
|
||||||
if (omap2_globals->ctrl_pad) {
|
omap4_ctrl_pad_base = omap2_globals->ctrl_pad;
|
||||||
omap4_ctrl_pad_base = ioremap(omap2_globals->ctrl_pad, SZ_4K);
|
|
||||||
WARN_ON(!omap4_ctrl_pad_base);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __iomem *omap_ctrl_base_get(void)
|
void __iomem *omap_ctrl_base_get(void)
|
||||||
|
@@ -44,6 +44,7 @@
|
|||||||
#include "clockdomain.h"
|
#include "clockdomain.h"
|
||||||
#include <plat/omap_hwmod.h>
|
#include <plat/omap_hwmod.h>
|
||||||
#include <plat/multi.h>
|
#include <plat/multi.h>
|
||||||
|
#include <plat/common.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The machine specific code may provide the extra mapping besides the
|
* The machine specific code may provide the extra mapping besides the
|
||||||
@@ -359,6 +360,7 @@ static void __init omap_hwmod_init_postsetup(void)
|
|||||||
|
|
||||||
void __init omap2420_init_early(void)
|
void __init omap2420_init_early(void)
|
||||||
{
|
{
|
||||||
|
omap2_set_globals_242x();
|
||||||
omap_common_init_early();
|
omap_common_init_early();
|
||||||
omap2xxx_voltagedomains_init();
|
omap2xxx_voltagedomains_init();
|
||||||
omap242x_powerdomains_init();
|
omap242x_powerdomains_init();
|
||||||
@@ -370,6 +372,7 @@ void __init omap2420_init_early(void)
|
|||||||
|
|
||||||
void __init omap2430_init_early(void)
|
void __init omap2430_init_early(void)
|
||||||
{
|
{
|
||||||
|
omap2_set_globals_243x();
|
||||||
omap_common_init_early();
|
omap_common_init_early();
|
||||||
omap2xxx_voltagedomains_init();
|
omap2xxx_voltagedomains_init();
|
||||||
omap243x_powerdomains_init();
|
omap243x_powerdomains_init();
|
||||||
@@ -385,6 +388,7 @@ void __init omap2430_init_early(void)
|
|||||||
*/
|
*/
|
||||||
void __init omap3_init_early(void)
|
void __init omap3_init_early(void)
|
||||||
{
|
{
|
||||||
|
omap2_set_globals_3xxx();
|
||||||
omap_common_init_early();
|
omap_common_init_early();
|
||||||
omap3xxx_voltagedomains_init();
|
omap3xxx_voltagedomains_init();
|
||||||
omap3xxx_powerdomains_init();
|
omap3xxx_powerdomains_init();
|
||||||
@@ -416,11 +420,19 @@ void __init am35xx_init_early(void)
|
|||||||
|
|
||||||
void __init ti816x_init_early(void)
|
void __init ti816x_init_early(void)
|
||||||
{
|
{
|
||||||
omap3_init_early();
|
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)
|
void __init omap4430_init_early(void)
|
||||||
{
|
{
|
||||||
|
omap2_set_globals_443x();
|
||||||
omap_common_init_early();
|
omap_common_init_early();
|
||||||
omap44xx_voltagedomains_init();
|
omap44xx_voltagedomains_init();
|
||||||
omap44xx_powerdomains_init();
|
omap44xx_powerdomains_init();
|
||||||
|
@@ -102,8 +102,11 @@ void __init smp_init_cpus(void)
|
|||||||
{
|
{
|
||||||
unsigned int i, ncores;
|
unsigned int i, ncores;
|
||||||
|
|
||||||
/* Never released */
|
/*
|
||||||
scu_base = ioremap(OMAP44XX_SCU_BASE, SZ_256);
|
* Currently we can't call ioremap here because
|
||||||
|
* SoC detection won't work until after init_early.
|
||||||
|
*/
|
||||||
|
scu_base = OMAP2_L4_IO_ADDRESS(OMAP44XX_SCU_BASE);
|
||||||
BUG_ON(!scu_base);
|
BUG_ON(!scu_base);
|
||||||
|
|
||||||
ncores = scu_get_core_count(scu_base);
|
ncores = scu_get_core_count(scu_base);
|
||||||
|
@@ -151,17 +151,10 @@ int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest,
|
|||||||
|
|
||||||
void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals)
|
void __init omap2_set_globals_prcm(struct omap_globals *omap2_globals)
|
||||||
{
|
{
|
||||||
/* Static mapping, never released */
|
if (omap2_globals->prm)
|
||||||
if (omap2_globals->prm) {
|
prm_base = omap2_globals->prm;
|
||||||
prm_base = ioremap(omap2_globals->prm, SZ_8K);
|
if (omap2_globals->cm)
|
||||||
WARN_ON(!prm_base);
|
cm_base = omap2_globals->cm;
|
||||||
}
|
if (omap2_globals->cm2)
|
||||||
if (omap2_globals->cm) {
|
cm2_base = omap2_globals->cm2;
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -117,15 +117,10 @@ int omap2_sdrc_get_params(unsigned long r,
|
|||||||
|
|
||||||
void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals)
|
void __init omap2_set_globals_sdrc(struct omap_globals *omap2_globals)
|
||||||
{
|
{
|
||||||
/* Static mapping, never released */
|
if (omap2_globals->sdrc)
|
||||||
if (omap2_globals->sdrc) {
|
omap2_sdrc_base = omap2_globals->sdrc;
|
||||||
omap2_sdrc_base = ioremap(omap2_globals->sdrc, SZ_64K);
|
if (omap2_globals->sms)
|
||||||
WARN_ON(!omap2_sdrc_base);
|
omap2_sms_base = omap2_globals->sms;
|
||||||
}
|
|
||||||
if (omap2_globals->sms) {
|
|
||||||
omap2_sms_base = ioremap(omap2_globals->sms, SZ_64K);
|
|
||||||
WARN_ON(!omap2_sms_base);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -65,13 +65,13 @@ void omap_sram_init(void);
|
|||||||
struct omap_globals {
|
struct omap_globals {
|
||||||
u32 class; /* OMAP class to detect */
|
u32 class; /* OMAP class to detect */
|
||||||
void __iomem *tap; /* Control module ID code */
|
void __iomem *tap; /* Control module ID code */
|
||||||
unsigned long sdrc; /* SDRAM Controller */
|
void __iomem *sdrc; /* SDRAM Controller */
|
||||||
unsigned long sms; /* SDRAM Memory Scheduler */
|
void __iomem *sms; /* SDRAM Memory Scheduler */
|
||||||
unsigned long ctrl; /* System Control Module */
|
void __iomem *ctrl; /* System Control Module */
|
||||||
unsigned long ctrl_pad; /* PAD Control Module */
|
void __iomem *ctrl_pad; /* PAD Control Module */
|
||||||
unsigned long prm; /* Power and Reset Management */
|
void __iomem *prm; /* Power and Reset Management */
|
||||||
unsigned long cm; /* Clock Management */
|
void __iomem *cm; /* Clock Management */
|
||||||
unsigned long cm2;
|
void __iomem *cm2;
|
||||||
};
|
};
|
||||||
|
|
||||||
void omap2_set_globals_242x(void);
|
void omap2_set_globals_242x(void);
|
||||||
|
Reference in New Issue
Block a user