diff options
author | Xia Kaixu <kaixu.xia@linaro.org> | 2014-09-03 09:18:12 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2014-09-04 17:39:57 -0400 |
commit | 0a2e912d296201c476fe5d7ba6ac23a66325935f (patch) | |
tree | ac87d60dde207d49e6c6da95e15c34e850603706 | |
parent | c96bfaffb783b86555e13d97e871c2adeb97d613 (diff) |
ARM: cns3xxx: fix allmodconfig panic in pci driver
The kernel panic occurs when running an allmodconfig kernel on
OMAP4460. The inicall "cns3xxx_pcie_init" does not check which
hardware it's running on and just tries to access to its specific
registers. Now call it from .init_late callback from the two
machine descriptors.
Signed-off-by: Xia Kaixu <kaixu.xia@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Cc: Anton Vorontsov <anton@enomsg.org>
Cc: Felix Fietkau <nbd@openwrt.org>
Cc: Imre Kaloz <kaloz@openwrt.org>
Cc: linaro-kernel@lists.linaro.org
Cc: linux-arm-kernel@lists.infradead.org
-rw-r--r-- | arch/arm/mach-cns3xxx/cns3420vb.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-cns3xxx/core.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-cns3xxx/core.h | 6 | ||||
-rw-r--r-- | arch/arm/mach-cns3xxx/pcie.c | 5 | ||||
-rw-r--r-- | drivers/cpufreq/Kconfig.arm | 2 |
5 files changed, 10 insertions, 5 deletions
diff --git a/arch/arm/mach-cns3xxx/cns3420vb.c b/arch/arm/mach-cns3xxx/cns3420vb.c index d863d8729edc..6428bcc77e87 100644 --- a/arch/arm/mach-cns3xxx/cns3420vb.c +++ b/arch/arm/mach-cns3xxx/cns3420vb.c | |||
@@ -250,5 +250,6 @@ MACHINE_START(CNS3420VB, "Cavium Networks CNS3420 Validation Board") | |||
250 | .init_irq = cns3xxx_init_irq, | 250 | .init_irq = cns3xxx_init_irq, |
251 | .init_time = cns3xxx_timer_init, | 251 | .init_time = cns3xxx_timer_init, |
252 | .init_machine = cns3420_init, | 252 | .init_machine = cns3420_init, |
253 | .init_late = cns3xxx_pcie_init_late, | ||
253 | .restart = cns3xxx_restart, | 254 | .restart = cns3xxx_restart, |
254 | MACHINE_END | 255 | MACHINE_END |
diff --git a/arch/arm/mach-cns3xxx/core.c b/arch/arm/mach-cns3xxx/core.c index f85449a6accd..4e9837ded96d 100644 --- a/arch/arm/mach-cns3xxx/core.c +++ b/arch/arm/mach-cns3xxx/core.c | |||
@@ -404,5 +404,6 @@ DT_MACHINE_START(CNS3XXX_DT, "Cavium Networks CNS3xxx") | |||
404 | .init_irq = cns3xxx_init_irq, | 404 | .init_irq = cns3xxx_init_irq, |
405 | .init_time = cns3xxx_timer_init, | 405 | .init_time = cns3xxx_timer_init, |
406 | .init_machine = cns3xxx_init, | 406 | .init_machine = cns3xxx_init, |
407 | .init_late = cns3xxx_pcie_init_late, | ||
407 | .restart = cns3xxx_restart, | 408 | .restart = cns3xxx_restart, |
408 | MACHINE_END | 409 | MACHINE_END |
diff --git a/arch/arm/mach-cns3xxx/core.h b/arch/arm/mach-cns3xxx/core.h index 5218b6198dc2..dc5df7f1e39f 100644 --- a/arch/arm/mach-cns3xxx/core.h +++ b/arch/arm/mach-cns3xxx/core.h | |||
@@ -21,6 +21,12 @@ void __init cns3xxx_l2x0_init(void); | |||
21 | static inline void cns3xxx_l2x0_init(void) {} | 21 | static inline void cns3xxx_l2x0_init(void) {} |
22 | #endif /* CONFIG_CACHE_L2X0 */ | 22 | #endif /* CONFIG_CACHE_L2X0 */ |
23 | 23 | ||
24 | #ifdef CONFIG_PCI | ||
25 | extern void __init cns3xxx_pcie_init_late(void); | ||
26 | #else | ||
27 | static inline void __init cns3xxx_pcie_init_late(void) {} | ||
28 | #endif | ||
29 | |||
24 | void __init cns3xxx_map_io(void); | 30 | void __init cns3xxx_map_io(void); |
25 | void __init cns3xxx_init_irq(void); | 31 | void __init cns3xxx_init_irq(void); |
26 | void cns3xxx_power_off(void); | 32 | void cns3xxx_power_off(void); |
diff --git a/arch/arm/mach-cns3xxx/pcie.c b/arch/arm/mach-cns3xxx/pcie.c index 413134c54452..70fd81ea1828 100644 --- a/arch/arm/mach-cns3xxx/pcie.c +++ b/arch/arm/mach-cns3xxx/pcie.c | |||
@@ -318,7 +318,7 @@ static int cns3xxx_pcie_abort_handler(unsigned long addr, unsigned int fsr, | |||
318 | return 0; | 318 | return 0; |
319 | } | 319 | } |
320 | 320 | ||
321 | static int __init cns3xxx_pcie_init(void) | 321 | void __init cns3xxx_pcie_init_late(void) |
322 | { | 322 | { |
323 | int i; | 323 | int i; |
324 | 324 | ||
@@ -337,7 +337,4 @@ static int __init cns3xxx_pcie_init(void) | |||
337 | } | 337 | } |
338 | 338 | ||
339 | pci_assign_unassigned_resources(); | 339 | pci_assign_unassigned_resources(); |
340 | |||
341 | return 0; | ||
342 | } | 340 | } |
343 | device_initcall(cns3xxx_pcie_init); | ||
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm index 7364a538e056..18ad141907ff 100644 --- a/drivers/cpufreq/Kconfig.arm +++ b/drivers/cpufreq/Kconfig.arm | |||
@@ -77,7 +77,7 @@ config ARM_EXYNOS5440_CPUFREQ | |||
77 | 77 | ||
78 | config ARM_EXYNOS_CPU_FREQ_BOOST_SW | 78 | config ARM_EXYNOS_CPU_FREQ_BOOST_SW |
79 | bool "EXYNOS Frequency Overclocking - Software" | 79 | bool "EXYNOS Frequency Overclocking - Software" |
80 | depends on ARM_EXYNOS_CPUFREQ | 80 | depends on ARM_EXYNOS_CPUFREQ && THERMAL |
81 | select CPU_FREQ_BOOST_SW | 81 | select CPU_FREQ_BOOST_SW |
82 | select EXYNOS_THERMAL | 82 | select EXYNOS_THERMAL |
83 | help | 83 | help |