From: Sven Peter <sven@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Felipe Balbi <balbi@kernel.org>, Janne Grunau <j@jannau.net>,
Alyssa Rosenzweig <alyssa@rosenzweig.io>,
Neal Gompa <neal@gompa.dev>, Vinod Koul <vkoul@kernel.org>,
Kishon Vijay Abraham I <kishon@kernel.org>,
Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Philipp Zabel <p.zabel@pengutronix.de>
Cc: linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, asahi@lists.linux.dev,
linux-arm-kernel@lists.infradead.org,
linux-phy@lists.infradead.org, Sven Peter <sven@kernel.org>,
Hector Martin <marcan@marcan.st>
Subject: [PATCH RFC 07/22] usb: dwc3: apple: Adjust vendor-specific registers during init
Date: Thu, 21 Aug 2025 15:38:59 +0000 [thread overview]
Message-ID: <20250821-atcphy-6-17-v1-7-172beda182b8@kernel.org> (raw)
In-Reply-To: <20250821-atcphy-6-17-v1-0-172beda182b8@kernel.org>
From: Hector Martin <marcan@marcan.st>
When tracing Apple's dwc3 driver under our hypervisor and comparing its
MMIO access with their kernel debug output these vendor-specific
registers have been identified. We don't know exactly what these do
or why they are required but without changing these parameters sometimes
USB3 devices don't work or take an additional 5 seconds to be recognized.
Signed-off-by: Hector Martin <marcan@marcan.st>
Co-developed-by: Sven Peter <sven@kernel.org>
Signed-off-by: Sven Peter <sven@kernel.org>
---
drivers/usb/dwc3/core.c | 17 +++++++++++++++++
drivers/usb/dwc3/core.h | 18 ++++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index f8013ba2bdc22fa5e719df0841b12b84d9465b62..e018e80778cf39a9981d438c7e54534b26cddf63 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1366,6 +1366,23 @@ static int dwc3_core_init(struct dwc3 *dwc)
*/
dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE);
+ /* Apply Apple quirks */
+ if (of_device_is_compatible(dwc->dev->of_node, "apple,t8103-dwc3")) {
+ dwc3_writel(dwc->regs,
+ APPLE_DWC3_CIO_LFPS_OFFSET,
+ APPLE_DWC3_CIO_LFPS_OFFSET_VALUE);
+ dwc3_writel(dwc->regs,
+ APPLE_DWC3_CIO_BW_NGT_OFFSET,
+ APPLE_DWC3_CIO_BW_NGT_OFFSET_VALUE);
+
+ u32 link_timer = dwc3_readl(dwc->regs, APPLE_DWC3_CIO_LINK_TIMER);
+
+ link_timer &= ~APPLE_DWC3_CIO_PENDING_HP_TIMER;
+ link_timer |= FIELD_PREP(APPLE_DWC3_CIO_PENDING_HP_TIMER,
+ APPLE_DWC3_CIO_PENDING_HP_TIMER_VALUE);
+ dwc3_writel(dwc->regs, APPLE_DWC3_CIO_LINK_TIMER, link_timer);
+ }
+
ret = dwc3_phy_setup(dwc);
if (ret)
return ret;
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 98e748cc348dfd9de1962c93fcf9f6a6690c2388..1caa46ca8b2ffb74dd3e58b174122e8f8216dd48 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -181,6 +181,24 @@
#define DWC3_LLUCTL(n) (0xd024 + ((n) * 0x80))
+/*
+ * Apple Silicon dwc3 vendor-specific registers
+ *
+ * These registers were identified by tracing XNU's memory access patterns
+ * and correlating them with debug output over serial to determine their names.
+ * We don't exactly know what these do but without these USB3 devices sometimes
+ * don't work.
+ */
+#define APPLE_DWC3_CIO_LFPS_OFFSET 0xcd38
+#define APPLE_DWC3_CIO_LFPS_OFFSET_VALUE 0xf800f80
+
+#define APPLE_DWC3_CIO_BW_NGT_OFFSET 0xcd3c
+#define APPLE_DWC3_CIO_BW_NGT_OFFSET_VALUE 0xfc00fc0
+
+#define APPLE_DWC3_CIO_LINK_TIMER 0xcd40
+#define APPLE_DWC3_CIO_PENDING_HP_TIMER GENMASK(23, 16)
+#define APPLE_DWC3_CIO_PENDING_HP_TIMER_VALUE 0x14
+
/* Bit fields */
/* Global SoC Bus Configuration INCRx Register 0 */
--
2.34.1
next prev parent reply other threads:[~2025-08-21 22:36 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-21 15:38 [PATCH RFC 00/22] Apple Silicon USB3 support Sven Peter
2025-08-21 15:38 ` [PATCH RFC 01/22] dt-bindings: usb: snps,dwc3: Allow multiple iommus Sven Peter
2025-08-21 22:39 ` Rob Herring (Arm)
2025-08-22 7:22 ` Krzysztof Kozlowski
2025-08-24 8:31 ` Krzysztof Kozlowski
2025-08-27 16:07 ` Sven Peter
2025-08-28 6:54 ` Krzysztof Kozlowski
2025-08-21 15:38 ` [PATCH RFC 02/22] dt-bindings: usb: Add Apple dwc3 Sven Peter
2025-08-21 22:39 ` Rob Herring (Arm)
2025-08-22 7:24 ` Krzysztof Kozlowski
2025-08-24 15:30 ` Sven Peter
2025-08-21 15:38 ` [PATCH RFC 03/22] dt-bindings: phy: Add Apple Type-C PHY Sven Peter
2025-08-21 16:33 ` Janne Grunau
2025-08-21 23:00 ` Rob Herring
2025-08-24 15:33 ` Sven Peter
2025-08-21 22:39 ` Rob Herring (Arm)
2025-08-21 15:38 ` [PATCH RFC 04/22] usb: dwc3: apple: Reset dwc3 during role switches Sven Peter
2025-08-21 23:25 ` Thinh Nguyen
2025-08-24 13:18 ` Janne Grunau
2025-08-28 23:07 ` Thinh Nguyen
2025-08-24 15:24 ` Sven Peter
2025-08-28 23:14 ` Thinh Nguyen
2025-08-21 15:38 ` [PATCH RFC 05/22] usb: dwc3: apple: Do not use host-vbus-glitches workaround Sven Peter
2025-08-21 22:28 ` Thinh Nguyen
2025-08-23 11:42 ` Sven Peter
2025-08-28 23:06 ` Thinh Nguyen
2025-08-21 15:38 ` [PATCH RFC 06/22] usb: dwc3: apple: Use synchronous role switch for apple Sven Peter
2025-08-21 15:38 ` Sven Peter [this message]
2025-08-21 22:18 ` [PATCH RFC 07/22] usb: dwc3: apple: Adjust vendor-specific registers during init Thinh Nguyen
2025-08-23 9:32 ` Sven Peter
2025-08-28 22:51 ` Thinh Nguyen
2025-08-21 15:39 ` [PATCH RFC 08/22] usb: typec: tipd: Clear interrupts first Sven Peter
2025-08-29 9:37 ` Heikki Krogerus
2025-08-21 15:39 ` [PATCH RFC 09/22] usb: typec: tipd: Move initial irq mask to tipd_data Sven Peter
2025-08-21 15:39 ` [PATCH RFC 10/22] usb: typec: tipd: Move switch_power_state " Sven Peter
2025-08-21 15:39 ` [PATCH RFC 11/22] usb: typec: tipd: Trace data status for CD321x correctly Sven Peter
2025-08-21 15:39 ` [PATCH RFC 12/22] usb: typec: tipd: Add cd321x struct with separate size Sven Peter
2025-08-21 15:39 ` [PATCH RFC 13/22] usb: typec: tipd: Read USB4, Thunderbolt and DisplayPort status for cd321x Sven Peter
2025-08-21 16:46 ` Janne Grunau
2025-08-21 15:39 ` [PATCH RFC 14/22] usb: typec: tipd: Register DisplayPort and Thunderbolt altmodes " Sven Peter
2025-08-21 15:39 ` [PATCH RFC 15/22] usb: typec: tipd: Update partner identity when power status was updated Sven Peter
2025-08-21 15:39 ` [PATCH RFC 16/22] usb: typec: tipd: Use read_power_status function in probe Sven Peter
2025-08-21 15:39 ` [PATCH RFC 17/22] usb: typec: tipd: Read data status in probe and cache its value Sven Peter
2025-08-21 15:39 ` [PATCH RFC 18/22] usb: typec: mux: Introduce data_role to mux state Sven Peter
2025-08-21 15:39 ` [PATCH RFC 19/22] usb: typec: tipd: Handle mode transitions for CD321x Sven Peter
2025-08-21 15:39 ` [PATCH RFC 20/22] soc: apple: Add hardware tunable support Sven Peter
2025-08-21 15:39 ` [PATCH RFC 21/22] phy: apple: Add Apple Type-C PHY Sven Peter
2025-08-21 15:39 ` [PATCH RFC 22/22] arm64: dts: apple: t8103: Add Apple Type-C PHY and dwc3 nodes Sven Peter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250821-atcphy-6-17-v1-7-172beda182b8@kernel.org \
--to=sven@kernel.org \
--cc=Thinh.Nguyen@synopsys.com \
--cc=alyssa@rosenzweig.io \
--cc=asahi@lists.linux.dev \
--cc=balbi@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=j@jannau.net \
--cc=kishon@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-usb@vger.kernel.org \
--cc=marcan@marcan.st \
--cc=neal@gompa.dev \
--cc=p.zabel@pengutronix.de \
--cc=robh@kernel.org \
--cc=vkoul@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).