From: Marek Vasut <marex@nabladev.com>
To: linux-usb@vger.kernel.org
Cc: Marek Vasut <marex@nabladev.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
Christian Bruel <christian.bruel@foss.st.com>,
Conor Dooley <conor+dt@kernel.org>,
Fabrice Gasnier <fabrice.gasnier@foss.st.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Pankaj Dev <pankaj.dev@st.com>,
Rahul Kumar <rahul.kumar05@st.com>, Rob Herring <robh@kernel.org>,
Rosen Penev <rosenp@gmail.com>,
Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
Vinod Koul <vkoul@kernel.org>,
devicetree@vger.kernel.org, kernel@dh-electronics.com,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-phy@lists.infradead.org,
linux-stm32@st-md-mailman.stormreply.com
Subject: [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue
Date: Wed, 12 Aug 2026 02:55:46 +0200 [thread overview]
Message-ID: <20260812010157.1772849-7-marex@nabladev.com> (raw)
In-Reply-To: <20260812010157.1772849-1-marex@nabladev.com>
The ST STM32MP2 SoC contains one instance of DWC3 USB controller with
glue logic wrapper around it controlled by syscon. Extend the generic
DWC3 platform driver with ST STM32MP2 glue logic specifics.
Signed-off-by: Marek Vasut <marex@nabladev.com>
---
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Christian Bruel <christian.bruel@foss.st.com>
Cc: Conor Dooley <conor+dt@kernel.org>
Cc: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Neil Armstrong <neil.armstrong@linaro.org>
Cc: Pankaj Dev <pankaj.dev@st.com>
Cc: Rahul Kumar <rahul.kumar05@st.com>
Cc: Rob Herring <robh@kernel.org>
Cc: Rosen Penev <rosenp@gmail.com>
Cc: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Cc: Vinod Koul <vkoul@kernel.org>
Cc: devicetree@vger.kernel.org
Cc: kernel@dh-electronics.com
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-phy@lists.infradead.org
Cc: linux-stm32@st-md-mailman.stormreply.com
Cc: linux-usb@vger.kernel.org
---
drivers/usb/dwc3/dwc3-generic-plat.c | 44 ++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/drivers/usb/dwc3/dwc3-generic-plat.c b/drivers/usb/dwc3/dwc3-generic-plat.c
index ca69ac0eb07ce..0946ed61647b6 100644
--- a/drivers/usb/dwc3/dwc3-generic-plat.c
+++ b/drivers/usb/dwc3/dwc3-generic-plat.c
@@ -22,6 +22,12 @@
#define EIC7700_HSP_AXI_LP_XM_CSYSREQ BIT(0)
#define EIC7700_HSP_AXI_LP_XS_CSYSREQ BIT(16)
+#define STM32MP2_USB3DRCR_HOST_PORT_POWER_CONTROL_PRESENT BIT(0)
+#define STM32MP2_USB3DRCR_OVRCUR_POLARITY BIT(1)
+#define STM32MP2_USB3DRCR_VBUSEN_POLARITY BIT(2)
+#define STM32MP2_USB3DRCR_USB2ONLYH BIT(3)
+#define STM32MP2_USB3DRCR_USB2ONLYD BIT(4)
+
struct dwc3_generic {
struct device *dev;
struct dwc3 dwc;
@@ -85,6 +91,38 @@ static int dwc3_spacemit_k1_init(struct dwc3_generic *dwc3g)
return 0;
}
+static int dwc3_stm32mp25_init(struct dwc3_generic *dwc3g)
+{
+ struct device *dev = dwc3g->dev;
+ bool ovrcur_polarity_low = device_property_read_bool(dev, "st,ovrcur-active-low");
+ bool prt_pwr_ctrl = device_property_read_bool(dev, "st,enable-port-power-control");
+ bool usb2only_conf = device_property_match_string(dev, "phy-names", "usb3-phy") < 0;
+ bool vbusen_polarity_low = device_property_read_bool(dev, "st,vbusen-active-low");
+ struct regmap *regmap;
+ u32 drcr;
+
+ regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node, "st,syscfg", 1, &drcr);
+ if (IS_ERR(regmap))
+ return dev_err_probe(dev, PTR_ERR(regmap), "No st,syscfg phandle specified\n");
+
+ return regmap_update_bits(regmap, drcr,
+ STM32MP2_USB3DRCR_HOST_PORT_POWER_CONTROL_PRESENT |
+ STM32MP2_USB3DRCR_OVRCUR_POLARITY |
+ STM32MP2_USB3DRCR_VBUSEN_POLARITY |
+ STM32MP2_USB3DRCR_USB2ONLYD |
+ STM32MP2_USB3DRCR_USB2ONLYH,
+ FIELD_PREP(STM32MP2_USB3DRCR_HOST_PORT_POWER_CONTROL_PRESENT,
+ prt_pwr_ctrl) |
+ FIELD_PREP(STM32MP2_USB3DRCR_OVRCUR_POLARITY,
+ ovrcur_polarity_low) |
+ FIELD_PREP(STM32MP2_USB3DRCR_VBUSEN_POLARITY,
+ vbusen_polarity_low) |
+ FIELD_PREP(STM32MP2_USB3DRCR_USB2ONLYD,
+ !!usb2only_conf) |
+ FIELD_PREP(STM32MP2_USB3DRCR_USB2ONLYH,
+ !!usb2only_conf));
+}
+
static int dwc3_generic_probe(struct platform_device *pdev)
{
const struct dwc3_generic_config *plat_config;
@@ -231,12 +269,18 @@ static const struct dwc3_generic_config eic7700_dwc3 = {
.properties = DWC3_DEFAULT_PROPERTIES,
};
+static const struct dwc3_generic_config stm32mp25_dwc3 = {
+ .init = dwc3_stm32mp25_init,
+ .properties = DWC3_DEFAULT_PROPERTIES,
+};
+
static const struct of_device_id dwc3_generic_of_match[] = {
{ .compatible = "spacemit,k1-dwc3", &spacemit_k1_dwc3},
{ .compatible = "spacemit,k3-dwc3", },
{ .compatible = "fsl,ls1028a-dwc3", &fsl_ls1028_dwc3},
{ .compatible = "eswin,eic7700-dwc3", &eic7700_dwc3},
{ .compatible = "starfive,jhb100-dwc3", },
+ { .compatible = "st,stm32mp25-dwc3", &stm32mp25_dwc3 },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, dwc3_generic_of_match);
--
2.53.0
next prev parent reply other threads:[~2026-08-12 1:03 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-12 0:55 [PATCH 0/8] arm64: dts: phy: st: usb: Add STM32MP2 USB support Marek Vasut
2026-08-12 0:55 ` [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY Marek Vasut
2026-08-12 1:05 ` sashiko-bot
2026-08-12 2:45 ` Rob Herring (Arm)
2026-08-12 0:55 ` [PATCH 2/8] phy: stm32: Add support for " Marek Vasut
2026-08-12 1:12 ` sashiko-bot
2026-08-12 0:55 ` [PATCH 3/8] dt-bindings: usb: generic-ehci: Document access-controllers property Marek Vasut
2026-08-12 1:10 ` sashiko-bot
2026-08-12 0:55 ` [PATCH 4/8] dt-bindings: usb: generic-ohci: " Marek Vasut
2026-08-12 0:55 ` [PATCH 5/8] dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller Marek Vasut
2026-08-12 1:08 ` sashiko-bot
2026-08-12 0:55 ` Marek Vasut [this message]
2026-08-12 1:11 ` [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue sashiko-bot
2026-08-12 0:55 ` [PATCH 7/8] arm64: dts: st: Add USB nodes on stm32mp231 Marek Vasut
2026-08-12 0:55 ` [PATCH 8/8] arm64: dts: st: Add USB nodes on stm32mp251 Marek Vasut
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=20260812010157.1772849-7-marex@nabladev.com \
--to=marex@nabladev.com \
--cc=Thinh.Nguyen@synopsys.com \
--cc=alexandre.torgue@foss.st.com \
--cc=christian.bruel@foss.st.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=fabrice.gasnier@foss.st.com \
--cc=gregkh@linuxfoundation.org \
--cc=kernel@dh-electronics.com \
--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-stm32@st-md-mailman.stormreply.com \
--cc=linux-usb@vger.kernel.org \
--cc=mcoquelin.stm32@gmail.com \
--cc=neil.armstrong@linaro.org \
--cc=pankaj.dev@st.com \
--cc=rahul.kumar05@st.com \
--cc=robh@kernel.org \
--cc=rosenp@gmail.com \
--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