[PATCH 2/9] omap2/3/4: ioremap omap_globals module

Paul Walmsley paul at pwsan.com
Thu Feb 18 12:35:19 EST 2010


One nitpicky comment on this one also:

On Thu, 18 Feb 2010, Santosh Shilimkar wrote:

> 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, tap and control module to
> allocate iospace dynamically
> 
> As per Tony's suggestion V2 version drops tap changes
> becasue ioremap uses cpu_is_omap2420() and cpu_is_omap2430(),
> so we can't use that for setting tap_base. Hence ioremap()
> won't work for tap until omap2_check_revision() is done
> 
> Signed-off-by: Santosh Shilimkar <santosh.shilimkar at ti.com>
> CC: Kevin Hilman <khilman at deeprootsystems.com>
> CC: Tony Lindgren <tony at atomide.com>
> ---
>  arch/arm/mach-omap2/control.c            |    6 ++++-
>  arch/arm/mach-omap2/prcm.c               |   16 ++++++++++--
>  arch/arm/mach-omap2/sdrc.c               |   11 +++++++-
>  arch/arm/plat-omap/common.c              |   38 +++++++++++++++---------------
>  arch/arm/plat-omap/include/plat/common.h |   17 ++++++++-----
>  5 files changed, 56 insertions(+), 32 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/control.c b/arch/arm/mach-omap2/control.c
> index cdd1f35..43f8a33 100644
> --- a/arch/arm/mach-omap2/control.c
> +++ b/arch/arm/mach-omap2/control.c
> @@ -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)
> diff --git a/arch/arm/mach-omap2/prcm.c b/arch/arm/mach-omap2/prcm.c
> index e8e121a..338d5f6 100644
> --- a/arch/arm/mach-omap2/prcm.c
> +++ b/arch/arm/mach-omap2/prcm.c
> @@ -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
> diff --git a/arch/arm/mach-omap2/sdrc.c b/arch/arm/mach-omap2/sdrc.c
> index cbfbd14..4c65f56 100644
> --- a/arch/arm/mach-omap2/sdrc.c
> +++ b/arch/arm/mach-omap2/sdrc.c
> @@ -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);
> +	}
>  }
>  
>  /**
> diff --git a/arch/arm/plat-omap/common.c b/arch/arm/plat-omap/common.c
> index 4f29e8c..088c1a0 100644
> --- a/arch/arm/plat-omap/common.c
> +++ b/arch/arm/plat-omap/common.c
> @@ -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,
> diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h
> index e04a58e..d0faff0 100644
> --- a/arch/arm/plat-omap/include/plat/common.h
> +++ b/arch/arm/plat-omap/include/plat/common.h
> @@ -37,16 +37,19 @@ 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.
> + */

Please be careful with CodingStyle, this should follow the rules for 
multiline comments.

>  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;
> -- 
> 1.6.0.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


- Paul



More information about the linux-arm-kernel mailing list