mvebu: update Linux 4.0 patches

Signed-off-by: Imre Kaloz <kaloz@openwrt.org>

SVN-Revision: 45762
v19.07.3_mercusys_ac12_duma
Imre Kaloz 9 years ago
parent 588acc2cba
commit f1ebb1dddd

@ -1,62 +0,0 @@
On Armada 38x SoCs, under heavy I/O load, the system hangs when CPU
Idle is enabled. Waiting for a solution to this issue, this patch
disables the CPU Idle support for this SoC.
As CPU Hot plug support also uses some of the CPU Idle functions it is
also affected by the same issue. This patch disables it also for the
Armada 38x SoCs.
Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Cc: <stable@vger.kernel.org> # v3.17 +
---
Hi,
In this version I removed the unneeded initialization of the ret
variable, I also fixed the warning message, and finally I added the
Tested-by from Thomas.
Gregory
arch/arm/mach-mvebu/pmsu.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
--- a/arch/arm/mach-mvebu/pmsu.c
+++ b/arch/arm/mach-mvebu/pmsu.c
@@ -415,6 +415,9 @@ static __init int armada_38x_cpuidle_ini
void __iomem *mpsoc_base;
u32 reg;
+ pr_warn("CPU idle is currently broken on Armada 38x: disabling");
+ return 0;
+
np = of_find_compatible_node(NULL, NULL,
"marvell,armada-380-coherency-fabric");
if (!np)
@@ -476,6 +479,16 @@ static int __init mvebu_v7_cpu_pm_init(v
return 0;
of_node_put(np);
+ /*
+ * Currently the CPU idle support for Armada 38x is broken, as
+ * the CPU hotplug uses some of the CPU idle functions it is
+ * broken too, so let's disable it
+ */
+ if (of_machine_is_compatible("marvell,armada380")) {
+ cpu_hotplug_disable();
+ pr_warn("CPU hotplug support is currently broken on Armada 38x: disabling");
+ }
+
if (of_machine_is_compatible("marvell,armadaxp"))
ret = armada_xp_cpuidle_init();
else if (of_machine_is_compatible("marvell,armada370"))
@@ -489,7 +502,8 @@ static int __init mvebu_v7_cpu_pm_init(v
return ret;
mvebu_v7_pmsu_enable_l2_powerdown_onidle();
- platform_device_register(&mvebu_v7_cpuidle_device);
+ if (mvebu_v7_cpuidle_device.name)
+ platform_device_register(&mvebu_v7_cpuidle_device);
cpu_pm_register_notifier(&mvebu_v7_cpu_pm_notifier);
return 0;

@ -299,7 +299,7 @@ Signed-off-by: Andrew Lunn <andrew@lunn.ch>
{
struct mvebu_gpio_chip *mvchip =
container_of(chip, struct mvebu_gpio_chip, chip);
@@ -609,6 +592,8 @@ static int mvebu_gpio_suspend(struct pla
@@ -617,6 +600,8 @@ static int mvebu_gpio_suspend(struct pla
BUG();
}
@ -308,7 +308,7 @@ Signed-off-by: Andrew Lunn <andrew@lunn.ch>
return 0;
}
@@ -652,6 +637,8 @@ static int mvebu_gpio_resume(struct plat
@@ -660,6 +645,8 @@ static int mvebu_gpio_resume(struct plat
BUG();
}
@ -317,7 +317,7 @@ Signed-off-by: Andrew Lunn <andrew@lunn.ch>
return 0;
}
@@ -663,7 +650,6 @@ static int mvebu_gpio_probe(struct platf
@@ -671,7 +658,6 @@ static int mvebu_gpio_probe(struct platf
struct resource *res;
struct irq_chip_generic *gc;
struct irq_chip_type *ct;
@ -325,7 +325,7 @@ Signed-off-by: Andrew Lunn <andrew@lunn.ch>
unsigned int ngpios;
int soc_variant;
int i, cpu, id;
@@ -693,10 +679,10 @@ static int mvebu_gpio_probe(struct platf
@@ -701,10 +687,10 @@ static int mvebu_gpio_probe(struct platf
return id;
}
@ -339,7 +339,7 @@ Signed-off-by: Andrew Lunn <andrew@lunn.ch>
mvchip->soc_variant = soc_variant;
mvchip->chip.label = dev_name(&pdev->dev);
@@ -830,7 +816,8 @@ static int mvebu_gpio_probe(struct platf
@@ -838,7 +824,8 @@ static int mvebu_gpio_probe(struct platf
goto err_generic_chip;
}

Loading…
Cancel
Save