diff options
Diffstat (limited to 'arch/arm/mach-omap2/omap4-common.c')
| -rw-r--r-- | arch/arm/mach-omap2/omap4-common.c | 41 | 
1 files changed, 29 insertions, 12 deletions
diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 6897ae21bb8..13b27ffaf45 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -15,13 +15,15 @@  #include <linux/init.h>  #include <linux/io.h>  #include <linux/irq.h> +#include <linux/irqchip.h>  #include <linux/platform_device.h>  #include <linux/memblock.h>  #include <linux/of_irq.h>  #include <linux/of_platform.h>  #include <linux/export.h> +#include <linux/irqchip/arm-gic.h> +#include <linux/of_address.h> -#include <asm/hardware/gic.h>  #include <asm/hardware/cache-l2x0.h>  #include <asm/mach/map.h>  #include <asm/memblock.h> @@ -225,7 +227,7 @@ static int __init omap_l2_cache_init(void)  	return 0;  } -early_initcall(omap_l2_cache_init); +omap_early_initcall(omap_l2_cache_init);  #endif  void __iomem *omap4_get_sar_ram_base(void) @@ -239,32 +241,47 @@ void __iomem *omap4_get_sar_ram_base(void)   */  static int __init omap4_sar_ram_init(void)  { +	unsigned long sar_base; +  	/*  	 * To avoid code running on other OMAPs in  	 * multi-omap builds  	 */ -	if (!cpu_is_omap44xx()) +	if (cpu_is_omap44xx()) +		sar_base = OMAP44XX_SAR_RAM_BASE; +	else if (soc_is_omap54xx()) +		sar_base = OMAP54XX_SAR_RAM_BASE; +	else  		return -ENOMEM;  	/* Static mapping, never released */ -	sar_ram_base = ioremap(OMAP44XX_SAR_RAM_BASE, SZ_16K); +	sar_ram_base = ioremap(sar_base, SZ_16K);  	if (WARN_ON(!sar_ram_base))  		return -ENOMEM;  	return 0;  } -early_initcall(omap4_sar_ram_init); - -static struct of_device_id irq_match[] __initdata = { -	{ .compatible = "arm,cortex-a9-gic", .data = gic_of_init, }, -	{ .compatible = "arm,cortex-a15-gic", .data = gic_of_init, }, -	{ } -}; +omap_early_initcall(omap4_sar_ram_init);  void __init omap_gic_of_init(void)  { +	struct device_node *np; + +	/* Extract GIC distributor and TWD bases for OMAP4460 ROM Errata WA */ +	if (!cpu_is_omap446x()) +		goto skip_errata_init; + +	np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-gic"); +	gic_dist_base_addr = of_iomap(np, 0); +	WARN_ON(!gic_dist_base_addr); + +	np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-twd-timer"); +	twd_base = of_iomap(np, 0); +	WARN_ON(!twd_base); + +skip_errata_init:  	omap_wakeupgen_init(); -	of_irq_init(irq_match); +	irqchip_init();  }  #if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)  |