[PATCH 1/1] irqchip/irq-imx-gpcv2: Disable cpuidle on imx8mq
Alexander Stein
alexander.stein at ew.tq-group.com
Fri Nov 5 02:55:35 PDT 2021
Due to errata e11171 sleeping CPUs cannot be woken up by IPIs.
Signed-off-by: Alexander Stein <alexander.stein at ew.tq-group.com>
---
With reference to [1] cpuidle is broken on imx8mq with no workaround
available in mainline, probably never will.
In order to avoid to avoid booting and deadlocking imx8mq systems,
disable cpuidle unconditionally.
I was wondering which driver would be the best to add this code (it
would work pretty much everywhere), but I opted for irq-imx-gpcv2 as
this is used imx8mq (and imx7d) only.
I also added '#ifdef CONFIG_CPU_IDLE' to avoid this warning when cpuidle
support is not compiled in, although cpuidle support without the psci
driver will this issue this warning. But using CONFIG_ARM_PSCI_CPUIDLE
here looks odd to me.
[1] http://lists.infradead.org/pipermail/linux-arm-kernel/2021-November/694075.html
drivers/irqchip/irq-imx-gpcv2.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv2.c
index 5b5a365dbd5e..6a2fc3c7df67 100644
--- a/drivers/irqchip/irq-imx-gpcv2.c
+++ b/drivers/irqchip/irq-imx-gpcv2.c
@@ -3,6 +3,7 @@
* Copyright (C) 2015 Freescale Semiconductor, Inc.
*/
+#include <linux/cpuidle.h>
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/slab.h>
@@ -221,6 +222,13 @@ static int __init imx_gpcv2_irqchip_init(struct device_node *node,
core_num = (unsigned long)id->data;
+#ifdef CONFIG_CPU_IDLE
+ if (of_machine_is_compatible("fsl,imx8mq")) {
+ pr_warn("Disabling cpuidle on i.MX8M due to errata e11171\n");
+ disable_cpuidle();
+ }
+#endif
+
parent_domain = irq_find_host(parent);
if (!parent_domain) {
pr_err("%pOF: unable to get parent domain\n", node);
--
2.25.1
More information about the linux-arm-kernel
mailing list