Re: [PATCH 5/7][RFC] OMAP4: Update common omap machine specific sources.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Santosh Shilimkar <santosh.shilimkar@xxxxxx> [090421 06:08]:
> This patch updates the common machine spcific source files for OMAP4430.
> Few OMAP4 peripherals are common with OMAP3 architecture. Lot of code
> gets re-used because of this.
> 
> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@xxxxxx>
> ---
>  arch/arm/mach-omap2/gpmc.c     |    3 ++
>  arch/arm/mach-omap2/id.c       |    5 +++-
>  arch/arm/mach-omap2/io.c       |   48 ++++++++++++++++++++++++++++++++++++++++
>  arch/arm/mach-omap2/timer-gp.c |    6 ++++-
>  4 files changed, 60 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
> index 2249049..07aea04 100644
> --- a/arch/arm/mach-omap2/gpmc.c
> +++ b/arch/arm/mach-omap2/gpmc.c
> @@ -424,6 +424,9 @@ void __init gpmc_init(void)
>  	} else if (cpu_is_omap34xx()) {
>  		ck = "gpmc_fck";
>  		l = OMAP34XX_GPMC_BASE;
> +	} else if (cpu_is_omap44xx()) {
> +		ck = "gpmc_fck";
> +		l = OMAP44XX_GPMC_BASE;
>  	}
>  
>  	gpmc_l3_clk = clk_get(NULL, ck);
> diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
> index 34b5914..f69384d 100644
> --- a/arch/arm/mach-omap2/id.c
> +++ b/arch/arm/mach-omap2/id.c
> @@ -196,7 +196,10 @@ void __init omap2_check_revision(void)
>  	 * At this point we have an idea about the processor revision set
>  	 * earlier with omap2_set_globals_tap().
>  	 */
> -	if (cpu_is_omap24xx())
> +	if (cpu_is_omap44xx()) {
> +		printk(KERN_INFO "CPU revision = OMAP4430\n"); /* Fix Me*/
> +		return;
> +	} else if (cpu_is_omap24xx())
>  		omap24xx_check_revision();
>  	else if (cpu_is_omap34xx())
>  		omap34xx_check_revision();
> diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c
> index 916fcd3..3f7a7f5 100644
> --- a/arch/arm/mach-omap2/io.c
> +++ b/arch/arm/mach-omap2/io.c
> @@ -30,6 +30,7 @@
>  #include <mach/sdrc.h>
>  #include <mach/gpmc.h>
>  
> +#ifndef CONFIG_ARCH_OMAP4 /* Clock framework is still not supported for OMAP4*/
>  #include "clock.h"
>  
>  #include <mach/powerdomain.h>
> @@ -38,6 +39,7 @@
>  
>  #include <mach/clockdomain.h>
>  #include "clockdomains.h"
> +#endif
>  
>  /*
>   * The machine specific code may provide the extra mapping besides the
> @@ -166,6 +168,46 @@ static struct map_desc omap34xx_io_desc[] __initdata = {
>  	},
>  };
>  #endif
> +#ifdef	CONFIG_ARCH_OMAP44XX
> +static struct map_desc omap44xx_io_desc[] __initdata = {
> +	{
> +		.virtual	= L3_44XX_VIRT,
> +		.pfn		= __phys_to_pfn(L3_44XX_PHYS),
> +		.length		= L3_44XX_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= L4_44XX_VIRT,
> +		.pfn		= __phys_to_pfn(L4_44XX_PHYS),
> +		.length		= L4_44XX_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= L4_WK_44XX_VIRT,
> +		.pfn		= __phys_to_pfn(L4_WK_44XX_PHYS),
> +		.length		= L4_WK_44XX_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= OMAP44XX_GPMC_VIRT,
> +		.pfn		= __phys_to_pfn(OMAP44XX_GPMC_PHYS),
> +		.length		= OMAP44XX_GPMC_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= L4_PER_44XX_VIRT,
> +		.pfn		= __phys_to_pfn(L4_PER_44XX_PHYS),
> +		.length		= L4_PER_44XX_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +	{
> +		.virtual	= L4_EMU_44XX_VIRT,
> +		.pfn		= __phys_to_pfn(L4_EMU_44XX_PHYS),
> +		.length		= L4_EMU_44XX_SIZE,
> +		.type		= MT_DEVICE
> +	},
> +};
> +#endif
>  
>  void __init omap2_map_common_io(void)
>  {
> @@ -183,6 +225,10 @@ void __init omap2_map_common_io(void)
>  	iotable_init(omap34xx_io_desc, ARRAY_SIZE(omap34xx_io_desc));
>  #endif
>  
> +#if defined(CONFIG_ARCH_OMAP44XX)
> +	iotable_init(omap44xx_io_desc, ARRAY_SIZE(omap44xx_io_desc));
> +#endif
> +

This will break multi-omap. The cpu_is_omap44xx() works very early
during the boot nowadays as the omap2_set_globals_44xx() initializes
that, so please use that instead.


>  	/* 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.
> @@ -198,9 +244,11 @@ void __init omap2_map_common_io(void)
>  void __init omap2_init_common_hw(struct omap_sdrc_params *sp)
>  {
>  	omap2_mux_init();
> +#ifndef CONFIG_ARCH_OMAP4 /* REVISIT: to avoid build errors */
>  	pwrdm_init(powerdomains_omap);
>  	clkdm_init(clockdomains_omap, clkdm_pwrdm_autodeps);
>  	omap2_clk_init();
>  	omap2_sdrc_init(sp);
> +#endif
>  	gpmc_init();
>  }

Please use cpu_is_omap44xx() here too instead of the ifndef.


> diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c
> index 9fc13a2..f9f41df 100644
> --- a/arch/arm/mach-omap2/timer-gp.c
> +++ b/arch/arm/mach-omap2/timer-gp.c
> @@ -75,7 +75,8 @@ static void omap2_gp_timer_set_mode(enum clock_event_mode mode,
>  	case CLOCK_EVT_MODE_PERIODIC:
>  		period = clk_get_rate(omap_dm_timer_get_fclk(gptimer)) / HZ;
>  		period -= 1;
> -
> +		if (cpu_is_omap44xx())
> +			period = 0xFF;
>  		omap_dm_timer_set_load_start(gptimer, 1, 0xffffffff - period);
>  		break;
>  	case CLOCK_EVT_MODE_ONESHOT:
> @@ -108,6 +109,9 @@ static void __init omap2_gp_clockevent_init(void)
>  	omap_dm_timer_set_source(gptimer, OMAP_TIMER_SRC_SYS_CLK);
>  #endif
>  	tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer));
> +	if (cpu_is_omap44xx())
> +		/* Assuming 32kHz clk is driving GPT1 */
> +		tick_rate = 32768;
>  
>  	omap2_gp_timer_irq.dev_id = (void *)gptimer;
>  	setup_irq(omap_dm_timer_get_irq(gptimer), &omap2_gp_timer_irq);
> -- 
> 1.5.4.7
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux