From nobody Sat Oct 4 21:00:51 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 BE1552FDC34 for ; Tue, 12 Aug 2025 17:37:23 +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=1755020245; cv=none; b=Cn+ox+2phvvF7B9osZtIjQk5h5NSbLMYYwNtnl24l+fG+Ezo3vgZvnHydTMYVoisCVU1RIjVXz0CBzvU69ubxojV5++Mmo+KzejxyqDCqqWmDogb5PR5cyv+xExEZhtsDlYqCZ4Pq9VaoQ8FJlPRxVADEuz9qzPiTUW1+ukSVoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755020245; c=relaxed/simple; bh=gETWrxYWVvxLZf+CDOgBACKsO/Ab6x5dzjHwdFLboZc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OSJE9MUBZGrY46WyxQnsXQaWuAKAHYgfBIB5o0Y7DiyQrH0Wr6L2UZs9Xye8cF33FwZ9LNYFqvdK95pI9GC6krvyg0iOq8Wk0GgFTT650mwgwnhGlrnsHkq02GTrcrKn8KsGcOi14umAE5Ll6C3MPVW7zTL68q+CDUhohRdKy1k= 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 1ulsw5-0008EL-Q6 for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:21 +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 1ulsw4-00DEaD-1Y for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:20 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 23E7745623E for ; Tue, 12 Aug 2025 17:37:20 +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 C5A2C4561F4; Tue, 12 Aug 2025 17:37:16 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id bcfd501a; Tue, 12 Aug 2025 17:37:15 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 12 Aug 2025 19:36:51 +0200 Subject: [PATCH 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: <20250812-m_can-fix-state-handling-v1-1-b739e06c0a3b@pengutronix.de> References: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> In-Reply-To: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Fengguang Wu , 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=1237; i=mkl@pengutronix.de; h=from:subject:message-id; bh=gETWrxYWVvxLZf+CDOgBACKsO/Ab6x5dzjHwdFLboZc=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBom3u+cPHdBjNIz5j4ILvJaghwn2pC0wrTtotyF es1h6L1rLqJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaJt7vgAKCRAMdGXf+ZCR nMt0B/0bN1+6x5VPi8pNkbh2SRKEbVMHNIELXp9bL3A4e6/IVip+1l9uxAS0PHXp1OceRjX+Jsg derAi0G5kQmAA/nlF8VsPy65NLPUgyXBREic3FQdPSOyDu6Wowf7nBhI1c4Uz3txtDbScFsNXu3 foc8bne7EmMm8Y4NJU5vpdZIuRRGLpvWasDlk3pfjtVwJ90bkaozu7/WfHGDiClmCQnTErTlSd8 GHjFjKpncmZBHKayz3BNlp8Q8Xi+ibLOmtUWveb9xXVJdATT9v/qdg1bJUWCBhtgH4N9uH1Jg4k HFknJjwPIOwxD0YHRa3a9ZoKcqMAQZOQahQ7XYTHp5iD+VaS 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") Signed-off-by: Marc Kleine-Budde Reviewed-by: Markus Schneider-Pargmann --- 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.50.1 From nobody Sat Oct 4 21:00:51 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 615E02F83CB for ; Tue, 12 Aug 2025 17:37:23 +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=1755020246; cv=none; b=HLSerY7He6RAnnLVy01X7Ot6ccJAk2VpVNF7SJF3ZoVH6meWMGcYHRY1VPxTzQijnr0VN+0BvcUUaiCODgLdA0Xp1X2vaTmzkYVr5U+86QPEUEAw/bglhK0iFdbrvNtObz/Tz/Zn2uq43msHI39qpoX2FcmZZndT4z1JOziRoe0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755020246; c=relaxed/simple; bh=ItqmccYk2DbP884U7uFDE6CPkwudpiKkSRZxWMq/pao=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=P25unAeOViWfMKTIylomlfSdORqjgfuppjD+2yTUYcfJZEWurLXdwc4n67Tp62VKQKN/ykx8L95rifsdAgiuVjvwslUCd2w9g2w8sFM33hOvv1QIGQNiSUlcKbfJ0qA3cWhvaD6j4doJfvw4T+E5ozzfKqPgRhGCelwsT+BhXR8= 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 1ulsw5-0008E2-Lc for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:21 +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 1ulsw4-00DEaB-1R for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:20 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 1DC5245623C for ; Tue, 12 Aug 2025 17:37:20 +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 E14124561F5; Tue, 12 Aug 2025 17:37:16 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 1ed9da29; Tue, 12 Aug 2025 17:37:15 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 12 Aug 2025 19:36:52 +0200 Subject: [PATCH 2/7] can: m_can: m_can_rx_handler(): 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: <20250812-m_can-fix-state-handling-v1-2-b739e06c0a3b@pengutronix.de> References: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> In-Reply-To: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Fengguang Wu , 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=1185; i=mkl@pengutronix.de; h=from:subject:message-id; bh=ItqmccYk2DbP884U7uFDE6CPkwudpiKkSRZxWMq/pao=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBom3vAFkF/2bwZJ33yPfZDOKBNXoK6PZSRONnPK /gZ27APa1OJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaJt7wAAKCRAMdGXf+ZCR nHAaCACaMCpP99b2/EkL6j83V1Hcxz7qYoOWbVR2f0FgO+x+HH8J75XsHdVtplxIr/442osiLQy 5F8Y1izwUxTCtYgc855d9OE6+gMkZxnYyfPzGEQ6eLUlEHKgjIxaBiJqlmvBCwRvLmMvehtfn2f xyfgIf+6uhQk6wvNGGAmqmo/w/+45vZLkkFTuN5DhzRO7uUdfU/10eqfgbCHnyMMQIWEn27NXrF xNDT07tdDzPiBuBJBJFcmDBFArol6u9S8/KrZKir6ULHbuH5L5LlLETp9nzGOu56l1HZvoeo/bA s/OrX6nEC11BC+i6jZpUiGJk0pg8ocGnAZB6V7BrHH3IRrfp 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 Among other things, 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 (cache 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 | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index fe74dbd2c966..a51dc0bb8124 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1006,6 +1006,7 @@ static int m_can_rx_handler(struct net_device *dev, i= nt quota, u32 irqstatus) int rx_work_or_err; int work_done =3D 0; =20 + irqstatus &=3D cdev->active_interrupts; if (!irqstatus) goto end; =20 --=20 2.50.1 From nobody Sat Oct 4 21:00:51 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 D36CB2FDC3C for ; Tue, 12 Aug 2025 17:37:23 +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=1755020246; cv=none; b=p7M52tdGVrBq+Cn+KFGvEYUabHeT0d8YtUAwWa7/FV7qNgS4nzcnmLbxiTWdiVEpMmvA7RyEhIB3Wd8hHlHX/J+symN4GI3+4XmIyZV0gGR65Qap8QqXivyYnjL+x9K81JxY9wA8+LyirS8ls2/29Zj6fRJ49TBQf3wDOmlRf0Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755020246; c=relaxed/simple; bh=TCD8jGdv4Nc/9HzPm+XD/Qj5PPIOwkt4iWL2Yi8+gMY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eQ60rVCcQspcqiUcUntTSD7g6drJjablxowhpC1a0D8KdeHZ8WdSPq83LRfLoiRXPwXCf7g1jOb8+uGSTVMN6mGWWASRFv96LZYQrIrMLDV2ADVqlffXC1GSqCKNvW0EtQ/UfLFV9/CvDWZynLXVwtW/HboJn8aTZh/Jl38vjxw= 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 1ulsw5-0008F2-WA for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:22 +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 1ulsw4-00DEaY-2M for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:20 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 5B0C0456243 for ; Tue, 12 Aug 2025 17:37:20 +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 3903D4561F9; Tue, 12 Aug 2025 17:37:17 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id d7f62ba5; Tue, 12 Aug 2025 17:37:15 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 12 Aug 2025 19:36:53 +0200 Subject: [PATCH 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: <20250812-m_can-fix-state-handling-v1-3-b739e06c0a3b@pengutronix.de> References: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> In-Reply-To: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Fengguang Wu , 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=3308; i=mkl@pengutronix.de; h=from:subject:message-id; bh=TCD8jGdv4Nc/9HzPm+XD/Qj5PPIOwkt4iWL2Yi8+gMY=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBom3vCLOJL1Q+1fbX9qPxVmTwz+3kT5uTwqXss9 MJ+MkcfIrCJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaJt7wgAKCRAMdGXf+ZCR nFVdCAC3XUXdHgHMvVncs6lpmFjy+bpx4y73RuKMBMaXfWDpo9ruWiZ6GGfXwocAIsCD4Zq5Ei6 bRdSmpNniJ2Y0thZpgtj1n1lNGAnXWx5YbOEn6VnUK9NGoDpWBo61Rq2QEBnNbFnVGw0YpRbC6w Y9KBXgrcxLKLR8UnjF7VAiiihwSbyE7nsKOsX4XmoYAR4TUWyM2EjZ4zBcJuEEnF6eEC6wpPHzr 4xEtiYIxnMvijiMFkMax8wWc12iSBAkYuJaaoqpqqZqp4b8c2se0MsPUoMYgaXaIfU7Et1/5VBQ qwMFXbEgWHghtMvbr1A7c/L5bORdUTs8zbPFkJJzH92P8qxp 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 --- drivers/net/can/m_can/m_can.c | 48 ++++++++++++++++++++++++++-------------= ---- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index a51dc0bb8124..b485d2f3d971 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -812,6 +812,10 @@ static int m_can_handle_state_change(struct net_device= *dev, u32 timestamp =3D 0; =20 switch (new_state) { + case CAN_STATE_ERROR_ACTIVE: + /* error active state */ + 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 +845,13 @@ 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: + /* error active state */ + 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 +888,29 @@ static int m_can_handle_state_change(struct net_devic= e *dev, return 1; } =20 +static enum can_state +m_can_can_state_get_by_psr(const u32 psr) +{ + if (psr & PSR_BO) + return CAN_STATE_BUS_OFF; + if (psr & PSR_EP) + return CAN_STATE_ERROR_PASSIVE; + if (psr & PSR_EW) + return CAN_STATE_ERROR_WARNING; + + return CAN_STATE_ERROR_ACTIVE; +} + static int m_can_handle_state_errors(struct net_device *dev, u32 psr) { 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_can_state_get_by_psr(psr); + 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) --=20 2.50.1 From nobody Sat Oct 4 21:00:51 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 D1F622FDC36 for ; Tue, 12 Aug 2025 17:37:23 +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=1755020246; cv=none; b=E0Oo6sHY7vuKtREMqYEfL+wCEB/EyoEgcb7ZK37OhrQkYKTFeoApgGekg0J0C1cK2R1avOdMxWCthn3EQ/1fUu+MyNjQ95ho1kEcwmcWlLkL2I82hNFB7/NjbeBsGkamJlypq35a9W3dmRk3dFRV0augdw/lHxUerR3D99Ta5oU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755020246; c=relaxed/simple; bh=T4UhMbJQzjHlRmeUxcozCrFGrTZCcp3Af50Cnn/lG1s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Y4fManZqWfdOf3hOxaQvivA88t0kVWSK3+ZbVIPg3k3Q+4pXX3VFESCGIlRn5ygdft5FspQP8VRAAZVrNvsCnio1g0Fev7MHwMFUGoYMY2CG3PZtngZrctshMt3/XGIasGwpRxfrbYGzIr+Of8z7r7fd/diKpd0nSgwGizqI4bQ= 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 1ulsw6-0008FM-3B for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:22 +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 1ulsw4-00DEan-2d for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:20 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 7E352456247 for ; Tue, 12 Aug 2025 17:37:20 +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 5A2404561FC; Tue, 12 Aug 2025 17:37:17 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 9efcaaa1; Tue, 12 Aug 2025 17:37:15 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 12 Aug 2025 19:36:54 +0200 Subject: [PATCH 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: <20250812-m_can-fix-state-handling-v1-4-b739e06c0a3b@pengutronix.de> References: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> In-Reply-To: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Fengguang Wu , 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=1560; i=mkl@pengutronix.de; h=from:subject:message-id; bh=T4UhMbJQzjHlRmeUxcozCrFGrTZCcp3Af50Cnn/lG1s=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBom3vE9XhP8mkJYGc6RJIuP9hBbJEm6C1iYsAS5 +CuJIRWSKeJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaJt7xAAKCRAMdGXf+ZCR nHhjCAC0Npc9zlaTIaotl39Zyj6YGDFwikzJasFT6jvWJ7vqtFldDpnPkbM8Wvpl0sjHZjG8Vg8 qNTQ8VZRY/e/T5To5BqL96cMhFVmc6Ynxkjf4t82ecF4X0g3Fp+5tb8zuQ5xC31xNuUGDFx/LL4 dU0CzUMPEbuk4b8BFnPLi/nsa1pp7sZh35/rux9iPDsF/tCHbiiEprLn0xXIB/lcXubCGLMPtjU ojpRXSs1aKiXhOguOanQDGKpG9258CWAXRS5PZTUJXbaUl+oXWEoMhwMwowILTLZsemModM0MAb iQAou0eKRze9YBUZNdKdpzbDT+CTRqP1sTfcTWf3HI4b/H9z 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 --- drivers/net/can/m_can/m_can.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index b485d2f3d971..310a907cbb7e 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -1607,6 +1607,7 @@ static int m_can_chip_config(struct net_device *dev) static int m_can_start(struct net_device *dev) { struct m_can_classdev *cdev =3D netdev_priv(dev); + u32 reg_psr; int ret; =20 /* basic m_can configuration */ @@ -1617,7 +1618,8 @@ 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; + reg_psr =3D m_can_read(cdev, M_CAN_PSR); + cdev->can.state =3D m_can_can_state_get_by_psr(reg_psr); =20 m_can_enable_all_interrupts(cdev); =20 --=20 2.50.1 From nobody Sat Oct 4 21:00:52 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 410EE2F90F9 for ; Tue, 12 Aug 2025 17:37:23 +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=1755020246; cv=none; b=tvX8MeJncy0il6VKlA+l3t1l8k7t6Qb9ZJ0gqvRJ7pxD10d7GIhzHHt+JpfhXxgW0j8rK8w7EZgRzcEqbiMCjLQuY1FzRe7eJleuEIARvDCuhh0z6Co2kNgSN27LkVGpRYJDp03kjq/GWNO2MB9I1XvNrGSRt8mD506zrwivras= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755020246; c=relaxed/simple; bh=LYj7+cw7SUdqJLM3S/LbDR3XePgovU5/Y93e7D5jugg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bgn8v9uqG3RWM2Do+anbl7n46cUV4LkoXxGG66r2ZhqJWAd8KAQ/aVwwkofndbc5J7ZPL1Ntd0AzHPd0hAqwhgVXHLmGORQ+ZPn05yUZKcsdQAcIPVYs+OJmReOVZhQxSALq3/vB0xIn3xb+qRMQYTP/E0WZ3uXbSUhcbjLBWVQ= 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 1ulsw6-0008FK-6I for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:22 +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 1ulsw4-00DEao-2f for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:20 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 83404456248 for ; Tue, 12 Aug 2025 17:37:20 +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 7738B4561FE; Tue, 12 Aug 2025 17:37:17 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id bfad522c; Tue, 12 Aug 2025 17:37:15 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 12 Aug 2025 19:36:55 +0200 Subject: [PATCH 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: <20250812-m_can-fix-state-handling-v1-5-b739e06c0a3b@pengutronix.de> References: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> In-Reply-To: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Fengguang Wu , 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=2080; i=mkl@pengutronix.de; h=from:subject:message-id; bh=LYj7+cw7SUdqJLM3S/LbDR3XePgovU5/Y93e7D5jugg=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBom3vGs5ftwxHIXOsYT+TB/LasWtsg/WFiA+IIm xlwh7WxGQaJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaJt7xgAKCRAMdGXf+ZCR nDZuCACcjVWaap0xsdwmsPXefW+Dpui/kbwjJDkupLZ3t6QuqETXchx3RFx28w9HbMcAn4/cs6X n6FTkK6vgvRlYiwV8erJUEGrhh3ARjh+f70v6aHOhRnn0OYn1K5PnHkA8HhvaBz5Ljasc/JHKP6 uyh/mR1RlWn7BKmeNgdR2rD+rQuSYLYIDhZGVAarH8OGvROR9Dn7Am08y1/rSAcB7P2SvShkeCc IVQdSrvdzvYhama6QJjFE1D7FZxtjRyjVYy6iGszkq0vHY9d4+QVBx3WvggEeid02KOr8WOV6/f gIoOJHbPkSXOQS8DzvpugpJym3UX4RQYEeGRpHwqBXrGqS3p 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") Signed-off-by: Marc Kleine-Budde Reviewed-by: Markus Schneider-Pargmann --- drivers/net/can/m_can/m_can.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 310a907cbb7e..149f3a8b5f7e 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -2507,12 +2507,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); @@ -2525,14 +2524,14 @@ 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) return ret; =20 if (cdev->pm_wake_source) { + u32 reg_psr; + /* Restore active interrupts but disable coalescing as * we may have missed important waterlevel interrupts * between suspend and resume. Timers are already @@ -2544,6 +2543,9 @@ int m_can_class_resume(struct device *dev) if (cdev->ops->init) ret =3D cdev->ops->init(cdev); =20 + reg_psr =3D m_can_read(cdev, M_CAN_PSR); + cdev->can.state =3D m_can_can_state_get_by_psr(reg_psr); + m_can_write(cdev, M_CAN_IE, cdev->active_interrupts); } else { ret =3D m_can_start(ndev); --=20 2.50.1 From nobody Sat Oct 4 21:00:52 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 C233E2FABE3 for ; Tue, 12 Aug 2025 17:37:25 +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=1755020247; cv=none; b=K+J+13Ct/k3Frh5q1V/wzl1VctJpBMAxHUMx6eYah3NXXggn7DojfOxC2bGGv3+pNL2p8nGHwhKHKMem1SXFq6/72/s5aTnonb940/k4SuIYkf2NHappyzF1mBBfDthlYIrSJxx3kNKfeOC5MvHMpP4ISjDO7Oc0gnV3eYLSknI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755020247; c=relaxed/simple; bh=4QosE3H82o+BIBanXec+XaasUKH495dBom5k4ZPKLLY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oDPibzHn6ohQSSIZd6A3ZxnocmMdd2kRyrPYGB76dmpt27v6IOCWCFyPDwc+yuBZP4qYf08YJRU9kdLo0PbG7u3Pl9fTbyTNUBVLQwfKeVRde+tCbQHJxx95eExkjvqOqE/FPGNH5TvXKE3E+ARYix3mbqMrNoVMmJSDSW2T9Kw= 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 1ulsw8-0008PA-3C for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:24 +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 1ulsw7-00DEcq-1S for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:23 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 215AC456261 for ; Tue, 12 Aug 2025 17:37:23 +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 97DDE456202; Tue, 12 Aug 2025 17:37:17 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id 3a13c453; Tue, 12 Aug 2025 17:37:15 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 12 Aug 2025 19:36:56 +0200 Subject: [PATCH 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: <20250812-m_can-fix-state-handling-v1-6-b739e06c0a3b@pengutronix.de> References: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> In-Reply-To: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Fengguang Wu , 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=4QosE3H82o+BIBanXec+XaasUKH495dBom5k4ZPKLLY=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBom3vIsM6EBlLJrHCJog96c4xbEju9IpTsI+k/T KbT31BdFXGJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaJt7yAAKCRAMdGXf+ZCR nL4yCACSPOZ4Z1UT4XZ7ga6EYHPkwY54dQKAIz7O3DDYrDpzj+4LWAoVBiHjcWlERrPo3Tf4sMN GFqwemcryJT1jKaBDCrSgMdRY6bBhJYWdcCHaBNWo5z5D1cN541nJATqae0QEs1hG1tmDR8s2Ww 5eI5Fd6pnivS5T7Gt9cj2dzygnIQkhXPtVajIRYKFOgi0CnLZ5dj9BQtMgRXLyeDl7hx9a4PTJR wXdhYZ3jfGa5dwaHfTANOMlox/gCx9xPV26M0njs0AjUR0v6LzYW6Y+ZvzS7SDVLKxvBsjKZe16 1rem7Q7vwMCJXrRMG7IJkQDrCZHaKg6rljGcb5UesCxbFVfz 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 149f3a8b5f7e..c24ea0e5599f 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.50.1 From nobody Sat Oct 4 21:00:52 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 C0CEF2FDC57 for ; Tue, 12 Aug 2025 17:37:25 +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=1755020247; cv=none; b=IgB8KK8XIq1T3RZXpFxKF5jCyLinExNjW7NM3B4WrAuHZ8BuAP1U70/jmn7sjBw/cXw20VaMGm/l8usEASm/HPUhjyTdDzzCreVN5ZXhn58lWGFm9B2zcAP9ngyFNlvOwQRRDiqQ+l0AMQSfeWQD/0ZvIwG4um41OQdKyrjQVYc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755020247; c=relaxed/simple; bh=ADOn7ZMH2Q2fpAKxg4S8RBm4xi1hnJJ+M+eDiEmS1fE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZOXjyorNsIlOWaW7HiD9jU1GH3NaS3OALpfWN89c4FfMnhUe5+Dz1d7gBeLeXLXQvsN1qcpV8ZLX3KjXQV7UFrNTBgUI0G4wbcEZSgljDJw/HbZs6knKtZvusJOORHiI0Z+L4c/t09iXiEsFFC+juFPz2H6EMoglcRwAnD+l8m4= 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 1ulsw8-0008Ov-2p for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:24 +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 1ulsw7-00DEcl-1J for linux-kernel@vger.kernel.org; Tue, 12 Aug 2025 19:37:23 +0200 Received: from dspam.blackshift.org (localhost [127.0.0.1]) by bjornoya.blackshift.org (Postfix) with SMTP id 15801456260 for ; Tue, 12 Aug 2025 17:37:23 +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 B41AF456203; Tue, 12 Aug 2025 17:37:17 +0000 (UTC) Received: from hardanger.blackshift.org (localhost [::1]) by hardanger.blackshift.org (OpenSMTPD) with ESMTP id f2d72401; Tue, 12 Aug 2025 17:37:15 +0000 (UTC) From: Marc Kleine-Budde Date: Tue, 12 Aug 2025 19:36:57 +0200 Subject: [PATCH 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: <20250812-m_can-fix-state-handling-v1-7-b739e06c0a3b@pengutronix.de> References: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> In-Reply-To: <20250812-m_can-fix-state-handling-v1-0-b739e06c0a3b@pengutronix.de> To: Chandrasekar Ramakrishnan , Vincent Mailhol , Patrik Flykt , Dong Aisheng , Fengguang Wu , 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=3596; i=mkl@pengutronix.de; h=from:subject:message-id; bh=ADOn7ZMH2Q2fpAKxg4S8RBm4xi1hnJJ+M+eDiEmS1fE=; b=owEBbQGS/pANAwAKAQx0Zd/5kJGcAcsmYgBom3vK0Q1u08n9LtlJhTdiBEqmYQq6lcphxkQpe UuLyEfvG5SJATMEAAEKAB0WIQSf+wzYr2eoX/wVbPMMdGXf+ZCRnAUCaJt7ygAKCRAMdGXf+ZCR nKBNB/9aXuli48yrbb2ITSRzcyynp0OXVQMgsZyWOtt6/0Yjhab+nPzNoYZ1tMEy3luYyrzz9lx F7C1DcuKzfcfTuBegQroId6jmciHcP17eL+mjxrtlO3uDibqcTggvWjNpBimxLEiMiDYO8XJxJn /Cf7Z2TCJ4i2BOAkWvhUfthxqq6lLA3f1EI4rsn4hjeKupTWV1E/OLYLmCesViUPqn5iJAJvAOR rTCUGXmVcQfTvpQ05FSzoFxbYCoxYDFExsnQ1tH/gSG+7vm8N9l7fsYRZITkkfjzsjuErml+JXa eS2d0d8UHFNi5WNvdYEoswpwHIvJb7IeoTD85Kl44R5vt/h7 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. Signed-off-by: Marc Kleine-Budde Reviewed-by: Philipp Zabel --- 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 c24ea0e5599f..0a6d4b523c33 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 @@ -1833,6 +1834,7 @@ static int m_can_close(struct net_device *dev) =20 close_candev(dev); =20 + reset_control_assert(cdev->rsts); m_can_clk_stop(cdev); phy_power_off(cdev->transceiver); =20 @@ -2075,11 +2077,15 @@ static int m_can_open(struct net_device *dev) if (err) goto out_phy_power_off; =20 + err =3D reset_control_deassert(cdev->rsts); + 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) @@ -2135,6 +2141,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->rsts); exit_disable_clks: m_can_clk_stop(cdev); out_phy_power_off: @@ -2425,15 +2433,23 @@ int m_can_class_register(struct m_can_classdev *cde= v) } } =20 + cdev->rsts =3D devm_reset_control_get_optional_shared(cdev->dev, NULL); + if (IS_ERR(cdev->rsts)) + return PTR_ERR(cdev->rsts); + ret =3D m_can_clk_start(cdev); if (ret) return ret; =20 + ret =3D reset_control_deassert(cdev->rsts); + 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) { @@ -2462,8 +2478,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 rest and stop clocks. + * They will be reactivated once the M_CAN device is opened */ + reset_control_assert(cdev->rsts); m_can_clk_stop(cdev); =20 return 0; @@ -2471,6 +2489,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->rsts); 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..5e901d5bf6ff 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 *rsts; =20 struct workqueue_struct *tx_wq; struct phy *transceiver; --=20 2.50.1