aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2022-03-21 01:16:48 +0000
committerDaniel Golle <daniel@makrotopia.org>2022-03-21 13:11:56 +0000
commit786bf7fdaca4c75e7eba6e9aa3a8b5775fd21186 (patch)
tree926fecb2b1f6ce1e42ba7ef4c7aab8e68dfd214c /target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch
parent9470160c350d15f765c33d6c1db15d6c4709a64c (diff)
downloadupstream-786bf7fdaca4c75e7eba6e9aa3a8b5775fd21186.tar.gz
upstream-786bf7fdaca4c75e7eba6e9aa3a8b5775fd21186.tar.bz2
upstream-786bf7fdaca4c75e7eba6e9aa3a8b5775fd21186.zip
kernel: delete Linux 5.4 config and patches
As the upcoming release will be based on Linux 5.10 only, remove all kernel configuration as well as patches for Linux 5.4. There were no targets still actively using Linux 5.4. Signed-off-by: Daniel Golle <daniel@makrotopia.org> (cherry picked from commit 3a14580411adfb75f9a44eded9f41245b9e44606)
Diffstat (limited to 'target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch62
1 files changed, 0 insertions, 62 deletions
diff --git a/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch b/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch
deleted file mode 100644
index 2d55cb9401..0000000000
--- a/target/linux/layerscape/patches-5.4/802-can-0026-can-flexcan-fix-deadlock-when-using-self-wakeup.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From 59876225748221d7ebbdb9c892a2086420ddd80d Mon Sep 17 00:00:00 2001
-From: Sean Nyekjaer <sean@geanix.com>
-Date: Thu, 14 Nov 2019 19:56:28 +0800
-Subject: [PATCH] can: flexcan: fix deadlock when using self wakeup
-
-When suspending, when there is still can traffic on the interfaces the
-flexcan immediately wakes the platform again. As it should :-). But it
-throws this error msg:
-[ 3169.378661] PM: noirq suspend of devices failed
-
-On the way down to suspend the interface that throws the error message does
-call flexcan_suspend but fails to call flexcan_noirq_suspend. That means the
-flexcan_enter_stop_mode is called, but on the way out of suspend the driver
-only calls flexcan_resume and skips flexcan_noirq_resume, thus it doesn't call
-flexcan_exit_stop_mode. This leaves the flexcan in stop mode, and with the
-current driver it can't recover from this even with a soft reboot, it requires
-a hard reboot.
-
-This patch can fix deadlock when using self wakeup, it happenes to be
-able to fix another issue that frames out-of-order in first IRQ handler
-run after wakeup.
-
-In wakeup case, after system resume, frames received out-of-order,the
-problem is wakeup latency from frame reception to IRQ handler is much
-bigger than the counter overflow. This means it's impossible to sort the
-CAN frames by timestamp. The reason is that controller exits stop mode
-during noirq resume, then it can receive the frame immediately. If
-noirq reusme stage consumes much time, it will extend interrupt response
-time.
-
-Fixes: de3578c198c6 ("can: flexcan: add self wakeup support")
-Signed-off-by: Sean Nyekjaer <sean@geanix.com>
-Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
----
- drivers/net/can/flexcan.c | 9 +++++++--
- 1 file changed, 7 insertions(+), 2 deletions(-)
-
---- a/drivers/net/can/flexcan.c
-+++ b/drivers/net/can/flexcan.c
-@@ -137,8 +137,7 @@
- (FLEXCAN_ESR_ERR_BUS | FLEXCAN_ESR_ERR_STATE)
- #define FLEXCAN_ESR_ALL_INT \
- (FLEXCAN_ESR_TWRN_INT | FLEXCAN_ESR_RWRN_INT | \
-- FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT | \
-- FLEXCAN_ESR_WAK_INT)
-+ FLEXCAN_ESR_BOFF_INT | FLEXCAN_ESR_ERR_INT)
-
- /* FLEXCAN Bit Timing register (CBT) bits */
- #define FLEXCAN_CBT_BTF BIT(31)
-@@ -1062,6 +1061,12 @@ static irqreturn_t flexcan_irq(int irq,
-
- reg_esr = priv->read(&regs->esr);
-
-+ /* ACK wakeup interrupt */
-+ if (reg_esr & FLEXCAN_ESR_WAK_INT) {
-+ handled = IRQ_HANDLED;
-+ priv->write(reg_esr & FLEXCAN_ESR_WAK_INT, &regs->esr);
-+ }
-+
- /* ACK all bus error and state change IRQ sources */
- if (reg_esr & FLEXCAN_ESR_ALL_INT) {
- handled = IRQ_HANDLED;