Commit 28111dda authored by Olof Johansson's avatar Olof Johansson

Merge tag 'renesas-soc-fixes3-for-v3.19' of...

Merge tag 'renesas-soc-fixes3-for-v3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into fixes

Merge "Third Round of Renesas ARM Based SoC Fixes for v3.19" from Simon Horman:

* Instantiate GIC from C board code in legacy builds on r8a7790 and r8a73a4

* tag 'renesas-soc-fixes3-for-v3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas:
  ARM: shmobile: r8a7790: Instantiate GIC from C board code in legacy builds
  ARM: shmobile: r8a73a4: Instantiate GIC from C board code in legacy builds
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents eab8d653 77cf5166
...@@ -18,6 +18,8 @@ ...@@ -18,6 +18,8 @@
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irqchip.h>
#include <linux/irqchip/arm-gic.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/mfd/tmio.h> #include <linux/mfd/tmio.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
...@@ -273,6 +275,22 @@ static void __init ape6evm_add_standard_devices(void) ...@@ -273,6 +275,22 @@ static void __init ape6evm_add_standard_devices(void)
sizeof(ape6evm_leds_pdata)); sizeof(ape6evm_leds_pdata));
} }
static void __init ape6evm_legacy_init_time(void)
{
/* Do not invoke DT-based timers via clocksource_of_init() */
}
static void __init ape6evm_legacy_init_irq(void)
{
void __iomem *gic_dist_base = ioremap_nocache(0xf1001000, 0x1000);
void __iomem *gic_cpu_base = ioremap_nocache(0xf1002000, 0x1000);
gic_init(0, 29, gic_dist_base, gic_cpu_base);
/* Do not invoke DT-based interrupt code via irqchip_init() */
}
static const char *ape6evm_boards_compat_dt[] __initdata = { static const char *ape6evm_boards_compat_dt[] __initdata = {
"renesas,ape6evm", "renesas,ape6evm",
NULL, NULL,
...@@ -280,7 +298,9 @@ static const char *ape6evm_boards_compat_dt[] __initdata = { ...@@ -280,7 +298,9 @@ static const char *ape6evm_boards_compat_dt[] __initdata = {
DT_MACHINE_START(APE6EVM_DT, "ape6evm") DT_MACHINE_START(APE6EVM_DT, "ape6evm")
.init_early = shmobile_init_delay, .init_early = shmobile_init_delay,
.init_irq = ape6evm_legacy_init_irq,
.init_machine = ape6evm_add_standard_devices, .init_machine = ape6evm_add_standard_devices,
.init_late = shmobile_init_late, .init_late = shmobile_init_late,
.dt_compat = ape6evm_boards_compat_dt, .dt_compat = ape6evm_boards_compat_dt,
.init_time = ape6evm_legacy_init_time,
MACHINE_END MACHINE_END
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
#include <linux/input.h> #include <linux/input.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/irqchip.h>
#include <linux/irqchip/arm-gic.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/mfd/tmio.h> #include <linux/mfd/tmio.h>
...@@ -811,6 +813,16 @@ static void __init lager_init(void) ...@@ -811,6 +813,16 @@ static void __init lager_init(void)
lager_ksz8041_fixup); lager_ksz8041_fixup);
} }
static void __init lager_legacy_init_irq(void)
{
void __iomem *gic_dist_base = ioremap_nocache(0xf1001000, 0x1000);
void __iomem *gic_cpu_base = ioremap_nocache(0xf1002000, 0x1000);
gic_init(0, 29, gic_dist_base, gic_cpu_base);
/* Do not invoke DT-based interrupt code via irqchip_init() */
}
static const char * const lager_boards_compat_dt[] __initconst = { static const char * const lager_boards_compat_dt[] __initconst = {
"renesas,lager", "renesas,lager",
NULL, NULL,
...@@ -819,6 +831,7 @@ static const char * const lager_boards_compat_dt[] __initconst = { ...@@ -819,6 +831,7 @@ static const char * const lager_boards_compat_dt[] __initconst = {
DT_MACHINE_START(LAGER_DT, "lager") DT_MACHINE_START(LAGER_DT, "lager")
.smp = smp_ops(r8a7790_smp_ops), .smp = smp_ops(r8a7790_smp_ops),
.init_early = shmobile_init_delay, .init_early = shmobile_init_delay,
.init_irq = lager_legacy_init_irq,
.init_time = rcar_gen2_timer_init, .init_time = rcar_gen2_timer_init,
.init_machine = lager_init, .init_machine = lager_init,
.init_late = shmobile_init_late, .init_late = shmobile_init_late,
......
...@@ -133,7 +133,9 @@ void __init rcar_gen2_timer_init(void) ...@@ -133,7 +133,9 @@ void __init rcar_gen2_timer_init(void)
#ifdef CONFIG_COMMON_CLK #ifdef CONFIG_COMMON_CLK
rcar_gen2_clocks_init(mode); rcar_gen2_clocks_init(mode);
#endif #endif
#ifdef CONFIG_ARCH_SHMOBILE_MULTI
clocksource_of_init(); clocksource_of_init();
#endif
} }
struct memory_reserve_config { struct memory_reserve_config {
......
...@@ -70,6 +70,18 @@ void __init shmobile_init_delay(void) ...@@ -70,6 +70,18 @@ void __init shmobile_init_delay(void)
if (!max_freq) if (!max_freq)
return; return;
#ifdef CONFIG_ARCH_SHMOBILE_LEGACY
/* Non-multiplatform r8a73a4 SoC cannot use arch timer due
* to GIC being initialized from C and arch timer via DT */
if (of_machine_is_compatible("renesas,r8a73a4"))
has_arch_timer = false;
/* Non-multiplatform r8a7790 SoC cannot use arch timer due
* to GIC being initialized from C and arch timer via DT */
if (of_machine_is_compatible("renesas,r8a7790"))
has_arch_timer = false;
#endif
if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER)) { if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER)) {
if (is_a7_a8_a9) if (is_a7_a8_a9)
shmobile_setup_delay_hz(max_freq, 1, 3); shmobile_setup_delay_hz(max_freq, 1, 3);
......
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