From nobody Thu Oct 2 22:48:44 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60B9A3570C1 for ; Tue, 9 Sep 2025 17:53:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440429; cv=none; b=UJHE7cblU8nbieFfZUSWv9VGMdIUcb95hIhtnuObXbVLxU2fvKOsTRikC960T/o0H59OWJq8cyHXjO5vY9cjvZ0dm5Fwv+7hVUlDQndjgiToo7SzFn9HNTvkJqOxmL/Um0pWdEQQCFeKovV5MDFLTlhV6jS6+yGiaDe9b2IQsVY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440429; c=relaxed/simple; bh=q6vViRSlfIttEHpbJ08wgxm1w4flYky5nmoyGpoOhAU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rlBNKlW/RJbpltPWx3S+BYcOPzIsP32zRVoxPm+xJqwW0GA8WRtZvgt1G+NaShcdHXKZDFs2rLTHbjaFBpVBeX+RbXjfqRsq0tTpw3s9bK+Y2E1G3aF53PqGSxybDvdx9/tbkhysaTJ2QMIo9fC6ZdBDcDekZMY1zUFYtuzEEmc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1uw2XI-0006iQ-MD for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:44 +0200 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uw2XI-000SbY-0N for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:44 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id C5AD346A3D3 for ; Tue, 09 Sep 2025 17:53:43 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 1144046A39A; Tue, 09 Sep 2025 17:53:41 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 0f4e6dba; Tue, 9 Sep 2025 17:53:40 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 09 Sep 2025 19:53:17 +0200 Subject: [PATCH v2 1/7] can: m_can: m_can_plat_remove(): add missing pm_runtime_disable() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250909-m_can-fix-state-handling-v2-1-af9fa240b68a@pengutronix.de> References: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> In-Reply-To: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Varka Bhadram , Wu Bo , Markus Schneider-Pargmann , Philipp Zabel Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Marc Kleine-Budde X-Mailer: b4 0.15-dev-e44bb X-Developer-Signature: v=1; a=openpgp-sha256; l=1296; i=mkl@pengutronix.de; h=from:subject:message-id; bh=q6vViRSlfIttEHpbJ08wgxm1w4flYky5nmoyGpoOhAU=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBowGmXDvcNXC5qdFf2OlBFiXUB6oTAT0G/nwHcY LC9iKDIldGJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaMBplwAKCRAMdGXf+ZCR nPTdCACnG1IjsFiQIdV0zdCDbNWqUqySz9MNyLUlkMpVuO2Lti6uJtK3VKxTvAQ0oTLowh5whfk n41Yh6l93wWe/br5f/WJfwf/aTWeBZijF8Rqpjiu69tV65bK/GmMVNmxHPGw2MZFeqIX1kQapFP Iq+ABKs9U8edQnxn+BG5JoadSKacu6q/p/J03j/c4BHTKYrPJTQVqZwHpUhcELyCRaFNbA43QnU gKFVOuMJmCyzbN396jZSPkyQu6oeU6a8voyoLOlh1xYqT7zzpyry15/8tsr0S6X0q1/lAIr5w3c H0TJ7BPNp4iAbl5fmFFNXfUK5+Mr2BvNiRc0YxO2DgcVuX9i X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Commit 227619c3ff7c ("can: m_can: move runtime PM enable/disable to m_can_platform") moved the PM runtime enable from the m_can core driver into the m_can_platform. That patch forgot to move the pm_runtime_disable() to m_can_plat_remove(), so that unloading the m_can_platform driver causes an "Unbalanced pm_runtime_enable!" error message. Add the missing pm_runtime_disable() to m_can_plat_remove() to fix the problem. Cc: Patrik Flykt Fixes: 227619c3ff7c ("can: m_can: move runtime PM enable/disable to m_can_p= latform") Reviewed-by: Markus Schneider-Pargmann Signed-off-by: Marc Kleine-Budde --- drivers/net/can/m_can/m_can_platform.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/can/m_can/m_can_platform.c b/drivers/net/can/m_can= /m_can_platform.c index b832566efda0..057eaa7b8b4b 100644 --- a/drivers/net/can/m_can/m_can_platform.c +++ b/drivers/net/can/m_can/m_can_platform.c @@ -180,7 +180,7 @@ static void m_can_plat_remove(struct platform_device *p= dev) struct m_can_classdev *mcan_class =3D &priv->cdev; =20 m_can_class_unregister(mcan_class); - + pm_runtime_disable(mcan_class->dev); m_can_class_free_dev(mcan_class->net); } =20 --=20 2.51.0 From nobody Thu Oct 2 22:48:44 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2523935AACC for ; Tue, 9 Sep 2025 17:53:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440430; cv=none; b=XY86/9aKJouvNNrjLGxTFEn59sf8ByvMvZk1IYkk/ciraMEJRNrJ4mDxGRVL03H2pvgxirkcr1ARyIKRNoO+3UX4DYSCyZrFLZzAVLIr2MGk4rDo/bs2U7nb/wakNf20Swd0S3zEyz/sLBFd5niZ+pNgdKYDDjsNeZumymC3CYs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440430; c=relaxed/simple; bh=0byzwlFpX3uUliiyBljE0GoBt/DbYN9wqAMAHOwqTqs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b8Ikv/1yZmuASkuvxQfjtnGcnEwAHioFVkZ/627FM1GY58KXclydwjMuNrMvZIP92TKtpoZcfKLw5/wCejYfRDcoCjYGJxX+KNyXu65SFnZx+vtNeCOUt8vUx+lxKlZ3a7feywrQ+Mnrr6LIXTUXX7/gsH8vgu0LIefU8DKXUNo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1uw2XI-0006is-WE for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:45 +0200 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uw2XI-000Sbj-0q for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:44 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id E6E8C46A3D5 for ; Tue, 09 Sep 2025 17:53:43 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 2C50246A39B; Tue, 09 Sep 2025 17:53:41 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 3481596a; Tue, 9 Sep 2025 17:53:40 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 09 Sep 2025 19:53:18 +0200 Subject: [PATCH v2 2/7] can: m_can: only handle active interrupts Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250909-m_can-fix-state-handling-v2-2-af9fa240b68a@pengutronix.de> References: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> In-Reply-To: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Varka Bhadram , Wu Bo , Markus Schneider-Pargmann , Philipp Zabel Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Marc Kleine-Budde X-Mailer: b4 0.15-dev-e44bb X-Developer-Signature: v=1; a=openpgp-sha256; l=1416; i=mkl@pengutronix.de; h=from:subject:message-id; bh=0byzwlFpX3uUliiyBljE0GoBt/DbYN9wqAMAHOwqTqs=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBowGmZORUk+vP0SVB8a7q64+4PJf/xTopuCAsch 7WBJqhsNbOJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaMBpmQAKCRAMdGXf+ZCR nHg2CACFM6/VGR/XRQV48GV6MRSokJwWaGFtgQxsy+hyV2cyy0+4LzFgiWvAilTY1FnT0kyKav3 V2/JY5vdf2185Yj43+3KUpAeXcrkyybHEMhxIgv0tAwejkOdCnGcxWuEgqGlwJoKfti0cfoUU6e xc1vud4T1XSZNrnS7QdaG2XZX1LGtwBK3OJJoVhLVgh5LrIe6KVCaQhpqKvl/noEk6ej7rz+AkB qedYS2zomGWikSUCcHfOmT0X8P559FD2REPAm58q7i4maqL3vX35a8/dlGuZUFjWWgG1nfIcGEI wdDB8Nov3O/ar+pP4vuLNQKuKd9LQqXoImQEJC5dIEWQ5PvZ X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org The M_CAN IP core has an Interrupt Register (IR) and an Interrupt Enable (IE) register. An interrupt is triggered if at least 1 bit is set in the bitwise and of IR and IE. Depending on the configuration not all interrupts are enabled in the IE register. However the m_can_rx_handler() IRQ handler looks at all interrupts not just the enabled ones. This may lead to handling of not activated interrupts. Fix the problem and mask the irqstatus (IR register) with the active_interrupts (cached value of IE register). Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support") Signed-off-by: Marc Kleine-Budde --- drivers/net/can/m_can/m_can.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index fe74dbd2c966..16b38e6c3985 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1057,6 +1057,7 @@ static int m_can_poll(struct napi_struct *napi, int q= uota) u32 irqstatus; =20 irqstatus =3D cdev->irqstatus | m_can_read(cdev, M_CAN_IR); + irqstatus &=3D cdev->active_interrupts; =20 work_done =3D m_can_rx_handler(dev, quota, irqstatus); =20 @@ -1243,6 +1244,8 @@ static int m_can_interrupt_handler(struct m_can_class= dev *cdev) } =20 m_can_coalescing_update(cdev, ir); + + ir &=3D cdev->active_interrupts; if (!ir) return IRQ_NONE; =20 --=20 2.51.0 From nobody Thu Oct 2 22:48:44 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C911D35AAC5 for ; Tue, 9 Sep 2025 17:53:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440431; cv=none; b=KxDWO1A1gSPL6gS/tAaiF8tytGamrTF4qXiD1ug4kpV6rviGaLBzlicpWOyPWdp5YUpeWcNHBnIEQyl5yA2+e7q1C6bkUhSFcGuFXS499axQJLrZGyuyrVrezhRmn24dSsVWPL5T7j+K5t7R+EQxpgxfGGtiAjXP+nEcslKgeMU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440431; c=relaxed/simple; bh=51tr54JnhZakrnoQo/rT0O+jc3YyZDKaoBKsy55zljc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aMPmTB4/1IvkuvKgNDOkibYSky3PuIArDmRmzOCgIbTUzCTNXsD0Zws/OgToHvSdtisWgvSlhhFsLvsMmvhvxEdV0ftqDBq35jwBa8LcV2mBbX5WKeLQ7BKCPzOQOGfoa54eBGu2mVZIZjuyXIYDzra5I5L4Ha3dOz+rCn3tClI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1uw2XI-0006ir-Uc for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:44 +0200 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uw2XI-000Sbk-0q for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:44 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id EEBE246A3D6 for ; Tue, 09 Sep 2025 17:53:43 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 4B5BD46A39D; Tue, 09 Sep 2025 17:53:41 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 2ce24846; Tue, 9 Sep 2025 17:53:40 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 09 Sep 2025 19:53:19 +0200 Subject: [PATCH v2 3/7] can: m_can: m_can_handle_state_errors(): fix CAN state transition to Error Active Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250909-m_can-fix-state-handling-v2-3-af9fa240b68a@pengutronix.de> References: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> In-Reply-To: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Varka Bhadram , Wu Bo , Markus Schneider-Pargmann , Philipp Zabel Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Marc Kleine-Budde X-Mailer: b4 0.15-dev-e44bb X-Developer-Signature: v=1; a=openpgp-sha256; l=3774; i=mkl@pengutronix.de; h=from:subject:message-id; bh=51tr54JnhZakrnoQo/rT0O+jc3YyZDKaoBKsy55zljc=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBowGmbq9JfvnPrkj4xY32meikqqA8cz29Dpo5b3 NbTPAhd3HiJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaMBpmwAKCRAMdGXf+ZCR nIfrB/9Vp+XgN8RRlTxXeO2f0OJSZzTQJITFK/q9XVUEHqnVTUSudtRUhiCfrFSdnJ+tImmLKrz toKTBrYpmyAUHGiMAwt65f/CywS4qAL9vDw/D3QddbY4tVAR4ZpjxIuxLo1ECa1S6VGQrU0Y9B0 u9edz5VUQa9vN3pKU8GO+lihrkZuECJnU4YmylbVtAErLUwcU6CbY8Hfy4igDhtzzSQfG6af5NN Tjm1NWI38y+1rEKXB2PmJzFlPpx2P4JZvAayUNSU8jXsoz93Hm7W7w2/81Glrr4KvZjc9ohIBfd g7dGpfheJeTChAwL7AhE9zYRDX6TejIDJulA6L1QfAeVnpUu X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org The CAN Error State is determined by the receive and transmit error counters. The CAN error counters decrease when reception/transmission is successful, so that a status transition back to the Error Active status is possible. This transition is not handled by m_can_handle_state_errors(). Add the missing detection of the Error Active state to m_can_handle_state_errors() and extend the handling of this state in m_can_handle_state_change(). Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support") Fixes: cd0d83eab2e0 ("can: m_can: m_can_handle_state_change(): fix state ch= ange") Signed-off-by: Marc Kleine-Budde Reviewed-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 55 ++++++++++++++++++++++++++-------------= ---- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 16b38e6c3985..3edf01b098a4 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -812,6 +812,9 @@ static int m_can_handle_state_change(struct net_device = *dev, u32 timestamp =3D 0; =20 switch (new_state) { + case CAN_STATE_ERROR_ACTIVE: + cdev->can.state =3D CAN_STATE_ERROR_ACTIVE; + break; case CAN_STATE_ERROR_WARNING: /* error warning state */ cdev->can.can_stats.error_warning++; @@ -841,6 +844,12 @@ static int m_can_handle_state_change(struct net_device= *dev, __m_can_get_berr_counter(dev, &bec); =20 switch (new_state) { + case CAN_STATE_ERROR_ACTIVE: + cf->can_id |=3D CAN_ERR_CRTL | CAN_ERR_CNT; + cf->data[1] =3D CAN_ERR_CRTL_ACTIVE; + cf->data[6] =3D bec.txerr; + cf->data[7] =3D bec.rxerr; + break; case CAN_STATE_ERROR_WARNING: /* error warning state */ cf->can_id |=3D CAN_ERR_CRTL | CAN_ERR_CNT; @@ -877,30 +886,33 @@ static int m_can_handle_state_change(struct net_devic= e *dev, return 1; } =20 -static int m_can_handle_state_errors(struct net_device *dev, u32 psr) +static enum can_state +m_can_state_get_by_psr(struct m_can_classdev *cdev) +{ + u32 reg_psr; + + reg_psr =3D m_can_read(cdev, M_CAN_PSR); + + if (reg_psr & PSR_BO) + return CAN_STATE_BUS_OFF; + if (reg_psr & PSR_EP) + return CAN_STATE_ERROR_PASSIVE; + if (reg_psr & PSR_EW) + return CAN_STATE_ERROR_WARNING; + + return CAN_STATE_ERROR_ACTIVE; +} + +static int m_can_handle_state_errors(struct net_device *dev) { struct m_can_classdev *cdev =3D netdev_priv(dev); - int work_done =3D 0; + enum can_state new_state; =20 - if (psr & PSR_EW && cdev->can.state !=3D CAN_STATE_ERROR_WARNING) { - netdev_dbg(dev, "entered error warning state\n"); - work_done +=3D m_can_handle_state_change(dev, - CAN_STATE_ERROR_WARNING); - } + new_state =3D m_can_state_get_by_psr(cdev); + if (new_state =3D=3D cdev->can.state) + return 0; =20 - if (psr & PSR_EP && cdev->can.state !=3D CAN_STATE_ERROR_PASSIVE) { - netdev_dbg(dev, "entered error passive state\n"); - work_done +=3D m_can_handle_state_change(dev, - CAN_STATE_ERROR_PASSIVE); - } - - if (psr & PSR_BO && cdev->can.state !=3D CAN_STATE_BUS_OFF) { - netdev_dbg(dev, "entered error bus off state\n"); - work_done +=3D m_can_handle_state_change(dev, - CAN_STATE_BUS_OFF); - } - - return work_done; + return m_can_handle_state_change(dev, new_state); } =20 static void m_can_handle_other_err(struct net_device *dev, u32 irqstatus) @@ -1031,8 +1043,7 @@ static int m_can_rx_handler(struct net_device *dev, i= nt quota, u32 irqstatus) } =20 if (irqstatus & IR_ERR_STATE) - work_done +=3D m_can_handle_state_errors(dev, - m_can_read(cdev, M_CAN_PSR)); + work_done +=3D m_can_handle_state_errors(dev); =20 if (irqstatus & IR_ERR_BUS_30X) work_done +=3D m_can_handle_bus_errors(dev, irqstatus, --=20 2.51.0 From nobody Thu Oct 2 22:48:44 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2515A35AACA for ; Tue, 9 Sep 2025 17:53:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440429; cv=none; b=guvZv82z660Sp8nb4Bw6UUZkOEyuBqlHC19wRneOlmktNmWBl5HD/ZLZr8Wh6jZm20Oke7Cz/eDdTpbLTFigHtTZ4SKtS/mhO14On9WZ+of3bGILg8/vbf3OS0OSr8FMNNmtoUMWgKeMoLSGoL28jOYThv4xr6Z3PmwnC5BGc30= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440429; c=relaxed/simple; bh=ntfi2QKEOJsC2qe0j2SXYrKvCvXrdcla5ZixxYLHtCk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VWtDuYt82gukYE1P0hcefaV9di3OOR/ba08Wu6PzEW6NYvJeQV9PlN2dt+ZS92YDn96ObNNWVoTFnLOKzetoI1DY2QKd/1Yjnpr36zlbFJdD8m4+4Dsgi7NJmz78Hb5YQ9tApXpWgMl1Djuo1p2l4vYiy21gUL9VjMRmnFbHrkA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1uw2XJ-0006j6-50 for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:45 +0200 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uw2XI-000Sbw-1U for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:44 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 2279646A3D9 for ; Tue, 09 Sep 2025 17:53:44 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 6458046A39F; Tue, 09 Sep 2025 17:53:41 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 47a02140; Tue, 9 Sep 2025 17:53:40 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 09 Sep 2025 19:53:20 +0200 Subject: [PATCH v2 4/7] can: m_can: m_can_chip_config(): bring up interface in correct state Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250909-m_can-fix-state-handling-v2-4-af9fa240b68a@pengutronix.de> References: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> In-Reply-To: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Varka Bhadram , Wu Bo , Markus Schneider-Pargmann , Philipp Zabel Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Marc Kleine-Budde X-Mailer: b4 0.15-dev-e44bb X-Developer-Signature: v=1; a=openpgp-sha256; l=1262; i=mkl@pengutronix.de; h=from:subject:message-id; bh=ntfi2QKEOJsC2qe0j2SXYrKvCvXrdcla5ZixxYLHtCk=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBowGmcRC89fQtXDrlgDRCgx8MSXcF2dzuS/ApuJ n3MjrRjuJ+JATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaMBpnAAKCRAMdGXf+ZCR nLVDCACHgC4i1jr4+NNrxU8F7d+zc7GIEsRhw6AFWOGCUzKwFccE+svVKNG/kYNzXYNmN2JHnoX J3e19JeXfGIzDwnPRmKy/fb1MXJfS/JYCMW+CZ6VAVFPIsFzIdAfaY2wifyS9o57Xtza41JRXTP HIZ5SBtGziDAk2DuVwP1Dpw5GQgOESbb5QwYsGgXwYhb2j4UK6MY9QPf8tkDeXoeO0Y41pR6gnA kniqw68XZmJwzbFF3ISTMAR/sJvtjZiz5j0x39kNHd5ErAnMg8vLr3ix5+jjtQSGsowguuAZkHl jHukizB0A0RGWie7Juwf6Vcp1KVKZiHpH4Tmaze9UejhF/cr X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org In some SoCs (observed on the STM32MP15) the M_CAN IP core keeps the CAN state and CAN error counters over an internal reset cycle. An external reset is not always possible, due to the shared reset with the other CAN core. This caused the core not always be in Error Active state when bringing up the controller. Instead of always setting the CAN state to Error Active in m_can_chip_config(), fix this by reading and decoding the Protocol Status Regitser (PSR) and set the CAN state accordingly. Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support") Signed-off-by: Marc Kleine-Budde Reviewed-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 3edf01b098a4..efd9c23edd4a 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1620,7 +1620,7 @@ static int m_can_start(struct net_device *dev) netdev_queue_set_dql_min_limit(netdev_get_tx_queue(cdev->net, 0), cdev->tx_max_coalesced_frames); =20 - cdev->can.state =3D CAN_STATE_ERROR_ACTIVE; + cdev->can.state =3D m_can_state_get_by_psr(cdev); =20 m_can_enable_all_interrupts(cdev); =20 --=20 2.51.0 From nobody Thu Oct 2 22:48:44 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9EDDE35CEAC for ; Tue, 9 Sep 2025 17:53:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440431; cv=none; b=aVUFCtCVfNQzJpTpKzZxOYZUI6FePxK0APVhGMr/avdOC/FLQX2d80XWA53lwnFfEw3aH6RD9HQS0pyJW3NhIPLhxk3OqehA+R5+p+4zu/l4eypJX/o55BNsN983QdeLuoj5+xtOtKStzCF9UygxQGNiWh9j+xwwk+BBGr7HbuY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440431; c=relaxed/simple; bh=0DCy0h2XRBbTxTpmizsFrnggyynTrIDS9ENByKnkhQc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RouxUTSnq3wrefxAUqlMrNAQDTB0iee5ZuWSHgqP3hnlWab1vfjCqTpDqXwo7DkHXNY79yGZcIFLvXORmoZxP/at3Xj2Fgj0xFBW3SduJgI0ZxJgjtDKwU+XZX3HXl9TbmzIzzOSeW/DMCP2YoQrpdDexbu5NCbyvxRk6t1/8Ps= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1uw2XL-0006rz-UM for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:47 +0200 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uw2XL-000SeH-03 for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:47 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id A854F46A3FB for ; Tue, 09 Sep 2025 17:53:46 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 852A746A3A2; Tue, 09 Sep 2025 17:53:41 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id e81b249f; Tue, 9 Sep 2025 17:53:40 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 09 Sep 2025 19:53:21 +0200 Subject: [PATCH v2 5/7] can: m_can: fix CAN state in system PM Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250909-m_can-fix-state-handling-v2-5-af9fa240b68a@pengutronix.de> References: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> In-Reply-To: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Varka Bhadram , Wu Bo , Markus Schneider-Pargmann , Philipp Zabel Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Marc Kleine-Budde X-Mailer: b4 0.15-dev-e44bb X-Developer-Signature: v=1; a=openpgp-sha256; l=1835; i=mkl@pengutronix.de; h=from:subject:message-id; bh=0DCy0h2XRBbTxTpmizsFrnggyynTrIDS9ENByKnkhQc=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBowGmeZlgR7KN2oD0diDYNYqE5veMQTxATWSTD3 8HoRHK5/oeJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaMBpngAKCRAMdGXf+ZCR nCmPB/4tgxdJETO0GHCmVoxsvOpebWsASoTyt+MWoVMEE2yZgMO29eOKFKiAugVscoB7fLFj0Vy LUoNyykf2snOeK84zg0CZIzR4xIEZJ3KSwI6RKQU0X2984THXyuqTSxEbp0UCDS2edmtb+YTJ0O F8ufBxKHqbil+aN9GMv8Cm3Yw9lCGNCaUt0ojQrsDLUPfelP3HMQd0YUvfqHUFX1Lhvn+Ex9OHJ VyU21Zag/ErrAOFBgLlrWQ/i5wGJ7T7aHWCJh8+TPvyRPYMMVLiAGwLoJ1M6SUnvbNEwCyW8Zr8 fdzQOYdaQZ63jRHHrPGydRCmFb9KAkjjvi3T1mbsvNtpQPGj X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org A suspend/resume cycle on a down interface results in the interface coming up in Error Active state. A suspend/resume cycle on an Up interface will always result in Error Active state, regardless of the actual CAN state. During suspend, only set running interfaces to CAN_STATE_SLEEPING. During resume only touch the CAN state of running interfaces. For wakeup sources, set the CAN state depending on the Protocol Status Regitser (PSR), for non wakeup source interfaces m_can_start() will do the same. Fixes: e0d1f4816f2a ("can: m_can: add Bosch M_CAN controller support") Reviewed-by: Markus Schneider-Pargmann Signed-off-by: Marc Kleine-Budde --- drivers/net/can/m_can/m_can.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index efd9c23edd4a..d44e348f2417 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -2508,12 +2508,11 @@ int m_can_class_suspend(struct device *dev) } =20 m_can_clk_stop(cdev); + cdev->can.state =3D CAN_STATE_SLEEPING; } =20 pinctrl_pm_select_sleep_state(dev); =20 - cdev->can.state =3D CAN_STATE_SLEEPING; - return ret; } EXPORT_SYMBOL_GPL(m_can_class_suspend); @@ -2526,8 +2525,6 @@ int m_can_class_resume(struct device *dev) =20 pinctrl_pm_select_default_state(dev); =20 - cdev->can.state =3D CAN_STATE_ERROR_ACTIVE; - if (netif_running(ndev)) { ret =3D m_can_clk_start(cdev); if (ret) @@ -2545,6 +2542,8 @@ int m_can_class_resume(struct device *dev) if (cdev->ops->init) ret =3D cdev->ops->init(cdev); =20 + cdev->can.state =3D m_can_state_get_by_psr(cdev); + m_can_write(cdev, M_CAN_IE, cdev->active_interrupts); } else { ret =3D m_can_start(ndev); --=20 2.51.0 From nobody Thu Oct 2 22:48:44 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A1EE835CED2 for ; Tue, 9 Sep 2025 17:53:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440432; cv=none; b=D8LVgTxCbWT4k9581mHBKyJ2l2lr9OPgd54Yc3E+66WxbBLBHC8sD66xZBcDnHmlsy9nD2kVuekAtKaPi45/rzCX69zyUkYlo0hR7+/UITrCYYtlIAbMGgLDnxmVAC6tatQCqxCN+dt1E2J+NPvrpsdYdEi24SN4OEcU5BqhbOk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440432; c=relaxed/simple; bh=ko64cZOLzYITscm15DfY3Ixy65JrBPp9GIDXs4/Gvns=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hK+4EwOzClA7ZTkJjBXXKDtV9wy/EF/La6kElpgHniRpvzm1MEaQ5ICUlCnf77LVdTkosOHyFVLJPaHw5Y9bOm9DqUw2pgVG07R4aKOg4oSy6wA/kGq+XQQfP1BO3AVAvsTB4Y6ZvwO4nqdu0sg+oBrbRGCcZPgzV9LA4rB57qI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1uw2XM-0006s8-3S for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:48 +0200 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uw2XL-000SeM-0F for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:47 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id BDD2546A3FD for ; Tue, 09 Sep 2025 17:53:46 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id 99A0146A3A5; Tue, 09 Sep 2025 17:53:41 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id dc66c1a5; Tue, 9 Sep 2025 17:53:40 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 09 Sep 2025 19:53:22 +0200 Subject: [PATCH v2 6/7] can: m_can: m_can_get_berr_counter(): don't wake up controller if interface is down Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250909-m_can-fix-state-handling-v2-6-af9fa240b68a@pengutronix.de> References: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> In-Reply-To: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Varka Bhadram , Wu Bo , Markus Schneider-Pargmann , Philipp Zabel Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Marc Kleine-Budde X-Mailer: b4 0.15-dev-e44bb X-Developer-Signature: v=1; a=openpgp-sha256; l=892; i=mkl@pengutronix.de; h=from:subject:message-id; bh=ko64cZOLzYITscm15DfY3Ixy65JrBPp9GIDXs4/Gvns=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBowGmg/eQnGKIR7XS+zOvvbAM9ewU01ERbDaJvm GAKPTqj2KaJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaMBpoAAKCRAMdGXf+ZCR nJWaCACoJVbnMAqYbEb2rre1Jkg9jtkal9sPN1FbF3Xk1lKCwsgbsXUJ4RHRpswAJhoZPyN5rct 2Xjv/F1jLv1WPoXiy7czmK3zWqBv2B1a8Am0ddSX2FKBSlbFwslO9cQoe6MwTduxFw8f6qapyb8 rOO77psS88wv33XlCYqVsd5+TlAN0/aHx/l8KeUyw3tGse+jAd0TpmmK4d5sIubDemNLa5c82g3 Yyc3pn78R26kVEfuxcY8bYPA5/ebGdI2jCCdE6fHibEvP/R3V+hDd/PL2N1vKWpurey7eikuOKH 9JFgxHWJUrHSVdLEeh0uL3FGoe+hMMhTlWqxU9fTPJabtUNy X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org If the interface is down, the CAN controller might be powered down, the clock disabled, and/or it's external reset asserted. Don't wake up the controller to read the CAN bus error counters, if the interface is down. Signed-off-by: Marc Kleine-Budde --- drivers/net/can/m_can/m_can.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index d44e348f2417..9528af8500af 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -790,6 +790,10 @@ static int m_can_get_berr_counter(const struct net_dev= ice *dev, struct m_can_classdev *cdev =3D netdev_priv(dev); int err; =20 + /* Avoid waking up the controller if the interface is down */ + if (!(dev->flags & IFF_UP)) + return 0; + err =3D m_can_clk_start(cdev); if (err) return err; --=20 2.51.0 From nobody Thu Oct 2 22:48:44 2025 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A049535CECF for ; Tue, 9 Sep 2025 17:53:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440431; cv=none; b=hZrpVf7+cl8vFIgqNPMv+Xx3ocH26V/x3PV+A2RSOoiFe9VsIbWpt5AvU6+fI/bdlOi+VkwRxoExg/BTfIcqxjR9obGDTyWmNbU4W/wxJQQhOdSpZB0vQNihspJFv2znGiV+UjRefjb0QwDFn6C21Mrc/AjYkOg36o5AuNPeFi0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757440431; c=relaxed/simple; bh=37cJ0VRVY4LkRBZrQ1aDkaxTmIRzfMkMlfj/4/5OSR4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DDYt1i/gD+geOE4f/IpR1h8ozHGOI3b3HQ4h/sHw7ADZIRqXTR+bMBFkiaEvXecthMdwovJha147w0BqSsGr/gP1srAEyyzG3qHWHLmFRKjDlhtHAisNko4OnKseQzjzq273IOT/YDsOJiEwS0hPQmzp3/5m8idnsXPbuGoVNSM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1uw2XM-0006sB-3T for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:48 +0200 Received: from moin.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::7b] helo=bjornoya.blackshift.org) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uw2XL-000SeL-0J for linux-kernel@vger.kernel.org; Tue, 09 Sep 2025 19:53:47 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id B72F446A3FC for ; Tue, 09 Sep 2025 17:53:46 +0000 (UTC) Received: from hardanger.blackshift.org (unknown [172.20.34.65]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by bjornoya.blackshift.org (Postfix) with ESMTPS id D1E5B46A3AA; Tue, 09 Sep 2025 17:53:41 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id eeee500c; Tue, 9 Sep 2025 17:53:40 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 09 Sep 2025 19:53:23 +0200 Subject: [PATCH v2 7/7] can: m_can: add optional support for reset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250909-m_can-fix-state-handling-v2-7-af9fa240b68a@pengutronix.de> References: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> In-Reply-To: <20250909-m_can-fix-state-handling-v2-0-af9fa240b68a@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Varka Bhadram , Wu Bo , Markus Schneider-Pargmann , Philipp Zabel Cc: linux-can@vger.kernel.org, linux-kernel@vger.kernel.org, kernel@pengutronix.de, Marc Kleine-Budde X-Mailer: b4 0.15-dev-e44bb X-Developer-Signature: v=1; a=openpgp-sha256; l=3640; i=mkl@pengutronix.de; h=from:subject:message-id; bh=37cJ0VRVY4LkRBZrQ1aDkaxTmIRzfMkMlfj/4/5OSR4=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBowGmiaq5cEgfZlHcB6TyW+RbFlMxuSLYs0l1DH GHm9JQuIB6JATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaMBpogAKCRAMdGXf+ZCR nIpwCACtqZtqehRZQFlwFDfxfwBYgVewR9U7Zk1iN+wTLEqOOhOkvjBGwpe9aJq3ZzFGhkZyvG/ U11bg2ZNvTDEMEkz7rvg72ByzPg/uP+cDrepHvFAU8uqRwJvrM/cs7vCpVKByyVJEI4Dm6oRT8w KsFUyk3W9g1JxOU+c+R0To0X9tA045YqyHbFdMNTFMVrYHYslLDpDMh0qwyMacX0Pgt/qEr8CfP 3EDFhO6DY3Iuas917SPv/fjI/SPsxTqTclFiIjWMgaJ7i9YtLVsdAZlziHzm7dtcSEGJhEsL5LB xnT+a29K46xpipa+l+AMGG+ailPwrtqq+prL1/xwu+ffex5U X-Developer-Key: i=mkl@pengutronix.de; a=openpgp; fpr=C1400BA0B3989E6FBC7D5B5C2B5EE211C58AEA54 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mkl@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org In some SoCs (observed on the STM32MP15) the M_CAN IP core keeps the CAN state and CAN error counters over an internal reset cycle. The STM32MP15 SoC provides an external reset, which is shared between both M_CAN cores. Add support for an optional external reset. Take care of shared resets, de-assert reset during the probe phase in m_can_class_register() and while the interface is up, assert the reset otherwise. Reviewed-by: Philipp Zabel Signed-off-by: Marc Kleine-Budde --- drivers/net/can/m_can/m_can.c | 26 +++++++++++++++++++++++--- drivers/net/can/m_can/m_can.h | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 9528af8500af..93085bf1c267 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #include "m_can.h" =20 @@ -1834,6 +1835,7 @@ static int m_can_close(struct net_device *dev) =20 close_candev(dev); =20 + reset_control_assert(cdev->rst); m_can_clk_stop(cdev); phy_power_off(cdev->transceiver); =20 @@ -2076,11 +2078,15 @@ static int m_can_open(struct net_device *dev) if (err) goto out_phy_power_off; =20 + err =3D reset_control_deassert(cdev->rst); + if (err) + goto exit_disable_clks; + /* open the can device */ err =3D open_candev(dev); if (err) { netdev_err(dev, "failed to open can device\n"); - goto exit_disable_clks; + goto out_reset_control_assert; } =20 if (cdev->is_peripheral) @@ -2136,6 +2142,8 @@ static int m_can_open(struct net_device *dev) else napi_disable(&cdev->napi); close_candev(dev); +out_reset_control_assert: + reset_control_assert(cdev->rst); exit_disable_clks: m_can_clk_stop(cdev); out_phy_power_off: @@ -2426,15 +2434,23 @@ int m_can_class_register(struct m_can_classdev *cde= v) } } =20 + cdev->rst =3D devm_reset_control_get_optional_shared(cdev->dev, NULL); + if (IS_ERR(cdev->rst)) + return PTR_ERR(cdev->rst); + ret =3D m_can_clk_start(cdev); if (ret) return ret; =20 + ret =3D reset_control_deassert(cdev->rst); + if (ret) + goto clk_disable; + if (cdev->is_peripheral) { ret =3D can_rx_offload_add_manual(cdev->net, &cdev->offload, NAPI_POLL_WEIGHT); if (ret) - goto clk_disable; + goto out_reset_control_assert; } =20 if (!cdev->net->irq) { @@ -2463,8 +2479,10 @@ int m_can_class_register(struct m_can_classdev *cdev) KBUILD_MODNAME, cdev->net->irq, cdev->version); =20 /* Probe finished - * Stop clocks. They will be reactivated once the M_CAN device is opened + * Assert reset and stop clocks. + * They will be reactivated once the M_CAN device is opened */ + reset_control_assert(cdev->rst); m_can_clk_stop(cdev); =20 return 0; @@ -2472,6 +2490,8 @@ int m_can_class_register(struct m_can_classdev *cdev) rx_offload_del: if (cdev->is_peripheral) can_rx_offload_del(&cdev->offload); +out_reset_control_assert: + reset_control_assert(cdev->rst); clk_disable: m_can_clk_stop(cdev); =20 diff --git a/drivers/net/can/m_can/m_can.h b/drivers/net/can/m_can/m_can.h index bd4746c63af3..7b7600697c6b 100644 --- a/drivers/net/can/m_can/m_can.h +++ b/drivers/net/can/m_can/m_can.h @@ -86,6 +86,7 @@ struct m_can_classdev { struct device *dev; struct clk *hclk; struct clk *cclk; + struct reset_control *rst; =20 struct workqueue_struct *tx_wq; struct phy *transceiver; --=20 2.51.0