From: Sven Peter <sven@kernel.org>
To: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Cc: 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>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Frank Li <Frank.Li@nxp.com>, Ran Wang <ran.wang_1@nxp.com>,
Peter Chen <peter.chen@nxp.com>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"asahi@lists.linux.dev" <asahi@lists.linux.dev>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-phy@lists.infradead.org" <linux-phy@lists.infradead.org>
Subject: Re: [PATCH v2 03/22] usb: dwc3: glue: Allow more fine grained control over mode switches
Date: Sat, 20 Sep 2025 13:48:12 +0200 [thread overview]
Message-ID: <5bae4ebe-dd42-4e84-9ee6-c9f6a88f7db5@kernel.org> (raw)
In-Reply-To: <20250919214013.gtbaknjrgd375hm6@synopsys.com>
Hi,
On 19.09.25 23:40, Thinh Nguyen wrote:
> On Sat, Sep 06, 2025, Sven Peter wrote:
>> We need fine grained control over mode switched on the DWC3 controller
>> present on Apple Silicon. Export core, host and gadget init and exit,
>> ptrcap and susphy control functions. Also introduce an additional
>> parameter to probe_data that allows to skip the final initialization
>> step that would bring up host or gadget mode.
>>
>> Signed-off-by: Sven Peter <sven@kernel.org>
>> ---
>> drivers/usb/dwc3/core.c | 16 +++++++++++-----
>> drivers/usb/dwc3/gadget.c | 2 ++
>> drivers/usb/dwc3/glue.h | 14 ++++++++++++++
>> drivers/usb/dwc3/host.c | 2 ++
>> 4 files changed, 29 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
>> index 8002c23a5a02acb8f3e87b2662a53998a4cf4f5c..18056fac44c8732278a650ac2be8b493892c92dd 100644
>> --- a/drivers/usb/dwc3/core.c
>> +++ b/drivers/usb/dwc3/core.c
>> @@ -132,6 +132,7 @@ void dwc3_enable_susphy(struct dwc3 *dwc, bool enable)
>> dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(i), reg);
>> }
>> }
>> +EXPORT_SYMBOL_GPL(dwc3_enable_susphy);
>>
>> void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode, bool ignore_susphy)
>> {
>> @@ -157,6 +158,7 @@ void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode, bool ignore_susphy)
>>
>> dwc->current_dr_role = mode;
>> }
>> +EXPORT_SYMBOL_GPL(dwc3_set_prtcap);
>
> I'm hesitant to export this as is. This function may change the susphy
> bits and expect them to be restored later. It's not meant to be a
> standalone use. At least, we should document how it should be used along
> with the other newly added interfaces.
Sure, I can otherwise also open-code the susphy change inside
dwc3_apple_phy_set_mode anyway if you prefer to keep this private to the
dwc3 core. I should restore it there to the original value anyway I
guess after phy_set_mode.
>>
>> static void __dwc3_set_mode(struct work_struct *work)
[...]
>> int dwc3_gadget_suspend(struct dwc3 *dwc)
>> {
>> diff --git a/drivers/usb/dwc3/glue.h b/drivers/usb/dwc3/glue.h
>> index 2efd00e763be4fc51911f32d43054059e61fb43a..633268c76fe4c7fdc312c9705dfa7cf7ccf3544c 100644
>> --- a/drivers/usb/dwc3/glue.h
>> +++ b/drivers/usb/dwc3/glue.h
>> @@ -15,16 +15,30 @@
>> * @res: resource for the DWC3 core mmio region
>> * @ignore_clocks_and_resets: clocks and resets defined for the device should
>> * be ignored by the DWC3 core, as they are managed by the glue
>> + * @skip_core_init_mode: skip the finial initialization of the target mode, as
>
> finial -> final?
Whoops, yes, I thought I ran a spell checker over this because I usually
add a lot of typos but must've forgotten :-)
>
>> + * it must be managed by the glue
>> */
[...]
>>
>> +int dwc3_core_init(struct dwc3 *dwc);
>> +void dwc3_core_exit(struct dwc3 *dwc);
>> +
>> +int dwc3_host_init(struct dwc3 *dwc);
>> +void dwc3_host_exit(struct dwc3 *dwc);
>> +int dwc3_gadget_init(struct dwc3 *dwc);
>> +void dwc3_gadget_exit(struct dwc3 *dwc);
>> +
>> +void dwc3_enable_susphy(struct dwc3 *dwc, bool enable);
>> +void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode, bool ignore_susphy);
>> +
>
> We should document these interfaces. The dwc3_core_probe() does all of
> the above in the proper order. It's not obvious why these are needed and
> how they should be used.
Very good point, I'll add documentation for all of these!
Thanks for the review,
Sven
WARNING: multiple messages have this Message-ID (diff)
From: Sven Peter <sven@kernel.org>
To: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Cc: 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>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Frank Li <Frank.Li@nxp.com>, Ran Wang <ran.wang_1@nxp.com>,
Peter Chen <peter.chen@nxp.com>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"asahi@lists.linux.dev" <asahi@lists.linux.dev>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-phy@lists.infradead.org" <linux-phy@lists.infradead.org>
Subject: Re: [PATCH v2 03/22] usb: dwc3: glue: Allow more fine grained control over mode switches
Date: Sat, 20 Sep 2025 13:48:12 +0200 [thread overview]
Message-ID: <5bae4ebe-dd42-4e84-9ee6-c9f6a88f7db5@kernel.org> (raw)
In-Reply-To: <20250919214013.gtbaknjrgd375hm6@synopsys.com>
Hi,
On 19.09.25 23:40, Thinh Nguyen wrote:
> On Sat, Sep 06, 2025, Sven Peter wrote:
>> We need fine grained control over mode switched on the DWC3 controller
>> present on Apple Silicon. Export core, host and gadget init and exit,
>> ptrcap and susphy control functions. Also introduce an additional
>> parameter to probe_data that allows to skip the final initialization
>> step that would bring up host or gadget mode.
>>
>> Signed-off-by: Sven Peter <sven@kernel.org>
>> ---
>> drivers/usb/dwc3/core.c | 16 +++++++++++-----
>> drivers/usb/dwc3/gadget.c | 2 ++
>> drivers/usb/dwc3/glue.h | 14 ++++++++++++++
>> drivers/usb/dwc3/host.c | 2 ++
>> 4 files changed, 29 insertions(+), 5 deletions(-)
>>
>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
>> index 8002c23a5a02acb8f3e87b2662a53998a4cf4f5c..18056fac44c8732278a650ac2be8b493892c92dd 100644
>> --- a/drivers/usb/dwc3/core.c
>> +++ b/drivers/usb/dwc3/core.c
>> @@ -132,6 +132,7 @@ void dwc3_enable_susphy(struct dwc3 *dwc, bool enable)
>> dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(i), reg);
>> }
>> }
>> +EXPORT_SYMBOL_GPL(dwc3_enable_susphy);
>>
>> void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode, bool ignore_susphy)
>> {
>> @@ -157,6 +158,7 @@ void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode, bool ignore_susphy)
>>
>> dwc->current_dr_role = mode;
>> }
>> +EXPORT_SYMBOL_GPL(dwc3_set_prtcap);
>
> I'm hesitant to export this as is. This function may change the susphy
> bits and expect them to be restored later. It's not meant to be a
> standalone use. At least, we should document how it should be used along
> with the other newly added interfaces.
Sure, I can otherwise also open-code the susphy change inside
dwc3_apple_phy_set_mode anyway if you prefer to keep this private to the
dwc3 core. I should restore it there to the original value anyway I
guess after phy_set_mode.
>>
>> static void __dwc3_set_mode(struct work_struct *work)
[...]
>> int dwc3_gadget_suspend(struct dwc3 *dwc)
>> {
>> diff --git a/drivers/usb/dwc3/glue.h b/drivers/usb/dwc3/glue.h
>> index 2efd00e763be4fc51911f32d43054059e61fb43a..633268c76fe4c7fdc312c9705dfa7cf7ccf3544c 100644
>> --- a/drivers/usb/dwc3/glue.h
>> +++ b/drivers/usb/dwc3/glue.h
>> @@ -15,16 +15,30 @@
>> * @res: resource for the DWC3 core mmio region
>> * @ignore_clocks_and_resets: clocks and resets defined for the device should
>> * be ignored by the DWC3 core, as they are managed by the glue
>> + * @skip_core_init_mode: skip the finial initialization of the target mode, as
>
> finial -> final?
Whoops, yes, I thought I ran a spell checker over this because I usually
add a lot of typos but must've forgotten :-)
>
>> + * it must be managed by the glue
>> */
[...]
>>
>> +int dwc3_core_init(struct dwc3 *dwc);
>> +void dwc3_core_exit(struct dwc3 *dwc);
>> +
>> +int dwc3_host_init(struct dwc3 *dwc);
>> +void dwc3_host_exit(struct dwc3 *dwc);
>> +int dwc3_gadget_init(struct dwc3 *dwc);
>> +void dwc3_gadget_exit(struct dwc3 *dwc);
>> +
>> +void dwc3_enable_susphy(struct dwc3 *dwc, bool enable);
>> +void dwc3_set_prtcap(struct dwc3 *dwc, u32 mode, bool ignore_susphy);
>> +
>
> We should document these interfaces. The dwc3_core_probe() does all of
> the above in the proper order. It's not obvious why these are needed and
> how they should be used.
Very good point, I'll add documentation for all of these!
Thanks for the review,
Sven
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
next prev parent reply other threads:[~2025-09-20 11:48 UTC|newest]
Thread overview: 109+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-06 15:43 [PATCH v2 00/22] Apple Silicon USB3 support Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 01/22] dt-bindings: usb: Add Apple dwc3 Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-07 9:45 ` Krzysztof Kozlowski
2025-09-07 9:45 ` Krzysztof Kozlowski
2025-09-06 15:43 ` [PATCH v2 02/22] usb: dwc3: dwc3_power_off_all_roothub_ports: Use ioremap_np when required Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-11 1:37 ` Thinh Nguyen
2025-09-11 1:37 ` Thinh Nguyen
2025-09-06 15:43 ` [PATCH v2 03/22] usb: dwc3: glue: Allow more fine grained control over mode switches Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-19 21:40 ` Thinh Nguyen
2025-09-19 21:40 ` Thinh Nguyen
2025-09-20 11:48 ` Sven Peter [this message]
2025-09-20 11:48 ` Sven Peter
2025-09-24 22:49 ` Thinh Nguyen
2025-09-24 22:49 ` Thinh Nguyen
2025-09-06 15:43 ` [PATCH v2 04/22] usb: dwc3: Add Apple Silicon DWC3 glue layer driver Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-11 1:46 ` Thinh Nguyen
2025-09-11 1:46 ` Thinh Nguyen
2025-09-19 22:40 ` Thinh Nguyen
2025-09-19 22:40 ` Thinh Nguyen
2025-09-21 13:40 ` Sven Peter
2025-09-21 13:40 ` Sven Peter
2025-09-24 22:36 ` Thinh Nguyen
2025-09-24 22:36 ` Thinh Nguyen
2025-09-06 15:43 ` [PATCH v2 05/22] usb: typec: tipd: Clear interrupts first Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 06/22] usb: typec: tipd: Move initial irq mask to tipd_data Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 07/22] usb: typec: tipd: Move switch_power_state " Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 08/22] usb: typec: tipd: Trace data status for CD321x correctly Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 09/22] usb: typec: tipd: Add cd321x struct with separate size Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 10/22] usb: typec: tipd: Read USB4, Thunderbolt and DisplayPort status for cd321x Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-09 9:41 ` Heikki Krogerus
2025-09-09 9:41 ` Heikki Krogerus
2025-09-06 15:43 ` [PATCH v2 11/22] usb: typec: tipd: Register DisplayPort and Thunderbolt altmodes " Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-09 9:47 ` Heikki Krogerus
2025-09-09 9:47 ` Heikki Krogerus
2025-09-06 15:43 ` [PATCH v2 12/22] usb: typec: tipd: Update partner identity when power status was updated Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-07 8:54 ` Sergey Shtylyov
2025-09-07 8:54 ` Sergey Shtylyov
2025-09-07 18:59 ` Sven Peter
2025-09-07 18:59 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 13/22] usb: typec: tipd: Use read_power_status function in probe Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-09 9:56 ` Heikki Krogerus
2025-09-09 9:56 ` Heikki Krogerus
2025-09-06 15:43 ` [PATCH v2 14/22] usb: typec: tipd: Read data status in probe and cache its value Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-09 10:02 ` Heikki Krogerus
2025-09-09 10:02 ` Heikki Krogerus
2025-09-09 10:03 ` Heikki Krogerus
2025-09-09 10:03 ` Heikki Krogerus
2025-09-06 15:43 ` [PATCH v2 15/22] usb: typec: tipd: Handle mode transitions for CD321x Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-09 10:10 ` Heikki Krogerus
2025-09-09 10:10 ` Heikki Krogerus
2025-09-11 9:26 ` Janne Grunau
2025-09-11 9:26 ` Janne Grunau
2025-09-06 15:43 ` [PATCH v2 16/22] dt-bindings: phy: Add Apple Type-C PHY Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-09 17:04 ` Rob Herring
2025-09-09 17:04 ` Rob Herring
2025-09-06 15:43 ` [PATCH v2 17/22] soc: apple: Add hardware tunable support Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-07 12:46 ` Alyssa Anne Rosenzweig
2025-09-07 12:46 ` Alyssa Anne Rosenzweig
2025-09-06 15:43 ` [PATCH v2 18/22] phy: apple: Add Apple Type-C PHY Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-07 13:12 ` Alyssa Anne Rosenzweig
2025-09-07 13:12 ` Alyssa Anne Rosenzweig
2025-09-07 13:15 ` Alyssa Anne Rosenzweig
2025-09-07 13:15 ` Alyssa Anne Rosenzweig
2025-09-07 13:55 ` kernel test robot
2025-09-08 15:04 ` Philipp Zabel
2025-09-08 15:04 ` Philipp Zabel
2025-09-08 18:12 ` Janne Grunau
2025-09-08 18:12 ` Janne Grunau
2025-09-09 22:25 ` Nathan Chancellor
2025-09-09 22:25 ` Nathan Chancellor
2025-09-06 15:43 ` [PATCH v2 19/22] arm64: dts: apple: t8103: Mark ATC USB AON domains as always-on Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 20/22] arm64: dts: apple: t8103: Add Apple Type-C PHY and dwc3 nodes Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-07 9:47 ` Krzysztof Kozlowski
2025-09-07 9:47 ` Krzysztof Kozlowski
2025-09-07 12:43 ` Alyssa Anne Rosenzweig
2025-09-07 12:43 ` Alyssa Anne Rosenzweig
2025-09-07 12:51 ` Greg Kroah-Hartman
2025-09-07 12:51 ` Greg Kroah-Hartman
2025-09-07 15:01 ` Krzysztof Kozlowski
2025-09-07 15:01 ` Krzysztof Kozlowski
2025-09-07 19:02 ` Sven Peter
2025-09-07 19:02 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 21/22] arm64: dts: apple: t8112: " Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-06 15:43 ` [PATCH v2 22/22] arm64: dts: apple: t600x: " Sven Peter
2025-09-06 15:43 ` Sven Peter
2025-09-11 10:10 ` [PATCH v2 00/22] Apple Silicon USB3 support Neal Gompa
2025-09-11 10:10 ` Neal Gompa
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=5bae4ebe-dd42-4e84-9ee6-c9f6a88f7db5@kernel.org \
--to=sven@kernel.org \
--cc=Frank.Li@nxp.com \
--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=neal@gompa.dev \
--cc=p.zabel@pengutronix.de \
--cc=peter.chen@nxp.com \
--cc=ran.wang_1@nxp.com \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.