From: Greg Kroah-Hartman Date: Mon, 27 Aug 2012 18:09:26 +0000 (-0700) Subject: 3.4-stable patches X-Git-Tag: v3.5.4~58 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=05377695b4f217f3adc1e5f90c2546d0b7c8107f;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: arm-imx6-spin-the-cpu-until-hardware-takes-it-down.patch arm-imx-select-cpu_freq_table-when-needed.patch --- diff --git a/queue-3.4/arm-imx-select-cpu_freq_table-when-needed.patch b/queue-3.4/arm-imx-select-cpu_freq_table-when-needed.patch new file mode 100644 index 00000000000..0f55a8110a7 --- /dev/null +++ b/queue-3.4/arm-imx-select-cpu_freq_table-when-needed.patch @@ -0,0 +1,46 @@ +From f637c4c9405e21f44cf0045eaf77eddd3a79ca5a Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Thu, 16 Aug 2012 10:40:40 +0000 +Subject: ARM: imx: select CPU_FREQ_TABLE when needed + +From: Arnd Bergmann + +commit f637c4c9405e21f44cf0045eaf77eddd3a79ca5a upstream. + +The i.MX cpufreq implementation uses the CPU_FREQ_TABLE helpers, +so it needs to select that code to be built. This problem has +apparently existed since the i.MX cpufreq code was first merged +in v2.6.37. + +Building IMX without CPU_FREQ_TABLE results in: + +arch/arm/plat-mxc/built-in.o: In function `mxc_cpufreq_exit': +arch/arm/plat-mxc/cpufreq.c:173: undefined reference to `cpufreq_frequency_table_put_attr' +arch/arm/plat-mxc/built-in.o: In function `mxc_set_target': +arch/arm/plat-mxc/cpufreq.c:84: undefined reference to `cpufreq_frequency_table_target' +arch/arm/plat-mxc/built-in.o: In function `mxc_verify_speed': +arch/arm/plat-mxc/cpufreq.c:65: undefined reference to `cpufreq_frequency_table_verify' +arch/arm/plat-mxc/built-in.o: In function `mxc_cpufreq_init': +arch/arm/plat-mxc/cpufreq.c:154: undefined reference to `cpufreq_frequency_table_cpuinfo' +arch/arm/plat-mxc/cpufreq.c:162: undefined reference to `cpufreq_frequency_table_get_attr' + +Signed-off-by: Arnd Bergmann +Acked-by: Shawn Guo +Cc: Sascha Hauer +Cc: Yong Shen +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/Kconfig ++++ b/arch/arm/Kconfig +@@ -2113,6 +2113,7 @@ source "drivers/cpufreq/Kconfig" + config CPU_FREQ_IMX + tristate "CPUfreq driver for i.MX CPUs" + depends on ARCH_MXC && CPU_FREQ ++ select CPU_FREQ_TABLE + help + This enables the CPUfreq driver for i.MX CPUs. + diff --git a/queue-3.4/arm-imx6-spin-the-cpu-until-hardware-takes-it-down.patch b/queue-3.4/arm-imx6-spin-the-cpu-until-hardware-takes-it-down.patch new file mode 100644 index 00000000000..856c372a341 --- /dev/null +++ b/queue-3.4/arm-imx6-spin-the-cpu-until-hardware-takes-it-down.patch @@ -0,0 +1,68 @@ +From c944b0b9354ea06ffb0c8a7178949f1185f9f499 Mon Sep 17 00:00:00 2001 +From: Shawn Guo +Date: Sat, 18 Aug 2012 14:27:32 +0800 +Subject: ARM: imx6: spin the cpu until hardware takes it down + +From: Shawn Guo + +commit c944b0b9354ea06ffb0c8a7178949f1185f9f499 upstream. + +Though commit 602bf40 (ARM: imx6: exit coherency when shutting down +a cpu) improves the stability of imx6q cpu hotplug a lot, there are +still hangs seen with a more stressful hotplug testing. + +It's expected that once imx_enable_cpu(cpu, false) is called, the cpu +will be taken down by hardware immediately, and the code after that +will not get any chance to execute. However, this is not always the +case from the testing. The cpu could possibly be alive for a few +cycles before hardware actually takes it down. So rather than letting +cpu execute some code that could cause a hang in these cycles, let's +make the cpu spin there and wait for hardware to take it down. + +Signed-off-by: Shawn Guo +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mach-imx/hotplug.c | 23 +++-------------------- + 1 file changed, 3 insertions(+), 20 deletions(-) + +--- a/arch/arm/mach-imx/hotplug.c ++++ b/arch/arm/mach-imx/hotplug.c +@@ -42,22 +42,6 @@ static inline void cpu_enter_lowpower(vo + : "cc"); + } + +-static inline void cpu_leave_lowpower(void) +-{ +- unsigned int v; +- +- asm volatile( +- "mrc p15, 0, %0, c1, c0, 0\n" +- " orr %0, %0, %1\n" +- " mcr p15, 0, %0, c1, c0, 0\n" +- " mrc p15, 0, %0, c1, c0, 1\n" +- " orr %0, %0, %2\n" +- " mcr p15, 0, %0, c1, c0, 1\n" +- : "=&r" (v) +- : "Ir" (CR_C), "Ir" (0x40) +- : "cc"); +-} +- + /* + * platform-specific code to shutdown a CPU + * +@@ -67,11 +51,10 @@ void platform_cpu_die(unsigned int cpu) + { + cpu_enter_lowpower(); + imx_enable_cpu(cpu, false); +- cpu_do_idle(); +- cpu_leave_lowpower(); + +- /* We should never return from idle */ +- panic("cpu %d unexpectedly exit from shutdown\n", cpu); ++ /* spin here until hardware takes it down */ ++ while (1) ++ ; + } + + int platform_cpu_disable(unsigned int cpu) diff --git a/queue-3.4/series b/queue-3.4/series index 000d1c7c7d0..4d29a8cd417 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -10,3 +10,5 @@ arm-s3c24xx-add-missing-dmach_dt_prop.patch arm-s3c24xx-fix-s3c2410_dma_enqueue-parameters.patch revert-dma-imx-dma-fix-kernel-crash-due-to-missing-clock-conversion.patch xen-setup-fix-one-off-error-when-adding-for-balloon-pfns-to-the-p2m.patch +arm-imx6-spin-the-cpu-until-hardware-takes-it-down.patch +arm-imx-select-cpu_freq_table-when-needed.patch