diff options
-rw-r--r-- | arch/arm/mach-shmobile/board-ape6evm.c | 20 | ||||
-rw-r--r-- | arch/arm/mach-shmobile/timer.c | 7 |
2 files changed, 27 insertions, 0 deletions
diff --git a/arch/arm/mach-shmobile/board-ape6evm.c b/arch/arm/mach-shmobile/board-ape6evm.c index b222f68d55b7..2cca5ef86ba0 100644 --- a/arch/arm/mach-shmobile/board-ape6evm.c +++ b/arch/arm/mach-shmobile/board-ape6evm.c | |||
@@ -22,6 +22,8 @@ | |||
22 | #include <linux/gpio_keys.h> | 22 | #include <linux/gpio_keys.h> |
23 | #include <linux/input.h> | 23 | #include <linux/input.h> |
24 | #include <linux/interrupt.h> | 24 | #include <linux/interrupt.h> |
25 | #include <linux/irqchip.h> | ||
26 | #include <linux/irqchip/arm-gic.h> | ||
25 | #include <linux/kernel.h> | 27 | #include <linux/kernel.h> |
26 | #include <linux/mfd/tmio.h> | 28 | #include <linux/mfd/tmio.h> |
27 | #include <linux/mmc/host.h> | 29 | #include <linux/mmc/host.h> |
@@ -277,6 +279,22 @@ static void __init ape6evm_add_standard_devices(void) | |||
277 | sizeof(ape6evm_leds_pdata)); | 279 | sizeof(ape6evm_leds_pdata)); |
278 | } | 280 | } |
279 | 281 | ||
282 | static void __init ape6evm_legacy_init_time(void) | ||
283 | { | ||
284 | /* Do not invoke DT-based timers via clocksource_of_init() */ | ||
285 | } | ||
286 | |||
287 | static void __init ape6evm_legacy_init_irq(void) | ||
288 | { | ||
289 | void __iomem *gic_dist_base = ioremap_nocache(0xf1001000, 0x1000); | ||
290 | void __iomem *gic_cpu_base = ioremap_nocache(0xf1002000, 0x1000); | ||
291 | |||
292 | gic_init(0, 29, gic_dist_base, gic_cpu_base); | ||
293 | |||
294 | /* Do not invoke DT-based interrupt code via irqchip_init() */ | ||
295 | } | ||
296 | |||
297 | |||
280 | static const char *ape6evm_boards_compat_dt[] __initdata = { | 298 | static const char *ape6evm_boards_compat_dt[] __initdata = { |
281 | "renesas,ape6evm", | 299 | "renesas,ape6evm", |
282 | NULL, | 300 | NULL, |
@@ -284,7 +302,9 @@ static const char *ape6evm_boards_compat_dt[] __initdata = { | |||
284 | 302 | ||
285 | DT_MACHINE_START(APE6EVM_DT, "ape6evm") | 303 | DT_MACHINE_START(APE6EVM_DT, "ape6evm") |
286 | .init_early = shmobile_init_delay, | 304 | .init_early = shmobile_init_delay, |
305 | .init_irq = ape6evm_legacy_init_irq, | ||
287 | .init_machine = ape6evm_add_standard_devices, | 306 | .init_machine = ape6evm_add_standard_devices, |
288 | .init_late = shmobile_init_late, | 307 | .init_late = shmobile_init_late, |
289 | .dt_compat = ape6evm_boards_compat_dt, | 308 | .dt_compat = ape6evm_boards_compat_dt, |
309 | .init_time = ape6evm_legacy_init_time, | ||
290 | MACHINE_END | 310 | MACHINE_END |
diff --git a/arch/arm/mach-shmobile/timer.c b/arch/arm/mach-shmobile/timer.c index 32ee335d2632..44d32a84b001 100644 --- a/arch/arm/mach-shmobile/timer.c +++ b/arch/arm/mach-shmobile/timer.c | |||
@@ -75,6 +75,13 @@ void __init shmobile_init_delay(void) | |||
75 | if (!max_freq) | 75 | if (!max_freq) |
76 | return; | 76 | return; |
77 | 77 | ||
78 | #ifdef CONFIG_ARCH_SHMOBILE_LEGACY | ||
79 | /* Non-multiplatform r8a73a4 SoC cannot use arch timer due | ||
80 | * to GIC being initialized from C and arch timer via DT */ | ||
81 | if (of_machine_is_compatible("renesas,r8a73a4")) | ||
82 | has_arch_timer = false; | ||
83 | #endif | ||
84 | |||
78 | if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER)) { | 85 | if (!has_arch_timer || !IS_ENABLED(CONFIG_ARM_ARCH_TIMER)) { |
79 | if (is_a7_a8_a9) | 86 | if (is_a7_a8_a9) |
80 | shmobile_setup_delay_hz(max_freq, 1, 3); | 87 | shmobile_setup_delay_hz(max_freq, 1, 3); |