From nobody Sun Jun 14 01:35:13 2026 Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 557C530DD00 for ; Mon, 4 May 2026 20:15:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925706; cv=none; b=aed6TBnem1FU7LG3Q8wQyN5OMFlJ8okoluzD3zjisMp41Smkl+EALvQKYy9wEUA5kfBHKndMQcSYSLJUSVBUKxk7Wr5Pv5eBCaCNBraWItyBGmXy3kyWXUF4myxk68Vb/yul/KW24KwqTmiLQxOKmhf6lXVrpZ/wSFsh/yo/+qs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925706; c=relaxed/simple; bh=R5JgCdy/DB1Ih4Sq3LY6luPtR7ymrleLMrLZ1TOIim8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HS1gN+Q5w3SaJZXn0yrd79gdNcYZglFY8iO4etQ5sbjD/gbfmnCud6aAcTS3rQ+06QQkMMVTJ9RoXl9C3Vyo4WWW7nazTERch/7F4KN86hHJztH4sH6zPuS5kRwnko+nsXSxl11hU24qXUTzhjXxEmMKPx3XDZUnv817SpWtWTc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com; spf=none smtp.mailfrom=wkennington.com; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b=kvJxzkSU; arc=none smtp.client-ip=209.85.216.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=wkennington.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b="kvJxzkSU" Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-364d72f2986so3090067a91.3 for ; Mon, 04 May 2026 13:15:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1777925705; x=1778530505; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=U7Frq7y1uLHJifdiiUIm1aT5EQRSrBV8yFq1fPIMTZ0=; b=kvJxzkSUyqaR3AzlLoD1SsN93VvxgnulPH4jrBDYvwly5mhDxk0Pz+cJx31R2flpO0 VntItqrgHN5XdbGB6HtR0jKcX1U8fq7ouavnCLnx+E5VXjqmKBCiY6Q6qTUPM+KY9BLk 6KgY+wNVB8E6DCMS6FMvxIwOJVJmVdRoocvvyEtjZ8EnMS+sJDtDdO/3ENgYqJJBMWyZ xiFTmoNdIAz/dE2liKntCiPtJcwJ+AUDtbvVI8U3ueRc/03yjwfSPvISgBe/UyPH3FWw qYHpFNlNtVLWIfqwJPiDRB7oBgWSOwDAq/5pG9wOK2hgH6jmVVZUxWonTkPU5bM/WT1P 8ZYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777925705; x=1778530505; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=U7Frq7y1uLHJifdiiUIm1aT5EQRSrBV8yFq1fPIMTZ0=; b=EmOQ7wEel+m0o5yhmZu0KJoOEe6gMEHNpZXNVZVpjZD5GAXws5jzYRFvUboaHbw0AK Mr189wWSMLAxbCrAq5SWETGJngQLOh/y+x2xwQHq81TBq/SBF6TOu9JnfUl4hR2Mcd3y yUTrttma1PJTCDAf/qFdKmBorLsJ1RDnlCFyYljLbj0Qqkg8pjE6zWTtunrB//k/2E61 n97hpC7WqQLwARzc8EMqDLvO1oUkvseInN31TATYnV1Kk7p8UV1dmSQA74SHmZizysW7 vxBk3HqjLwlwr4ULTY/lWBI2DT1+hXxqD6NZ17MN2oijsbcDYlRiQEnPnbbCTzR4gOiT AnQQ== X-Forwarded-Encrypted: i=1; AFNElJ+eLo3Gc99r3cgMPomMuWZ3wo1oKgdmaNBXgA98F2j/SsC4dEze9BEnloL/Fcx3Ctjs2dvjDuSTZpa5lgg=@vger.kernel.org X-Gm-Message-State: AOJu0YxWzYZRJTRBANMOvvBBMC6BOk0FN2yd1FbLsi7DfjVWeS79Ph3M 5yNwKKlhNL3sooDbivlLe7pjc40MiIWXwUmsOsfOXdtn4Aep+nrErdl8u5yokNRQd1I= X-Gm-Gg: AeBDieuWVcHq/gHCVZoqBp/CaSC+uATQ9JPtnB+7BTwvofuHdNawdPVoHZzCo+jrVOQ mvwhaP68QTwWuHoarhcgP9uNdY87YK2jy8fIes2iADf1k0oXTes9NLc9IFKSfI8xo0AVjlfjmo7 hs1NTr87lSwDKMImHnP5XemNbyGRcr0UDjrM7I0Hoaru0MYp+oGpJkYgy/UWOCNB2mDE6YA65yG XLzNeXPf1qPLKO2h/JnDxZdefUg1bri8l+qrx95iGGbLSxIqXaCgFmINRch8SIh28cYwOQiJJbW rusciiYJzu7Pn8ChhoF4TZPCMqs/+eVZqQiENzhxcowSqKN6qwa8NrfhVM42a+APi5BUg8spSYn TeNgMZVuucjpZ6ETB0UBZO07JCrHwdTCCcyeaQ5UdhrHo/75LJs2M+RWGRU/ar9jrVVnhDHxHCl jSC6SdKPZ9VgYv16AdISEhH94zNgtsDES8LO596Ura2+puOC1HPeUnZI1b7PhCkr/NsBOhK1s9G iQMYh9nDhaf3jC00StahoTF0g== X-Received: by 2002:a17:90b:35cf:b0:35f:b7f5:9cd with SMTP id 98e67ed59e1d1-3650cec0ce2mr11560093a91.20.1777925704571; Mon, 04 May 2026 13:15:04 -0700 (PDT) Received: from wakbuild.c.googlers.com (123.143.125.34.bc.googleusercontent.com. [34.125.143.123]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-364bdf2aa41sm20568593a91.4.2026.05.04.13.15.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:15:04 -0700 (PDT) From: "William A. Kennington III" Date: Mon, 04 May 2026 20:15:02 +0000 Subject: [PATCH v3 1/4] i2c: designware: Introduce shutdown exported function 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: <20260504-dw-i2c-v3-1-57e56135d602@wkennington.com> References: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> In-Reply-To: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> To: Mika Westerberg , Andy Shevchenko , Jan Dabros , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, "William A. Kennington III" X-Mailer: b4 0.14.3 Introduce an exported shutdown function to safely shutdown the DesignWare I2C controller. This shutdown hook gracefully sets the slave disable bit before disabling the controller. This guarantees that any incoming requests from the master are immediately NACKed during shutdown, preventing the bus from hanging. Signed-off-by: William A. Kennington III --- drivers/i2c/busses/i2c-designware-common.c | 24 ++++++++++++++++++++++++ drivers/i2c/busses/i2c-designware-core.h | 1 + 2 files changed, 25 insertions(+) diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busse= s/i2c-designware-common.c index 4dc57fd56170..0703fb29038c 100644 --- a/drivers/i2c/busses/i2c-designware-common.c +++ b/drivers/i2c/busses/i2c-designware-common.c @@ -1028,5 +1028,29 @@ EXPORT_GPL_DEV_PM_OPS(i2c_dw_dev_pm_ops) =3D { RUNTIME_PM_OPS(i2c_dw_runtime_suspend, i2c_dw_runtime_resume, NULL) }; =20 +void i2c_dw_shutdown(struct dw_i2c_dev *dev) +{ + unsigned int con; + + /* + * We only need to handle shutdown for slave mode to ensure + * we NACK any incoming master requests. Master mode cleanup + * is handled after each transfer in i2c_dw_xfer. + */ + if (dev->mode !=3D DW_IC_SLAVE) + return; + + /* + * To quickly NACK the master during shutdown, we set the slave + * disable bit while the controller is still enabled. + */ + regmap_read(dev->map, DW_IC_CON, &con); + con |=3D DW_IC_CON_SLAVE_DISABLE; + regmap_write(dev->map, DW_IC_CON, con); + + i2c_dw_disable(dev); +} +EXPORT_SYMBOL_GPL(i2c_dw_shutdown); + MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter core"); MODULE_LICENSE("GPL"); diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/= i2c-designware-core.h index 9d8d104cc391..8b422249acbd 100644 --- a/drivers/i2c/busses/i2c-designware-core.h +++ b/drivers/i2c/busses/i2c-designware-core.h @@ -393,6 +393,7 @@ static inline void __i2c_dw_read_intr_mask(struct dw_i2= c_dev *dev, =20 void __i2c_dw_disable(struct dw_i2c_dev *dev); void i2c_dw_disable(struct dw_i2c_dev *dev); +void i2c_dw_shutdown(struct dw_i2c_dev *dev); =20 extern void i2c_dw_configure_master(struct dw_i2c_dev *dev); extern int i2c_dw_probe_master(struct dw_i2c_dev *dev); --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 01:35:13 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2E1C930DEA9 for ; Mon, 4 May 2026 20:15:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925707; cv=none; b=MTWBD00j/8eLhM87uUl49PqR8V/M74vQXRKxdwYvx1gOUzM61TBjXAdJNiyvaEbInZEHI/82Kk/y5krc694c/9QCCG9Wsk8IKvmOr3QQcoPPseSyG+OYCmD9Z2ttn0zh64uT+P/prYIAZqACc7g334tUVegPNoPPVLlIsxma84c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925707; c=relaxed/simple; bh=GBmG+unHRcZc6mbBhwjzyavT9fsgbW6tBtWkwJpdxtg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TUhqffMkxEAJmdcDfi/sXyxzzzTXpaTq0cOSjhS3K8ejU9ixENcTN5oV7lOCBZ2iEKyEy2ynqAz2J7bTxKkDC6Lkt7G8rvo0OW1eyhmXrDcI5eXIHc1odm2QzlqBTgGxXUpYC4hk8FcTNMVOZtN7D5b3wJyuycMfXhbC+3cxQEo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com; spf=none smtp.mailfrom=wkennington.com; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b=JWOM4DV1; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=wkennington.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b="JWOM4DV1" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-3650453fb28so1780375a91.2 for ; Mon, 04 May 2026 13:15:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1777925705; x=1778530505; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=nazjXO7pkEvVPqio5XcywQP31C91oLcKtFCF7VL/ScM=; b=JWOM4DV1j4C/r//07HhQfKn1ABTgsF/OfugUPPy1CohPmw1PZbx0W3enZxJxdGMdqa paG0Rr5EYNG2aymtmGsF3pnMfoxDk0UOTCLlghJ/kgEbVzXkIdQHUbh2wcT92nnWYMdU EYEFse0wtxkHUXMUqunSjHyEqEgX2r3g23DPrCG6wlIYGmVgZ9u8i6fQiLv4270wjWKj tuKM43lxZbAWw4vd/jsThNAjRVVYfwtPaBJVtbRCgP4QrOcB81MYkf4yxkOth4wIBbLf YoKNl8lZ2QqE2gVVG7gJW6ieYQ1Iv1sEq1Dt5S/ydvjHCPgWJe2Z4MjLWyiehVUodykh a4qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777925705; x=1778530505; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=nazjXO7pkEvVPqio5XcywQP31C91oLcKtFCF7VL/ScM=; b=IK2J2EjN/hlkLpQiJ2dQVTZVb31ykoxU8wwX5evGZJrHAHanqQTbbbUEAMpud8QshZ 5qf6dJ/yFO9V3J72f9+coMbsxsbF2h9qq+9n3UTywE2ejkfgT0txZYSgbTUslG0++wjF Yllr9g0d3pj3O1yY6TrYlqnS+0YWffU4ish7sEZgI4GnvMU+zeaDhvtB65wzfkeU1DXy EfLthIjIIs5e2Gk85T4Dttt4/d8HlAvVjjCOEHSek94QspzISm+2/dUFtlPvqmDUEffw Pgpf5aqN6hsVT/PGOUpWQ81+Nnnme4zEKKVDFnwAMXk8PF2qOEpGeLLDQKkAPRL8Hd03 SfsQ== X-Forwarded-Encrypted: i=1; AFNElJ+Ha9dkGDxU42RzctGOMBB/QvpCTkGzXQnkQRbaDwAEkkKwVEZ0vzBrz5o98FMoO+YM6afONZC/j2MswiU=@vger.kernel.org X-Gm-Message-State: AOJu0YyYL5xg8uR8c7yDV/7gv9PodeXOhhZXnoDRhsbfvZuJVuT0qNSD bUZPCwFj7ipzqKuSekQCXyGqyqTonBjKse6QB0xVObqEv2iWtOrpP3oxLZEX6bkYfCg= X-Gm-Gg: AeBDievLTVzOfRMm2qde2HymkPTakImoF6mc4ZBaXjcV1X0qBuO0AGPrJCPoVRHkQf+ dzucQT6ajzy/xMpnm85IrkO65+SJiIXutqwWiceIfH09lat+AJYg/HS3LfH+7ENreMyDpB9HqeL Clc4zYbZ9uGscpEZHFzHjToB8IfOEak32Bxqk3HKoR3V3eAx9VwDrEexCgztexUqJlDNGINNLMR DC4eKjJMkMsy/OdgfYd8xq0gkOJRqfSNBNEs/yH6KgB5Ln32qysgOfDTERRt732sfdswhUkdwLb VXn2Za/GNtOxWQ6qIP87zRk+mLUEBb2bIHth8OxI02kC0Wro6PvP9mfTcNb0cWEUJubH8TsbA3R AF6fgVKRMl6UMZzc3kIlf+OhbZBTYNo5tkAuA1IfKULDbtUaXPXIhSsRzQVtXhqP1jy0urxihNW uhcA4i8XDTAatR3RmWcRsCGYfmdYhoG22pNrjKZ65rvCR38AiaxkPgF01er3UNemdgWYqLiICrR nN3gEtDJw8SRCJ6DiRqV2WhXQ== X-Received: by 2002:a17:90b:2e50:b0:35f:c1e1:a263 with SMTP id 98e67ed59e1d1-365774cc695mr324139a91.19.1777925705477; Mon, 04 May 2026 13:15:05 -0700 (PDT) Received: from wakbuild.c.googlers.com (123.143.125.34.bc.googleusercontent.com. [34.125.143.123]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-364bdf2aa41sm20568593a91.4.2026.05.04.13.15.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:15:05 -0700 (PDT) From: "William A. Kennington III" Date: Mon, 04 May 2026 20:15:03 +0000 Subject: [PATCH v3 2/4] i2c: designware: Convert PCI driver to use shutdown hook 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: <20260504-dw-i2c-v3-2-57e56135d602@wkennington.com> References: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> In-Reply-To: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> To: Mika Westerberg , Andy Shevchenko , Jan Dabros , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, "William A. Kennington III" X-Mailer: b4 0.14.3 Convert the PCI driver to use the new i2c_dw_shutdown() hook, allowing the controller to gracefully NACK master requests during system shutdown. Signed-off-by: William A. Kennington III --- drivers/i2c/busses/i2c-designware-pcidrv.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-designware-pcidrv.c b/drivers/i2c/busse= s/i2c-designware-pcidrv.c index f21f9877c040..87074655c0e7 100644 --- a/drivers/i2c/busses/i2c-designware-pcidrv.c +++ b/drivers/i2c/busses/i2c-designware-pcidrv.c @@ -356,11 +356,24 @@ static const struct pci_device_id i2c_designware_pci_= ids[] =3D { }; MODULE_DEVICE_TABLE(pci, i2c_designware_pci_ids); =20 +static void i2c_dw_pci_shutdown(struct pci_dev *pdev) +{ + struct dw_i2c_dev *i_dev =3D pci_get_drvdata(pdev); + + if (!i_dev) + return; + + pm_runtime_disable(&pdev->dev); + if (!pm_runtime_status_suspended(&pdev->dev)) + i2c_dw_shutdown(i_dev); +} + static struct pci_driver dw_i2c_driver =3D { .name =3D DRIVER_NAME, .probe =3D i2c_dw_pci_probe, .remove =3D i2c_dw_pci_remove, - .driver =3D { + .shutdown =3D i2c_dw_pci_shutdown, + .driver =3D { .pm =3D pm_ptr(&i2c_dw_dev_pm_ops), }, .id_table =3D i2c_designware_pci_ids, --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 01:35:13 2026 Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E32E730E821 for ; Mon, 4 May 2026 20:15:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925708; cv=none; b=Tl3EvVqZ5PVzii3bPjilodO2AWgaWgYOe0B0ugv1q+R+31qDPPE+pPpJXo5Wh2EkN2pELEtzTNcfPU9AYXRCsSY6dKHQEXAPECo3LWN0FQdopgINvQHTCeCdcmFt1as/NpyWYRhBq2TycMCSJM9Dj/5IIVEFRfPZ1b/hgrfSwGg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925708; c=relaxed/simple; bh=twTy3Z39Eii5mOIKwozraCeEPveBMj4OXX+2gjaPX1A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gikMZQB9gg2lPCSdCu15pYre7M4agYyBvQmZckqljKyFEJi8lIPCpsuA9QEREoRP8f088T2kaNEZ7kL9oINncSKmUHmrOrmIkMmauSOhItAXVgnJAY/q5X1MNOec0SRF14tMFFuv8zfbThgVIb4BRAL1ira7h2E2vAq8hE6rCys= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com; spf=none smtp.mailfrom=wkennington.com; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b=IhR2m8QY; arc=none smtp.client-ip=209.85.216.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=wkennington.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b="IhR2m8QY" Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-35fb16e56efso3068853a91.2 for ; Mon, 04 May 2026 13:15:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1777925706; x=1778530506; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=1f02yCe7sdAz1E7htjPX2ipyZwaVXBlkzTP5kvxCiT0=; b=IhR2m8QYp2Dfjcr4fm6fo4o5umeem3uBiKqHrGgmUHvnFqJXoOl1IsdERT0lUG1Wpb Qmsw0e9Xgj2eF+Bof7b2Wb0kvLWr7XFNcbgo/kIRvp0yNIslmyslXubuXEzQ4rO7wazH XvmLZU3vW6Lz1OKzJVG93u3Sg2v8P9lPrcFbj8EZYrEV7C6pjWCiR78Be/jvDTUX/rFU j/gV4Ofz0do2uic6hKtRmN/sQh3TckH9CPsoAfl2SRoDlOCGX8I9LvqwCE3oChqQRRlP HRCXOjQiN09MIdyEBeGLUyZjY02lijqOkDIJjH20m6merrEX/VLc8iRe23ZU4KlExvr7 ZDBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777925706; x=1778530506; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=1f02yCe7sdAz1E7htjPX2ipyZwaVXBlkzTP5kvxCiT0=; b=TAK5+tq2xNeeNQvTo45wrJR9R11tXPYCFfoHyzHDSX0J5xFqiQMeG5T3P52/cgMWPz DYhNySZJtc6xtICQ+a2kqgZ+kUiaBUDLWg+pI0WuZyHBKYLjDRLfDsCPzw73H9rwLvWH QH+K4Z85ZRQqz9HM4Xk9bh5Pm21Rx4Zj3Dj3vXDMZW7SEpi0ZxFFGNpShbNJYExL2hHb 1iO5jhJ6Be+L/4lr5zaAWzpTwkZlHLKqhHpIqFSwbBgswdFZUVSo92NXKB2p0gtbWkME vr5+1/b1vywLr5HKIOS1WAIeM2r0oqjp2nQTH/a3e4AXIUtbKL8D0JdJe9tyMq4N74u7 aH7g== X-Forwarded-Encrypted: i=1; AFNElJ/iBfULqX42IUhuaJZagyXZjcOhptPQx5yzHqDzRZelK70i6UQLveCUye8Ck+9QtxJegeOhLapQo+Y5V7s=@vger.kernel.org X-Gm-Message-State: AOJu0YzNnG3Mb17fxfqJ+Uu7p5pzBqqwKQl5QPyWEbsqdzhkm485lTUi oYdk3JBLdB27IwhKy6zpdRZM9M6KqFkF6bBziMflK5ugJUOxiASd0n5Tjv18ALoCp+s= X-Gm-Gg: AeBDieuQhNUPksh8lPewnnYM1z9pZGopeOvJGDoSHCiNM9H+Az4e3a8+YdKeJksP/KC PZIqbXqSYXFa1m9TKYxfV9FbceA0R0ZdQ9LfYn63hoFGPzRUklSjzOvmTOR0xxQblG+xVim/Chu etsCYUu+Jr9dRIgbARVJayNBR9lOKQ3S99Ig+IR/bUYFRzYRrqhKag0Vdw/30kWU8bNlHqYG2hh tTWmATvJfiVYUaWQyYOfPFlKgBx5BPJlugDc2hYRG6yNRGTHaWYQzl+f2C6Eq3SOQizvOR0jkJI XLwbx/1d4ANFMSfp/E+rnN5r47rGQqGfTkQDXJ6C9+pWg4my7mU5oP3sstHpx6ekwOTYkth72W5 RyWSqo3a6CmkFegGn6BglW5uNab/vH9LDCux5rTTQKKvaSsHdDXQ5sn6dqRHDl8QtitwqFA/L57 sH6QQKv1+qkfdWxQaItqHZWXwQeI4HV7WGDE/hi2YOr7XsMGt+2Eyu+buNGn7Lj5q4YwScGsBft swd4NWIgkzrG231g5735te1mfVrDuo6AheY X-Received: by 2002:a17:90a:d64b:b0:362:ded3:bbcb with SMTP id 98e67ed59e1d1-3650cef79cdmr11065724a91.25.1777925706320; Mon, 04 May 2026 13:15:06 -0700 (PDT) Received: from wakbuild.c.googlers.com (123.143.125.34.bc.googleusercontent.com. [34.125.143.123]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-364bdf2aa41sm20568593a91.4.2026.05.04.13.15.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:15:05 -0700 (PDT) From: "William A. Kennington III" Date: Mon, 04 May 2026 20:15:04 +0000 Subject: [PATCH v3 3/4] i2c: designware: Convert platform driver to use shutdown hook 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: <20260504-dw-i2c-v3-3-57e56135d602@wkennington.com> References: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> In-Reply-To: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> To: Mika Westerberg , Andy Shevchenko , Jan Dabros , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, "William A. Kennington III" X-Mailer: b4 0.14.3 Convert the platform driver to use the new i2c_dw_shutdown() hook, allowing the controller to gracefully NACK master requests during system shutdown. Signed-off-by: William A. Kennington III --- drivers/i2c/busses/i2c-designware-platdrv.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/buss= es/i2c-designware-platdrv.c index 3351c4a9ef11..7ff7c1631e64 100644 --- a/drivers/i2c/busses/i2c-designware-platdrv.c +++ b/drivers/i2c/busses/i2c-designware-platdrv.c @@ -289,9 +289,22 @@ static const struct platform_device_id dw_i2c_platform= _ids[] =3D { }; MODULE_DEVICE_TABLE(platform, dw_i2c_platform_ids); =20 +static void dw_i2c_plat_shutdown(struct platform_device *pdev) +{ + struct dw_i2c_dev *i_dev =3D platform_get_drvdata(pdev); + + if (!i_dev) + return; + + pm_runtime_disable(&pdev->dev); + if (!pm_runtime_status_suspended(&pdev->dev)) + i2c_dw_shutdown(i_dev); +} + static struct platform_driver dw_i2c_driver =3D { .probe =3D dw_i2c_plat_probe, .remove =3D dw_i2c_plat_remove, + .shutdown =3D dw_i2c_plat_shutdown, .driver =3D { .name =3D "i2c_designware", .of_match_table =3D dw_i2c_of_match, --=20 2.54.0.545.g6539524ca2-goog From nobody Sun Jun 14 01:35:13 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C2A5730F934 for ; Mon, 4 May 2026 20:15:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925709; cv=none; b=i2SjEVLBULiJAJfk1hcgnZQSp+rdHC6yoqbYVqisxXvvbYNLaTGrg8sX+TzeolbWfw1ll+YrgbEPz9k7IGAwyYQ3FDNLIkeXQn+PwD9xZuNeBvWnnAjGg6LW3BIsBg8cc4FTRt4k8E83yTFh33SEIxO+UlB6aLmfffvu8YRy1vA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777925709; c=relaxed/simple; bh=T0R/JRPSIi4l6iZ8HhDvk/mxhiX1g/sSVAs1BzrrMLM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C/UbzMyFnTuN64aEXNewjdJI5A7e9R1uxfOD3mGzwHimpFlNWCi55fQPSRm2FSIJquJNpMGHnoJfYmFxuGFTtyw7zrzsDC/wQAPFaQdAiyAdCZfWW+aI7bitIalHZ8pnK5QV/Yv2OMJCklLayQ+RRpEZOAJp4qsL6Um2Jm1fTYM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com; spf=none smtp.mailfrom=wkennington.com; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b=CLITdPNy; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=wkennington.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=wkennington.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=wkennington-com.20251104.gappssmtp.com header.i=@wkennington-com.20251104.gappssmtp.com header.b="CLITdPNy" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-356337f058aso2869421a91.2 for ; Mon, 04 May 2026 13:15:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wkennington-com.20251104.gappssmtp.com; s=20251104; t=1777925707; x=1778530507; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=qgxSZwGgCRa1NejRL1TMSL6Pe1HA8DjUPmozziT+PDM=; b=CLITdPNyDt/qDbNsAGSd55st+7asWryawkz3HawcWyyC3Wuyg3jEqGwTIGfkqvsQz+ poaYwxwMqlQt0t2yA1X1VzrmXwkuwWc4ZxyuOOtbuYJjrHVDCMmkD5TFI+G5SUUW8eEO EwqIW4r0BxLph19cPHAfTStW9gaeQKp1wlyYg8wpBdTbIE0uQ85a6hnBlz8ZP8vrP5IA SuMBxqm9VuGDV3lkJzaW7fhOfMUoUyngTWdNkTrKEv24uQ6k1kGvuZvPv+paPD7zYCPv zyKkDLGK0AgyBztTpaUaVVetvB/lsqxVjE1tE3hDdJPqhkl+2lTV4LMrzcxAnI0Q7yMD 8+NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777925707; x=1778530507; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=qgxSZwGgCRa1NejRL1TMSL6Pe1HA8DjUPmozziT+PDM=; b=RrF+fX+tGxSyT3L+6APkn5Sd410A+9fVKt/Gj++nhQ5XBaE1k6BfTqjoToTVe1Fh7s xx3g68mrEm7ljd9v9U4Ol0wxH+wl8pVXrCr3d5tIcPK7CCqF3GNVjXCz7LXZ5Z7oLz0m ZIzerUEknkEwdkR99PNXpi+CMyWImv49fIXHEU95pn5LSkkaOYPAAFu6iE/A5cuwK+RN 2BgErgXYdGnTYsZ/+89ZiHFwRIJ3wuB809Zubsrc+N84++9oB7FgE1JRjzloFraF/AhS iTxOFbxeBFCTpjnp0kMBAd/rKZQX49zKRkWTVJfZPBxn5OAVXnFVzu8aZ3+rUUicYrKi D4gw== X-Forwarded-Encrypted: i=1; AFNElJ/q2aM5DMQZCcKMJQl1A40oBk/CO/pWUpAdTbgYaPBBAEl6mulyYeJZUq4ves45S2+gdKeh7F38AnPKR+E=@vger.kernel.org X-Gm-Message-State: AOJu0YykbzLHf6IiGJRBJWa30eZxpZqZjqPq3EGbON7DXDY3fjvB2Fy3 JEV9x7iZOonU5cSerrbKtEd5OZf1b1mBTUJttfZw7jaAvENUCj+W/DwpYuabrQol+4E= X-Gm-Gg: AeBDietw8CuUVGs+soUdjZ1aW/yFOWN/Q03BI5hLWAVomSG2gKuFpTSag6DuQZvORei hFpRLQ4XFlnUrr6y8ZzFkSKTeLuwfm9UrfEMyn6DJYyVWCQTYlhwzivlGK0RKLCGQR9sUVuFbM5 h3v3V3zGXHQE5nwQf56G9lW9G0V83YEXl0+oBBXY7spzeIivX+QYL4uyM58GLv3UzpsTGKuQvTu Z74i7pWqK+GRDvCptFXi27icEh7zYag9cVUCaJjZIzoQgBoHXF3Nq+tACFaIyTm4tTTPDII4y8o aQEv5If8c9gRET17L95qm9jkwL1d3MbclF3R4qB86Kw3fNgZ2ysll0hTUBoafbrn3JiyQRrxH8r Y4IBHYCtFHsqUPT773oWRgezATmsR2tE1vf54VEAmbbYrvvhTOWRJCJh5mKy5ODKAkuUSKddc7G b352whccfkN+xV6qG1e+GWgEnD/lqbXq/tVRAqNQW+LP0E//eouC4dbm7as6o/2JDaqF3O1Y7nf ieTnEXUMnTTCg96M7+cJQuMuA== X-Received: by 2002:a17:90a:e7cd:b0:359:fdc0:4621 with SMTP id 98e67ed59e1d1-3650cdb883dmr10970435a91.11.1777925707166; Mon, 04 May 2026 13:15:07 -0700 (PDT) Received: from wakbuild.c.googlers.com (123.143.125.34.bc.googleusercontent.com. [34.125.143.123]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-364bdf2aa41sm20568593a91.4.2026.05.04.13.15.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:15:06 -0700 (PDT) From: "William A. Kennington III" Date: Mon, 04 May 2026 20:15:05 +0000 Subject: [PATCH v3 4/4] i2c: designware: Handle active slave cleanly 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: <20260504-dw-i2c-v3-4-57e56135d602@wkennington.com> References: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> In-Reply-To: <20260504-dw-i2c-v3-0-57e56135d602@wkennington.com> To: Mika Westerberg , Andy Shevchenko , Jan Dabros , Andi Shyti Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, "William A. Kennington III" X-Mailer: b4 0.14.3 When the I2C master attempts a new transaction while the slave controller is shutting down or restarting, it can lead to bus lockups and system bootloops if the hardware enters an inconsistent state. Address this by ensuring that the internal state machines are properly cleared when disabling the controller if slave activity is detected. If the controller remains active after disabling, perform a bus recovery to reset it to a known good state. Signed-off-by: William A. Kennington III --- drivers/i2c/busses/i2c-designware-common.c | 8 ++++++++ drivers/i2c/busses/i2c-designware-core.h | 4 ++-- drivers/i2c/busses/i2c-designware-master.c | 31 ++++++++++++++++++--------= ---- 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busse= s/i2c-designware-common.c index 0703fb29038c..31394d8fe612 100644 --- a/drivers/i2c/busses/i2c-designware-common.c +++ b/drivers/i2c/busses/i2c-designware-common.c @@ -633,6 +633,14 @@ void __i2c_dw_disable(struct dw_i2c_dev *dev) =20 abort_needed =3D (raw_intr_stats & DW_IC_INTR_MST_ON_HOLD) || (ic_stats & DW_IC_STATUS_MASTER_HOLD_TX_FIFO_EMPTY); + + /* + * If we are in slave mode and there is activity, we should also + * trigger an abort to clear the internal state machines. + */ + if (dev->mode =3D=3D DW_IC_SLAVE && (ic_stats & DW_IC_STATUS_SLAVE_ACTIVI= TY)) + abort_needed =3D true; + if (abort_needed) { if (!(enable & DW_IC_ENABLE_ENABLE)) { regmap_write(dev->map, DW_IC_ENABLE, DW_IC_ENABLE_ENABLE); diff --git a/drivers/i2c/busses/i2c-designware-core.h b/drivers/i2c/busses/= i2c-designware-core.h index 8b422249acbd..259b7ce16d0c 100644 --- a/drivers/i2c/busses/i2c-designware-core.h +++ b/drivers/i2c/busses/i2c-designware-core.h @@ -129,8 +129,8 @@ #define DW_IC_STATUS_ACTIVITY BIT(0) #define DW_IC_STATUS_TFE BIT(2) #define DW_IC_STATUS_RFNE BIT(3) -#define DW_IC_STATUS_MASTER_ACTIVITY BIT(5) -#define DW_IC_STATUS_SLAVE_ACTIVITY BIT(6) +#define DW_IC_STATUS_MASTER_ACTIVITY BIT(5) +#define DW_IC_STATUS_SLAVE_ACTIVITY BIT(6) #define DW_IC_STATUS_MASTER_HOLD_TX_FIFO_EMPTY BIT(7) =20 #define DW_IC_SDA_HOLD_RX_SHIFT 16 diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busse= s/i2c-designware-master.c index de929b91d5ea..7a301c8b604e 100644 --- a/drivers/i2c/busses/i2c-designware-master.c +++ b/drivers/i2c/busses/i2c-designware-master.c @@ -785,18 +785,25 @@ __i2c_dw_xfer_one_part(struct dw_i2c_dev *dev, struct= i2c_msg *msgs, size_t num) * IC_RAW_INTR_STAT.MASTER_ON_HOLD holding SCL low. Check if * controller is still ACTIVE before disabling I2C. */ - if (i2c_dw_is_controller_active(dev)) - dev_err(dev->dev, "controller active\n"); - - /* - * We must disable the adapter before returning and signaling the end - * of the current transfer. Otherwise the hardware might continue - * generating interrupts which in turn causes a race condition with - * the following transfer. Needs some more investigation if the - * additional interrupts are a hardware bug or this driver doesn't - * handle them correctly yet. - */ - __i2c_dw_disable_nowait(dev); + if (i2c_dw_is_controller_active(dev)) { + /* + * If the controller is still active after the timeout, attempt a + * bus recovery to clear any potentially locked state. + */ + dev_err(dev->dev, "controller active after xfer, recovering\n"); + i2c_recover_bus(&dev->adapter); + i2c_dw_init(dev); + } else { + /* + * We must disable the adapter before returning and signaling the end + * of the current transfer. Otherwise the hardware might continue + * generating interrupts which in turn causes a race condition with + * the following transfer. Needs some more investigation if the + * additional interrupts are a hardware bug or this driver doesn't + * handle them correctly yet. + */ + __i2c_dw_disable_nowait(dev); + } =20 if (dev->msg_err) return dev->msg_err; --=20 2.54.0.545.g6539524ca2-goog