Commit f4b9f40a authored by Tony Lindgren's avatar Tony Lindgren

ARM: OMAP4+: Initialize SAR RAM base early for proper CPU1 reset for kexec

Prepare things for making kexec work on SMP omap variants by initializing
SARM RAM base early. This allows us to configure CPU1 for kexec in case
the previous kernel has put CPU1 in low power mode.

Note that this should not prevent moving other SAR RAM code to live
under drivers. However for kexec, we will need this very early.
Acked-by: default avatarSantosh Shilimkar <ssantosh@kernel.org>
Tested-by: default avatarKeerthy <j-keerthy@ti.com>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent 99eb45f9
...@@ -257,6 +257,7 @@ extern void gic_dist_enable(void); ...@@ -257,6 +257,7 @@ extern void gic_dist_enable(void);
extern bool gic_dist_disabled(void); extern bool gic_dist_disabled(void);
extern void gic_timer_retrigger(void); extern void gic_timer_retrigger(void);
extern void omap_smc1(u32 fn, u32 arg); extern void omap_smc1(u32 fn, u32 arg);
extern void omap4_sar_ram_init(void);
extern void __iomem *omap4_get_sar_ram_base(void); extern void __iomem *omap4_get_sar_ram_base(void);
extern void omap_do_wfi(void); extern void omap_do_wfi(void);
......
...@@ -690,6 +690,7 @@ void __init omap4430_init_early(void) ...@@ -690,6 +690,7 @@ void __init omap4430_init_early(void)
omap4xxx_check_revision(); omap4xxx_check_revision();
omap4xxx_check_features(); omap4xxx_check_features();
omap2_prcm_base_init(); omap2_prcm_base_init();
omap4_sar_ram_init();
omap4_pm_init_early(); omap4_pm_init_early();
omap44xx_voltagedomains_init(); omap44xx_voltagedomains_init();
omap44xx_powerdomains_init(); omap44xx_powerdomains_init();
...@@ -718,6 +719,7 @@ void __init omap5_init_early(void) ...@@ -718,6 +719,7 @@ void __init omap5_init_early(void)
omap4_pm_init_early(); omap4_pm_init_early();
omap2_prcm_base_init(); omap2_prcm_base_init();
omap5xxx_check_revision(); omap5xxx_check_revision();
omap4_sar_ram_init();
omap54xx_voltagedomains_init(); omap54xx_voltagedomains_init();
omap54xx_powerdomains_init(); omap54xx_powerdomains_init();
omap54xx_clockdomains_init(); omap54xx_clockdomains_init();
......
...@@ -266,10 +266,11 @@ void __iomem *omap4_get_sar_ram_base(void) ...@@ -266,10 +266,11 @@ void __iomem *omap4_get_sar_ram_base(void)
} }
/* /*
* SAR RAM used to save and restore the HW * SAR RAM used to save and restore the HW context in low power modes.
* context in low power modes * Note that we need to initialize this very early for kexec. See
* omap4_mpuss_early_init().
*/ */
static int __init omap4_sar_ram_init(void) void __init omap4_sar_ram_init(void)
{ {
unsigned long sar_base; unsigned long sar_base;
...@@ -282,16 +283,13 @@ static int __init omap4_sar_ram_init(void) ...@@ -282,16 +283,13 @@ static int __init omap4_sar_ram_init(void)
else if (soc_is_omap54xx()) else if (soc_is_omap54xx())
sar_base = OMAP54XX_SAR_RAM_BASE; sar_base = OMAP54XX_SAR_RAM_BASE;
else else
return -ENOMEM; return;
/* Static mapping, never released */ /* Static mapping, never released */
sar_ram_base = ioremap(sar_base, SZ_16K); sar_ram_base = ioremap(sar_base, SZ_16K);
if (WARN_ON(!sar_ram_base)) if (WARN_ON(!sar_ram_base))
return -ENOMEM; return;
return 0;
} }
omap_early_initcall(omap4_sar_ram_init);
static const struct of_device_id intc_match[] = { static const struct of_device_id intc_match[] = {
{ .compatible = "ti,omap4-wugen-mpu", }, { .compatible = "ti,omap4-wugen-mpu", },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment