omap2/3/4: ioremap omap_globals module
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>
This commit is contained in:
parent
e03d37d859
commit
b7ebb10b0a
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue