* [PATCH 0/8] arm64: dts: phy: st: usb: Add STM32MP2 USB support
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Add USB support for STM32MP23xx/STM32MP25xx SoCs. This includes USB 2.0
FEMTO-PHY driver, DWC3 glue code and DT adjustments. Parts of this are
taken from ST downstream kernel fork, reduced, or rewritten, since not
all of the content there was useful and bits which might be missing and
are useful can be added later.
Unlike the downstream implementation, the DWC3 glue code is using plain
dwc3-generic-plat, the EHCI and OHCI controllers are instantiated as
plain generic controllers without any wrapper glue driver, and the USB2
PHY driver is simplified.
Both USB 2.0 Host controller and DWC3 super-speed controller are tested.
Marek Vasut (5):
dt-bindings: usb: generic-ehci: Document access-controllers property
dt-bindings: usb: generic-ohci: Document access-controllers property
dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller
glue
arm64: dts: st: Add USB nodes on stm32mp231
Pankaj Dev (3):
dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
arm64: dts: st: Add USB nodes on stm32mp251
.../bindings/phy/st,stm32-usb2phy.yaml | 72 ++++
.../devicetree/bindings/usb/generic-ehci.yaml | 3 +
.../devicetree/bindings/usb/generic-ohci.yaml | 3 +
.../bindings/usb/st,stm32mp25-dwc3.yaml | 108 ++++++
arch/arm64/boot/dts/st/stm32mp231.dtsi | 77 ++++
arch/arm64/boot/dts/st/stm32mp251.dtsi | 61 +++
drivers/phy/st/Kconfig | 10 +
drivers/phy/st/Makefile | 1 +
drivers/phy/st/phy-stm32-usb2phy.c | 356 ++++++++++++++++++
drivers/usb/dwc3/dwc3-generic-plat.c | 44 +++
10 files changed, 735 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
create mode 100644 Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
create mode 100644 drivers/phy/st/phy-stm32-usb2phy.c
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
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 0/8] arm64: dts: phy: st: usb: Add STM32MP2 USB support
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Add USB support for STM32MP23xx/STM32MP25xx SoCs. This includes USB 2.0
FEMTO-PHY driver, DWC3 glue code and DT adjustments. Parts of this are
taken from ST downstream kernel fork, reduced, or rewritten, since not
all of the content there was useful and bits which might be missing and
are useful can be added later.
Unlike the downstream implementation, the DWC3 glue code is using plain
dwc3-generic-plat, the EHCI and OHCI controllers are instantiated as
plain generic controllers without any wrapper glue driver, and the USB2
PHY driver is simplified.
Both USB 2.0 Host controller and DWC3 super-speed controller are tested.
Marek Vasut (5):
dt-bindings: usb: generic-ehci: Document access-controllers property
dt-bindings: usb: generic-ohci: Document access-controllers property
dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller
glue
arm64: dts: st: Add USB nodes on stm32mp231
Pankaj Dev (3):
dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
arm64: dts: st: Add USB nodes on stm32mp251
.../bindings/phy/st,stm32-usb2phy.yaml | 72 ++++
.../devicetree/bindings/usb/generic-ehci.yaml | 3 +
.../devicetree/bindings/usb/generic-ohci.yaml | 3 +
.../bindings/usb/st,stm32mp25-dwc3.yaml | 108 ++++++
arch/arm64/boot/dts/st/stm32mp231.dtsi | 77 ++++
arch/arm64/boot/dts/st/stm32mp251.dtsi | 61 +++
drivers/phy/st/Kconfig | 10 +
drivers/phy/st/Makefile | 1 +
drivers/phy/st/phy-stm32-usb2phy.c | 356 ++++++++++++++++++
drivers/usb/dwc3/dwc3-generic-plat.c | 44 +++
10 files changed, 735 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
create mode 100644 Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
create mode 100644 drivers/phy/st/phy-stm32-usb2phy.c
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
--
2.53.0
^ permalink raw reply [flat|nested] 36+ messages in thread
* [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Pankaj Dev, Clément Le Goffic, Fabrice Gasnier, Marek Vasut,
Rahul Kumar, Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
From: Pankaj Dev <pankaj.dev@st.com>
Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
Two such PHYs in total are present in STM32MP25 SoC, they both are
slightly different, therefore they use different compatible string
to discern them.
Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
Signed-off-by: Rahul Kumar <rahul.kumar05@st.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
---
.../bindings/phy/st,stm32-usb2phy.yaml | 72 +++++++++++++++++++
1 file changed, 72 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
diff --git a/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
new file mode 100644
index 0000000000000..ca9fc3b87383c
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/st,stm32-usb2phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STMicroelectronics STM32 MPU High-Speed USB PHY
+
+description:
+ USB2 PHY block in STM32 is attached to USB 2.0 Host controller and
+ USB 2.0 side of DWC3 DRD controller, and provides the USB LS/FS/HS
+ connectivity.
+
+maintainers:
+ - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
+ - Marek Vasut <marex@nabladev.com>
+ - Pankaj Dev <pankaj.dev@st.com>
+
+properties:
+ compatible:
+ enum:
+ - st,stm32mp25-usb2phy1
+ - st,stm32mp25-usb2phy2
+
+ "#phy-cells":
+ const: 0
+
+ clocks:
+ maxItems: 1
+
+ resets:
+ maxItems: 1
+
+ vdd33-supply:
+ description: Phandle to regulator providing 3V3 power supply to the USB2 HS PHY
+
+ st,syscfg:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: Phandle to system configuration controller.
+ items:
+ - items:
+ - description: phandle to syscfg
+ - description: USB2PHY control offset within syscfg
+
+ "#clock-cells":
+ const: 0
+
+required:
+ - compatible
+ - "#clock-cells"
+ - "#phy-cells"
+ - clocks
+ - resets
+ - st,syscfg
+ - vdd33-supply
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/st,stm32mp25-rcc.h>
+ #include <dt-bindings/reset/st,stm32mp25-rcc.h>
+
+ usb2_phy2: usb-phy {
+ compatible = "st,stm32mp25-usb2phy";
+ #clock-cells = <0>;
+ #phy-cells = <0>;
+ clocks = <&rcc CK_KER_USB2PHY2>;
+ resets = <&rcc USB2PHY2_R>;
+ st,syscfg = <&syscfg 0x2800>;
+ vdd33-supply = <&vdd33usb>;
+ };
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Pankaj Dev, Clément Le Goffic, Fabrice Gasnier, Marek Vasut,
Rahul Kumar, Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
From: Pankaj Dev <pankaj.dev@st.com>
Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
Two such PHYs in total are present in STM32MP25 SoC, they both are
slightly different, therefore they use different compatible string
to discern them.
Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
Signed-off-by: Rahul Kumar <rahul.kumar05@st.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
---
.../bindings/phy/st,stm32-usb2phy.yaml | 72 +++++++++++++++++++
1 file changed, 72 insertions(+)
create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
diff --git a/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
new file mode 100644
index 0000000000000..ca9fc3b87383c
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
@@ -0,0 +1,72 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/phy/st,stm32-usb2phy.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STMicroelectronics STM32 MPU High-Speed USB PHY
+
+description:
+ USB2 PHY block in STM32 is attached to USB 2.0 Host controller and
+ USB 2.0 side of DWC3 DRD controller, and provides the USB LS/FS/HS
+ connectivity.
+
+maintainers:
+ - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
+ - Marek Vasut <marex@nabladev.com>
+ - Pankaj Dev <pankaj.dev@st.com>
+
+properties:
+ compatible:
+ enum:
+ - st,stm32mp25-usb2phy1
+ - st,stm32mp25-usb2phy2
+
+ "#phy-cells":
+ const: 0
+
+ clocks:
+ maxItems: 1
+
+ resets:
+ maxItems: 1
+
+ vdd33-supply:
+ description: Phandle to regulator providing 3V3 power supply to the USB2 HS PHY
+
+ st,syscfg:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: Phandle to system configuration controller.
+ items:
+ - items:
+ - description: phandle to syscfg
+ - description: USB2PHY control offset within syscfg
+
+ "#clock-cells":
+ const: 0
+
+required:
+ - compatible
+ - "#clock-cells"
+ - "#phy-cells"
+ - clocks
+ - resets
+ - st,syscfg
+ - vdd33-supply
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/st,stm32mp25-rcc.h>
+ #include <dt-bindings/reset/st,stm32mp25-rcc.h>
+
+ usb2_phy2: usb-phy {
+ compatible = "st,stm32mp25-usb2phy";
+ #clock-cells = <0>;
+ #phy-cells = <0>;
+ clocks = <&rcc CK_KER_USB2PHY2>;
+ resets = <&rcc USB2PHY2_R>;
+ st,syscfg = <&syscfg 0x2800>;
+ vdd33-supply = <&vdd33usb>;
+ };
--
2.53.0
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 2/8] phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Pankaj Dev, Christian Bruel, Fabrice Gasnier, Marek Vasut,
Rahul Kumar, Alexandre Torgue, Conor Dooley, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rob Herring,
Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree, kernel,
linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
From: Pankaj Dev <pankaj.dev@st.com>
Add USB2 PHY driver for STM32MP25 USB2 controllers, which includes the
USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
Two such PHYs in total are present in STM32MP25 SoC, they both are
slightly different, therefore they use different compatible string
to discern them.
Signed-off-by: Christian Bruel <christian.bruel@foss.st.com>
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
Signed-off-by: Rahul Kumar <rahul.kumar05@st.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/phy/st/Kconfig | 10 +
drivers/phy/st/Makefile | 1 +
drivers/phy/st/phy-stm32-usb2phy.c | 356 +++++++++++++++++++++++++++++
3 files changed, 367 insertions(+)
create mode 100644 drivers/phy/st/phy-stm32-usb2phy.c
diff --git a/drivers/phy/st/Kconfig b/drivers/phy/st/Kconfig
index 49206185e5633..2835bb67bca9e 100644
--- a/drivers/phy/st/Kconfig
+++ b/drivers/phy/st/Kconfig
@@ -58,3 +58,13 @@ config PHY_STM32_USBPHYC
used by an HS USB Host controller, and the second one is shared
between an HS USB OTG controller and an HS USB Host controller,
selected by a USB switch.
+
+config PHY_STM32_USB2PHY
+ tristate "STMicroelectronics STM32MP25 USB2.0 PHY Controller driver"
+ depends on ARCH_STM32 || COMPILE_TEST
+ depends on COMMON_CLK
+ select GENERIC_PHY
+ help
+ Enable this to support the High-Speed USB 2.0 transceivers that are
+ part of the STMicroelectronics STM32MP25 SoCs. The PHY itself is a
+ Synopsys FEMTO-PHY.
diff --git a/drivers/phy/st/Makefile b/drivers/phy/st/Makefile
index cb80e954ea9f0..4945df5ed78a8 100644
--- a/drivers/phy/st/Makefile
+++ b/drivers/phy/st/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_PHY_ST_SPEAR1340_MIPHY) += phy-spear1340-miphy.o
obj-$(CONFIG_PHY_STIH407_USB) += phy-stih407-usb.o
obj-$(CONFIG_PHY_STM32_COMBOPHY) += phy-stm32-combophy.o
obj-$(CONFIG_PHY_STM32_USBPHYC) += phy-stm32-usbphyc.o
+obj-$(CONFIG_PHY_STM32_USB2PHY) += phy-stm32-usb2phy.o
diff --git a/drivers/phy/st/phy-stm32-usb2phy.c b/drivers/phy/st/phy-stm32-usb2phy.c
new file mode 100644
index 0000000000000..d902354f88b69
--- /dev/null
+++ b/drivers/phy/st/phy-stm32-usb2phy.c
@@ -0,0 +1,356 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * STMicroelectronics STM32 USB2 PHY Controller driver
+ * Currently Only supported for STM32MP25
+ *
+ * Copyright (C) 2022 STMicroelectronics
+ * Author(s): Pankaj Dev <pankaj.dev@st.com>.
+ */
+#include <linux/bitfield.h>
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/phy/phy.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
+#include <linux/usb/role.h>
+#include <linux/mfd/syscon.h>
+
+#define SYSCFG_USB2PHY2CR_USB2PHY2CMN BIT(2)
+#define SYSCFG_USB2PHY2CR_VBUSVALID BIT(4)
+#define SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL BIT(5)
+#define SYSCFG_USB2PHY2CR_VBUSVLDEXT BIT(6)
+
+struct stm32_usb2phy {
+ struct phy *phy;
+ struct regmap *regmap;
+ struct device *dev;
+ struct reset_control *rstc;
+ struct clk *phyref;
+ struct regulator *vdd33;
+ struct clk_hw clk48_hw;
+ const struct stm32mp2_usb2phy_hw_data *hw_data;
+ atomic_t en_refcnt;
+ enum phy_mode mode;
+ u32 cr_offset;
+ bool is_init;
+};
+
+struct stm32mp2_usb2phy_hw_data {
+ u32 phyrefsel_mask;
+ bool is_usb2_host_only;
+};
+
+static int stm32_usb2phy_enable(struct stm32_usb2phy *phy_dev)
+{
+ const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
+ unsigned long rate;
+ int refsel, ret;
+
+ /* Check if a phy is already init or clk48 in use */
+ if (atomic_inc_return(&phy_dev->en_refcnt) > 1)
+ return 0;
+
+ rate = clk_get_rate(phy_dev->phyref);
+ if (rate == 19200000)
+ refsel = 0;
+ else if (rate == 20000000)
+ refsel = 1;
+ else if (rate == 24000000)
+ refsel = 2;
+ else
+ return -EINVAL;
+
+ ret = regmap_update_bits(phy_dev->regmap,
+ phy_dev->cr_offset,
+ phy_data->phyrefsel_mask,
+ field_prep(phy_data->phyrefsel_mask, refsel));
+ if (ret)
+ return ret;
+
+ if (phy_data->is_usb2_host_only) {
+ /*
+ * The clock should default to active after standby, as it is
+ * needed when resuming OHCI to access its registers.
+ * CMN is default reset to 1, so enforce it is cleared, when the
+ * clock enable request from OHCI driver comes at resume time.
+ */
+ ret = regmap_clear_bits(phy_dev->regmap, phy_dev->cr_offset,
+ SYSCFG_USB2PHY2CR_USB2PHY2CMN);
+ if (ret)
+ return ret;
+ }
+
+ ret = regulator_enable(phy_dev->vdd33);
+ if (ret)
+ return ret;
+
+ ret = clk_prepare_enable(phy_dev->phyref);
+ if (ret)
+ goto error_regdis;
+
+ ret = reset_control_deassert(phy_dev->rstc);
+ if (ret)
+ goto error_clkdis;
+
+ return 0;
+
+error_clkdis:
+ clk_disable_unprepare(phy_dev->phyref);
+error_regdis:
+ regulator_disable(phy_dev->vdd33);
+
+ return ret;
+}
+
+static int stm32_usb2phy_disable(struct stm32_usb2phy *phy_dev)
+{
+ int ret;
+
+ /* Check if a phy is still init or clk48 in use */
+ if (atomic_dec_return(&phy_dev->en_refcnt) > 0)
+ return 0;
+
+ ret = reset_control_assert(phy_dev->rstc);
+ if (ret)
+ return ret;
+
+ clk_disable_unprepare(phy_dev->phyref);
+
+ return regulator_disable(phy_dev->vdd33);
+}
+
+static int stm32_usb2phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
+{
+ struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
+ const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
+ u32 val, mask = SYSCFG_USB2PHY2CR_USB2PHY2CMN;
+ int ret;
+
+ if (mode == PHY_MODE_USB_HOST) {
+ val = 0;
+ if (!phy_data->is_usb2_host_only) {
+ mask |= SYSCFG_USB2PHY2CR_VBUSVLDEXT |
+ SYSCFG_USB2PHY2CR_VBUSVALID;
+ if (submode != USB_ROLE_NONE)
+ val |= SYSCFG_USB2PHY2CR_VBUSVALID;
+ }
+ } else if (mode == PHY_MODE_USB_DEVICE) {
+ val = SYSCFG_USB2PHY2CR_USB2PHY2CMN |
+ SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL;
+ mask |= SYSCFG_USB2PHY2CR_VBUSVALID |
+ SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL |
+ SYSCFG_USB2PHY2CR_VBUSVLDEXT;
+ if (submode != USB_ROLE_NONE)
+ val |= SYSCFG_USB2PHY2CR_VBUSVLDEXT;
+ } else {
+ return -EINVAL;
+ }
+
+ ret = regmap_update_bits(phy_dev->regmap, phy_dev->cr_offset, mask, val);
+ if (ret)
+ return ret;
+
+ phy_dev->mode = mode;
+
+ return 0;
+}
+
+static int stm32_usb2phy_init(struct phy *phy)
+{
+ struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
+ int ret;
+
+ ret = stm32_usb2phy_enable(phy_dev);
+ if (ret)
+ return ret;
+
+ if (phy_dev->mode != PHY_MODE_INVALID) {
+ ret = stm32_usb2phy_set_mode(phy, phy_dev->mode, USB_ROLE_NONE);
+ if (ret) {
+ stm32_usb2phy_disable(phy_dev);
+ return ret;
+ }
+ }
+
+ phy_dev->is_init = true;
+
+ return 0;
+}
+
+static int stm32_usb2phy_exit(struct phy *phy)
+{
+ struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
+ int ret;
+
+ ret = stm32_usb2phy_disable(phy_dev);
+ if (ret)
+ return ret;
+
+ phy_dev->is_init = false;
+
+ return 0;
+}
+
+static const struct phy_ops stm32_usb2phy_data = {
+ .init = stm32_usb2phy_init,
+ .exit = stm32_usb2phy_exit,
+ .set_mode = stm32_usb2phy_set_mode,
+ .owner = THIS_MODULE,
+};
+
+static int stm32_usb2phy_clk48_prepare(struct clk_hw *hw)
+{
+ struct stm32_usb2phy *phy_dev = container_of(hw, struct stm32_usb2phy,
+ clk48_hw);
+
+ return stm32_usb2phy_enable(phy_dev);
+}
+
+static void stm32_usb2phy_clk48_unprepare(struct clk_hw *hw)
+{
+ struct stm32_usb2phy *phy_dev = container_of(hw, struct stm32_usb2phy,
+ clk48_hw);
+
+ stm32_usb2phy_disable(phy_dev);
+}
+
+static unsigned long stm32_usb2phy_clk48_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ return 48000000;
+}
+
+static const struct clk_ops stm32_usb2phy_clk48_ops = {
+ .prepare = stm32_usb2phy_clk48_prepare,
+ .unprepare = stm32_usb2phy_clk48_unprepare,
+ .recalc_rate = stm32_usb2phy_clk48_recalc_rate,
+};
+
+static int stm32_usb2phy_probe(struct platform_device *pdev)
+{
+ struct clk_init_data init = { .ops = &stm32_usb2phy_clk48_ops };
+ struct phy_provider *phy_provider;
+ struct device *dev = &pdev->dev;
+ struct stm32_usb2phy *phy_dev;
+ struct phy *phy;
+ int ret;
+
+ phy_dev = devm_kzalloc(dev, sizeof(*phy_dev), GFP_KERNEL);
+ if (!phy_dev)
+ return -ENOMEM;
+
+ phy_dev->dev = dev;
+ dev_set_drvdata(dev, phy_dev);
+
+ phy_dev->rstc = devm_reset_control_get(dev, NULL);
+ if (IS_ERR(phy_dev->rstc))
+ return dev_err_probe(dev, PTR_ERR(phy_dev->rstc), "Failed to get USB2PHY reset\n");
+
+ phy_dev->phyref = devm_clk_get(dev, NULL);
+ if (IS_ERR(phy_dev->phyref))
+ return dev_err_probe(dev, PTR_ERR(phy_dev->phyref), "Failed to get phyref clk\n");
+
+ phy_dev->vdd33 = devm_regulator_get_optional(dev, "vdd33");
+ if (IS_ERR(phy_dev->vdd33))
+ return dev_err_probe(dev, PTR_ERR(phy_dev->vdd33), "Failed to get vdd3v3 supply\n");
+
+ phy_dev->regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node, "st,syscfg", 1,
+ &phy_dev->cr_offset);
+ if (IS_ERR(phy_dev->regmap)) {
+ return dev_err_probe(dev, PTR_ERR(phy_dev->regmap),
+ "No st,syscfg phandle specified\n");
+ }
+
+ phy_dev->hw_data = device_get_match_data(dev);
+
+ phy = devm_phy_create(dev, NULL, &stm32_usb2phy_data);
+ if (IS_ERR(phy))
+ return dev_err_probe(dev, PTR_ERR(phy), "Failed to create PHY\n");
+
+ phy_dev->phy = phy;
+ phy_set_drvdata(phy, phy_dev);
+
+ phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+ if (IS_ERR(phy_provider))
+ return PTR_ERR(phy_provider);
+
+ init.name = devm_kasprintf(dev, GFP_KERNEL, "clk_%s_48m",
+ of_node_full_name(dev->of_node));
+ if (!init.name)
+ return -ENOMEM;
+
+ phy_dev->clk48_hw.init = &init;
+
+ ret = devm_clk_hw_register(phy_dev->dev, &phy_dev->clk48_hw);
+ if (ret)
+ return dev_err_probe(phy_dev->dev, ret, "Failed to register 48 MHz clock\n");
+
+ ret = devm_of_clk_add_hw_provider(phy_dev->dev, of_clk_hw_simple_get, &phy_dev->clk48_hw);
+ if (ret)
+ return dev_err_probe(phy_dev->dev, ret, "Failed to add 48 MHz clock provider\n");
+
+ return 0;
+}
+
+static int stm32_usb2phy_suspend(struct device *dev)
+{
+ struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
+
+ if (phy_dev->is_init)
+ return stm32_usb2phy_disable(phy_dev);
+
+ return 0;
+}
+
+static int stm32_usb2phy_resume(struct device *dev)
+{
+ struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
+
+ if (phy_dev->is_init)
+ return stm32_usb2phy_enable(phy_dev);
+
+ return 0;
+}
+
+/* STM32MP25xx USB 2.0 PHY attached to USB 2.0 Host controller */
+static const struct stm32mp2_usb2phy_hw_data stm32mp25_usb2phy1_hwdata = {
+ .phyrefsel_mask = GENMASK(6, 4),
+ .is_usb2_host_only = true,
+};
+
+/* STM32MP25xx USB 2.0 PHY attached to USB 2.0 part of DWC3 controller */
+static const struct stm32mp2_usb2phy_hw_data stm32mp25_usb2phy2_hwdata = {
+ .phyrefsel_mask = GENMASK(14, 12),
+ .is_usb2_host_only = false,
+};
+
+static const struct of_device_id stm32_usb2phy_of_match[] = {
+ { .compatible = "st,stm32mp25-usb2phy1", .data = &stm32mp25_usb2phy1_hwdata },
+ { .compatible = "st,stm32mp25-usb2phy2", .data = &stm32mp25_usb2phy2_hwdata },
+ { /* sentinel */ },
+};
+MODULE_DEVICE_TABLE(of, stm32_usb2phy_of_match);
+
+static DEFINE_SIMPLE_DEV_PM_OPS(stm32_usb2phy_pm_ops,
+ stm32_usb2phy_suspend, stm32_usb2phy_resume);
+
+static struct platform_driver stm32_usb2phy_driver = {
+ .probe = stm32_usb2phy_probe,
+ .driver = {
+ .name = "stm32-usb2phy",
+ .of_match_table = stm32_usb2phy_of_match,
+ .pm = pm_sleep_ptr(&stm32_usb2phy_pm_ops)
+ }
+};
+
+module_platform_driver(stm32_usb2phy_driver);
+
+MODULE_AUTHOR("Pankaj Dev <pankaj.dev@st.com>");
+MODULE_DESCRIPTION("STMicroelectronics Generic USB2PHY driver for stm32");
+MODULE_LICENSE("GPL");
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 2/8] phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Pankaj Dev, Christian Bruel, Fabrice Gasnier, Marek Vasut,
Rahul Kumar, Alexandre Torgue, Conor Dooley, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rob Herring,
Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree, kernel,
linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
From: Pankaj Dev <pankaj.dev@st.com>
Add USB2 PHY driver for STM32MP25 USB2 controllers, which includes the
USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
Two such PHYs in total are present in STM32MP25 SoC, they both are
slightly different, therefore they use different compatible string
to discern them.
Signed-off-by: Christian Bruel <christian.bruel@foss.st.com>
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
Signed-off-by: Rahul Kumar <rahul.kumar05@st.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/phy/st/Kconfig | 10 +
drivers/phy/st/Makefile | 1 +
drivers/phy/st/phy-stm32-usb2phy.c | 356 +++++++++++++++++++++++++++++
3 files changed, 367 insertions(+)
create mode 100644 drivers/phy/st/phy-stm32-usb2phy.c
diff --git a/drivers/phy/st/Kconfig b/drivers/phy/st/Kconfig
index 49206185e5633..2835bb67bca9e 100644
--- a/drivers/phy/st/Kconfig
+++ b/drivers/phy/st/Kconfig
@@ -58,3 +58,13 @@ config PHY_STM32_USBPHYC
used by an HS USB Host controller, and the second one is shared
between an HS USB OTG controller and an HS USB Host controller,
selected by a USB switch.
+
+config PHY_STM32_USB2PHY
+ tristate "STMicroelectronics STM32MP25 USB2.0 PHY Controller driver"
+ depends on ARCH_STM32 || COMPILE_TEST
+ depends on COMMON_CLK
+ select GENERIC_PHY
+ help
+ Enable this to support the High-Speed USB 2.0 transceivers that are
+ part of the STMicroelectronics STM32MP25 SoCs. The PHY itself is a
+ Synopsys FEMTO-PHY.
diff --git a/drivers/phy/st/Makefile b/drivers/phy/st/Makefile
index cb80e954ea9f0..4945df5ed78a8 100644
--- a/drivers/phy/st/Makefile
+++ b/drivers/phy/st/Makefile
@@ -5,3 +5,4 @@ obj-$(CONFIG_PHY_ST_SPEAR1340_MIPHY) += phy-spear1340-miphy.o
obj-$(CONFIG_PHY_STIH407_USB) += phy-stih407-usb.o
obj-$(CONFIG_PHY_STM32_COMBOPHY) += phy-stm32-combophy.o
obj-$(CONFIG_PHY_STM32_USBPHYC) += phy-stm32-usbphyc.o
+obj-$(CONFIG_PHY_STM32_USB2PHY) += phy-stm32-usb2phy.o
diff --git a/drivers/phy/st/phy-stm32-usb2phy.c b/drivers/phy/st/phy-stm32-usb2phy.c
new file mode 100644
index 0000000000000..d902354f88b69
--- /dev/null
+++ b/drivers/phy/st/phy-stm32-usb2phy.c
@@ -0,0 +1,356 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * STMicroelectronics STM32 USB2 PHY Controller driver
+ * Currently Only supported for STM32MP25
+ *
+ * Copyright (C) 2022 STMicroelectronics
+ * Author(s): Pankaj Dev <pankaj.dev@st.com>.
+ */
+#include <linux/bitfield.h>
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/phy/phy.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
+#include <linux/usb/role.h>
+#include <linux/mfd/syscon.h>
+
+#define SYSCFG_USB2PHY2CR_USB2PHY2CMN BIT(2)
+#define SYSCFG_USB2PHY2CR_VBUSVALID BIT(4)
+#define SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL BIT(5)
+#define SYSCFG_USB2PHY2CR_VBUSVLDEXT BIT(6)
+
+struct stm32_usb2phy {
+ struct phy *phy;
+ struct regmap *regmap;
+ struct device *dev;
+ struct reset_control *rstc;
+ struct clk *phyref;
+ struct regulator *vdd33;
+ struct clk_hw clk48_hw;
+ const struct stm32mp2_usb2phy_hw_data *hw_data;
+ atomic_t en_refcnt;
+ enum phy_mode mode;
+ u32 cr_offset;
+ bool is_init;
+};
+
+struct stm32mp2_usb2phy_hw_data {
+ u32 phyrefsel_mask;
+ bool is_usb2_host_only;
+};
+
+static int stm32_usb2phy_enable(struct stm32_usb2phy *phy_dev)
+{
+ const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
+ unsigned long rate;
+ int refsel, ret;
+
+ /* Check if a phy is already init or clk48 in use */
+ if (atomic_inc_return(&phy_dev->en_refcnt) > 1)
+ return 0;
+
+ rate = clk_get_rate(phy_dev->phyref);
+ if (rate == 19200000)
+ refsel = 0;
+ else if (rate == 20000000)
+ refsel = 1;
+ else if (rate == 24000000)
+ refsel = 2;
+ else
+ return -EINVAL;
+
+ ret = regmap_update_bits(phy_dev->regmap,
+ phy_dev->cr_offset,
+ phy_data->phyrefsel_mask,
+ field_prep(phy_data->phyrefsel_mask, refsel));
+ if (ret)
+ return ret;
+
+ if (phy_data->is_usb2_host_only) {
+ /*
+ * The clock should default to active after standby, as it is
+ * needed when resuming OHCI to access its registers.
+ * CMN is default reset to 1, so enforce it is cleared, when the
+ * clock enable request from OHCI driver comes at resume time.
+ */
+ ret = regmap_clear_bits(phy_dev->regmap, phy_dev->cr_offset,
+ SYSCFG_USB2PHY2CR_USB2PHY2CMN);
+ if (ret)
+ return ret;
+ }
+
+ ret = regulator_enable(phy_dev->vdd33);
+ if (ret)
+ return ret;
+
+ ret = clk_prepare_enable(phy_dev->phyref);
+ if (ret)
+ goto error_regdis;
+
+ ret = reset_control_deassert(phy_dev->rstc);
+ if (ret)
+ goto error_clkdis;
+
+ return 0;
+
+error_clkdis:
+ clk_disable_unprepare(phy_dev->phyref);
+error_regdis:
+ regulator_disable(phy_dev->vdd33);
+
+ return ret;
+}
+
+static int stm32_usb2phy_disable(struct stm32_usb2phy *phy_dev)
+{
+ int ret;
+
+ /* Check if a phy is still init or clk48 in use */
+ if (atomic_dec_return(&phy_dev->en_refcnt) > 0)
+ return 0;
+
+ ret = reset_control_assert(phy_dev->rstc);
+ if (ret)
+ return ret;
+
+ clk_disable_unprepare(phy_dev->phyref);
+
+ return regulator_disable(phy_dev->vdd33);
+}
+
+static int stm32_usb2phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
+{
+ struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
+ const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
+ u32 val, mask = SYSCFG_USB2PHY2CR_USB2PHY2CMN;
+ int ret;
+
+ if (mode == PHY_MODE_USB_HOST) {
+ val = 0;
+ if (!phy_data->is_usb2_host_only) {
+ mask |= SYSCFG_USB2PHY2CR_VBUSVLDEXT |
+ SYSCFG_USB2PHY2CR_VBUSVALID;
+ if (submode != USB_ROLE_NONE)
+ val |= SYSCFG_USB2PHY2CR_VBUSVALID;
+ }
+ } else if (mode == PHY_MODE_USB_DEVICE) {
+ val = SYSCFG_USB2PHY2CR_USB2PHY2CMN |
+ SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL;
+ mask |= SYSCFG_USB2PHY2CR_VBUSVALID |
+ SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL |
+ SYSCFG_USB2PHY2CR_VBUSVLDEXT;
+ if (submode != USB_ROLE_NONE)
+ val |= SYSCFG_USB2PHY2CR_VBUSVLDEXT;
+ } else {
+ return -EINVAL;
+ }
+
+ ret = regmap_update_bits(phy_dev->regmap, phy_dev->cr_offset, mask, val);
+ if (ret)
+ return ret;
+
+ phy_dev->mode = mode;
+
+ return 0;
+}
+
+static int stm32_usb2phy_init(struct phy *phy)
+{
+ struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
+ int ret;
+
+ ret = stm32_usb2phy_enable(phy_dev);
+ if (ret)
+ return ret;
+
+ if (phy_dev->mode != PHY_MODE_INVALID) {
+ ret = stm32_usb2phy_set_mode(phy, phy_dev->mode, USB_ROLE_NONE);
+ if (ret) {
+ stm32_usb2phy_disable(phy_dev);
+ return ret;
+ }
+ }
+
+ phy_dev->is_init = true;
+
+ return 0;
+}
+
+static int stm32_usb2phy_exit(struct phy *phy)
+{
+ struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
+ int ret;
+
+ ret = stm32_usb2phy_disable(phy_dev);
+ if (ret)
+ return ret;
+
+ phy_dev->is_init = false;
+
+ return 0;
+}
+
+static const struct phy_ops stm32_usb2phy_data = {
+ .init = stm32_usb2phy_init,
+ .exit = stm32_usb2phy_exit,
+ .set_mode = stm32_usb2phy_set_mode,
+ .owner = THIS_MODULE,
+};
+
+static int stm32_usb2phy_clk48_prepare(struct clk_hw *hw)
+{
+ struct stm32_usb2phy *phy_dev = container_of(hw, struct stm32_usb2phy,
+ clk48_hw);
+
+ return stm32_usb2phy_enable(phy_dev);
+}
+
+static void stm32_usb2phy_clk48_unprepare(struct clk_hw *hw)
+{
+ struct stm32_usb2phy *phy_dev = container_of(hw, struct stm32_usb2phy,
+ clk48_hw);
+
+ stm32_usb2phy_disable(phy_dev);
+}
+
+static unsigned long stm32_usb2phy_clk48_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ return 48000000;
+}
+
+static const struct clk_ops stm32_usb2phy_clk48_ops = {
+ .prepare = stm32_usb2phy_clk48_prepare,
+ .unprepare = stm32_usb2phy_clk48_unprepare,
+ .recalc_rate = stm32_usb2phy_clk48_recalc_rate,
+};
+
+static int stm32_usb2phy_probe(struct platform_device *pdev)
+{
+ struct clk_init_data init = { .ops = &stm32_usb2phy_clk48_ops };
+ struct phy_provider *phy_provider;
+ struct device *dev = &pdev->dev;
+ struct stm32_usb2phy *phy_dev;
+ struct phy *phy;
+ int ret;
+
+ phy_dev = devm_kzalloc(dev, sizeof(*phy_dev), GFP_KERNEL);
+ if (!phy_dev)
+ return -ENOMEM;
+
+ phy_dev->dev = dev;
+ dev_set_drvdata(dev, phy_dev);
+
+ phy_dev->rstc = devm_reset_control_get(dev, NULL);
+ if (IS_ERR(phy_dev->rstc))
+ return dev_err_probe(dev, PTR_ERR(phy_dev->rstc), "Failed to get USB2PHY reset\n");
+
+ phy_dev->phyref = devm_clk_get(dev, NULL);
+ if (IS_ERR(phy_dev->phyref))
+ return dev_err_probe(dev, PTR_ERR(phy_dev->phyref), "Failed to get phyref clk\n");
+
+ phy_dev->vdd33 = devm_regulator_get_optional(dev, "vdd33");
+ if (IS_ERR(phy_dev->vdd33))
+ return dev_err_probe(dev, PTR_ERR(phy_dev->vdd33), "Failed to get vdd3v3 supply\n");
+
+ phy_dev->regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node, "st,syscfg", 1,
+ &phy_dev->cr_offset);
+ if (IS_ERR(phy_dev->regmap)) {
+ return dev_err_probe(dev, PTR_ERR(phy_dev->regmap),
+ "No st,syscfg phandle specified\n");
+ }
+
+ phy_dev->hw_data = device_get_match_data(dev);
+
+ phy = devm_phy_create(dev, NULL, &stm32_usb2phy_data);
+ if (IS_ERR(phy))
+ return dev_err_probe(dev, PTR_ERR(phy), "Failed to create PHY\n");
+
+ phy_dev->phy = phy;
+ phy_set_drvdata(phy, phy_dev);
+
+ phy_provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+ if (IS_ERR(phy_provider))
+ return PTR_ERR(phy_provider);
+
+ init.name = devm_kasprintf(dev, GFP_KERNEL, "clk_%s_48m",
+ of_node_full_name(dev->of_node));
+ if (!init.name)
+ return -ENOMEM;
+
+ phy_dev->clk48_hw.init = &init;
+
+ ret = devm_clk_hw_register(phy_dev->dev, &phy_dev->clk48_hw);
+ if (ret)
+ return dev_err_probe(phy_dev->dev, ret, "Failed to register 48 MHz clock\n");
+
+ ret = devm_of_clk_add_hw_provider(phy_dev->dev, of_clk_hw_simple_get, &phy_dev->clk48_hw);
+ if (ret)
+ return dev_err_probe(phy_dev->dev, ret, "Failed to add 48 MHz clock provider\n");
+
+ return 0;
+}
+
+static int stm32_usb2phy_suspend(struct device *dev)
+{
+ struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
+
+ if (phy_dev->is_init)
+ return stm32_usb2phy_disable(phy_dev);
+
+ return 0;
+}
+
+static int stm32_usb2phy_resume(struct device *dev)
+{
+ struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
+
+ if (phy_dev->is_init)
+ return stm32_usb2phy_enable(phy_dev);
+
+ return 0;
+}
+
+/* STM32MP25xx USB 2.0 PHY attached to USB 2.0 Host controller */
+static const struct stm32mp2_usb2phy_hw_data stm32mp25_usb2phy1_hwdata = {
+ .phyrefsel_mask = GENMASK(6, 4),
+ .is_usb2_host_only = true,
+};
+
+/* STM32MP25xx USB 2.0 PHY attached to USB 2.0 part of DWC3 controller */
+static const struct stm32mp2_usb2phy_hw_data stm32mp25_usb2phy2_hwdata = {
+ .phyrefsel_mask = GENMASK(14, 12),
+ .is_usb2_host_only = false,
+};
+
+static const struct of_device_id stm32_usb2phy_of_match[] = {
+ { .compatible = "st,stm32mp25-usb2phy1", .data = &stm32mp25_usb2phy1_hwdata },
+ { .compatible = "st,stm32mp25-usb2phy2", .data = &stm32mp25_usb2phy2_hwdata },
+ { /* sentinel */ },
+};
+MODULE_DEVICE_TABLE(of, stm32_usb2phy_of_match);
+
+static DEFINE_SIMPLE_DEV_PM_OPS(stm32_usb2phy_pm_ops,
+ stm32_usb2phy_suspend, stm32_usb2phy_resume);
+
+static struct platform_driver stm32_usb2phy_driver = {
+ .probe = stm32_usb2phy_probe,
+ .driver = {
+ .name = "stm32-usb2phy",
+ .of_match_table = stm32_usb2phy_of_match,
+ .pm = pm_sleep_ptr(&stm32_usb2phy_pm_ops)
+ }
+};
+
+module_platform_driver(stm32_usb2phy_driver);
+
+MODULE_AUTHOR("Pankaj Dev <pankaj.dev@st.com>");
+MODULE_DESCRIPTION("STMicroelectronics Generic USB2PHY driver for stm32");
+MODULE_LICENSE("GPL");
--
2.53.0
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 3/8] dt-bindings: usb: generic-ehci: Document access-controllers property
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Document the access-controllers for EHCI USB controllers in case
access checks need to be performed to use them.
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
---
Documentation/devicetree/bindings/usb/generic-ehci.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/generic-ehci.yaml b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
index ae9fb70d0212c..6bca56681cdfe 100644
--- a/Documentation/devicetree/bindings/usb/generic-ehci.yaml
+++ b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
@@ -80,6 +80,9 @@ properties:
minItems: 1
maxItems: 2
+ access-controllers:
+ maxItems: 1
+
dma-coherent: true
interrupts:
--
2.53.0
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 3/8] dt-bindings: usb: generic-ehci: Document access-controllers property
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Document the access-controllers for EHCI USB controllers in case
access checks need to be performed to use them.
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
---
Documentation/devicetree/bindings/usb/generic-ehci.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/generic-ehci.yaml b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
index ae9fb70d0212c..6bca56681cdfe 100644
--- a/Documentation/devicetree/bindings/usb/generic-ehci.yaml
+++ b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
@@ -80,6 +80,9 @@ properties:
minItems: 1
maxItems: 2
+ access-controllers:
+ maxItems: 1
+
dma-coherent: true
interrupts:
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 4/8] dt-bindings: usb: generic-ohci: Document access-controllers property
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Document the access-controllers for OHCI USB controllers in case
access checks need to be performed to use them.
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
---
Documentation/devicetree/bindings/usb/generic-ohci.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/generic-ohci.yaml b/Documentation/devicetree/bindings/usb/generic-ohci.yaml
index 322808aaa2839..8e3522a3faa76 100644
--- a/Documentation/devicetree/bindings/usb/generic-ohci.yaml
+++ b/Documentation/devicetree/bindings/usb/generic-ohci.yaml
@@ -65,6 +65,9 @@ properties:
reg:
maxItems: 1
+ access-controllers:
+ maxItems: 1
+
dma-coherent: true
interrupts:
--
2.53.0
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 4/8] dt-bindings: usb: generic-ohci: Document access-controllers property
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Document the access-controllers for OHCI USB controllers in case
access checks need to be performed to use them.
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
---
Documentation/devicetree/bindings/usb/generic-ohci.yaml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/generic-ohci.yaml b/Documentation/devicetree/bindings/usb/generic-ohci.yaml
index 322808aaa2839..8e3522a3faa76 100644
--- a/Documentation/devicetree/bindings/usb/generic-ohci.yaml
+++ b/Documentation/devicetree/bindings/usb/generic-ohci.yaml
@@ -65,6 +65,9 @@ properties:
reg:
maxItems: 1
+ access-controllers:
+ maxItems: 1
+
dma-coherent: true
interrupts:
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 5/8] dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Fabrice Gasnier, Pankaj Dev, Alexandre Torgue,
Christian Bruel, Conor Dooley, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
The ST STM32MP2 SoC contains single instance of DWC3 USB controller with
glue logic wrapper around it controlled by syscon. Document the glue
logic and DWC3 controller.
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.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
---
.../bindings/usb/st,stm32mp25-dwc3.yaml | 108 ++++++++++++++++++
1 file changed, 108 insertions(+)
create mode 100644 Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
diff --git a/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
new file mode 100644
index 0000000000000..e377efef43503
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
@@ -0,0 +1,108 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/st,stm32mp25-dwc3.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STMicroelectronics STM32 MPU DWC3 USB SoC controller
+
+description:
+ The STM32 MPU DWC3 USB SoC controller block supports both
+ Host(SS/HS/FS/LS) and Device(SS/HS/FS) mode operation
+
+maintainers:
+ - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
+ - Marek Vasut <marex@nabladev.com>
+
+properties:
+ compatible:
+ const: st,stm32mp25-dwc3
+
+ reg:
+ maxItems: 1
+
+ access-controllers:
+ maxItems: 1
+
+ clocks:
+ minItems: 3
+ maxItems: 3
+
+ clock-names:
+ items:
+ - const: ref
+ - const: bus_early
+ - const: suspend
+
+ dr_mode:
+ $ref: /schemas/types.yaml#/definitions/string
+ enum: [host, peripheral, otg]
+
+ interrupts:
+ maxItems: 1
+
+ phys:
+ minItems: 1
+ maxItems: 2
+
+ phy-names:
+ minItems: 1
+ items:
+ - const: usb2-phy
+ - const: usb3-phy
+
+ resets:
+ minItems: 1
+
+ st,syscfg:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: Phandle to system configuration controller.
+ items:
+ - items:
+ - description: phandle to syscfg
+ - description: USB3DR control offset within syscfg
+
+ st,enable-port-power-control:
+ type: boolean
+ description: Enable Host-Mode Port Power Control (bit-3 of capability param HCCPARAMS)
+
+ st,ovrcur-active-low:
+ type: boolean
+ description: Over-Current signal polarity is active-low
+
+ st,vbusen-active-low:
+ type: boolean
+ description: VBUS-ENABLE signal polarity is active-low
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+ - phys
+ - phy-names
+ - resets
+ - st,syscfg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/st,stm32mp25-rcc.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/reset/st,stm32mp25-rcc.h>
+
+ usb3dr: usb@48300000 {
+ compatible = "st,stm32mp25-dwc3";
+ reg = <0x48300000 0x100000>;
+ clocks = <&rcc CK_KER_USB2PHY2>, <&rcc CK_BUS_USB3DR>, <&rcc CK_KER_USB2PHY2>;
+ clock-names = "ref", "bus_early", "suspend";
+ interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy>, <&usb3_phy>;
+ phy-names = "usb2-phy", "usb3-phy";
+ resets = <&rcc USB3DR_R>;
+ st,ovrcur-active-low;
+ st,syscfg = <&syscfg 0x4800>;
+ st,vbusen-active-low;
+ };
--
2.53.0
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 5/8] dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Fabrice Gasnier, Pankaj Dev, Alexandre Torgue,
Christian Bruel, Conor Dooley, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
The ST STM32MP2 SoC contains single instance of DWC3 USB controller with
glue logic wrapper around it controlled by syscon. Document the glue
logic and DWC3 controller.
Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.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
---
.../bindings/usb/st,stm32mp25-dwc3.yaml | 108 ++++++++++++++++++
1 file changed, 108 insertions(+)
create mode 100644 Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
diff --git a/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
new file mode 100644
index 0000000000000..e377efef43503
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
@@ -0,0 +1,108 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/st,stm32mp25-dwc3.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STMicroelectronics STM32 MPU DWC3 USB SoC controller
+
+description:
+ The STM32 MPU DWC3 USB SoC controller block supports both
+ Host(SS/HS/FS/LS) and Device(SS/HS/FS) mode operation
+
+maintainers:
+ - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
+ - Marek Vasut <marex@nabladev.com>
+
+properties:
+ compatible:
+ const: st,stm32mp25-dwc3
+
+ reg:
+ maxItems: 1
+
+ access-controllers:
+ maxItems: 1
+
+ clocks:
+ minItems: 3
+ maxItems: 3
+
+ clock-names:
+ items:
+ - const: ref
+ - const: bus_early
+ - const: suspend
+
+ dr_mode:
+ $ref: /schemas/types.yaml#/definitions/string
+ enum: [host, peripheral, otg]
+
+ interrupts:
+ maxItems: 1
+
+ phys:
+ minItems: 1
+ maxItems: 2
+
+ phy-names:
+ minItems: 1
+ items:
+ - const: usb2-phy
+ - const: usb3-phy
+
+ resets:
+ minItems: 1
+
+ st,syscfg:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ description: Phandle to system configuration controller.
+ items:
+ - items:
+ - description: phandle to syscfg
+ - description: USB3DR control offset within syscfg
+
+ st,enable-port-power-control:
+ type: boolean
+ description: Enable Host-Mode Port Power Control (bit-3 of capability param HCCPARAMS)
+
+ st,ovrcur-active-low:
+ type: boolean
+ description: Over-Current signal polarity is active-low
+
+ st,vbusen-active-low:
+ type: boolean
+ description: VBUS-ENABLE signal polarity is active-low
+
+required:
+ - compatible
+ - reg
+ - clocks
+ - clock-names
+ - interrupts
+ - phys
+ - phy-names
+ - resets
+ - st,syscfg
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/clock/st,stm32mp25-rcc.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/reset/st,stm32mp25-rcc.h>
+
+ usb3dr: usb@48300000 {
+ compatible = "st,stm32mp25-dwc3";
+ reg = <0x48300000 0x100000>;
+ clocks = <&rcc CK_KER_USB2PHY2>, <&rcc CK_BUS_USB3DR>, <&rcc CK_KER_USB2PHY2>;
+ clock-names = "ref", "bus_early", "suspend";
+ interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy>, <&usb3_phy>;
+ phy-names = "usb2-phy", "usb3-phy";
+ resets = <&rcc USB3DR_R>;
+ st,ovrcur-active-low;
+ st,syscfg = <&syscfg 0x4800>;
+ st,vbusen-active-low;
+ };
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
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
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Alexandre Torgue, Christian Bruel, Conor Dooley,
Fabrice Gasnier, Greg Kroah-Hartman, Krzysztof Kozlowski,
Maxime Coquelin, Neil Armstrong, Pankaj Dev, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
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
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 7/8] arm64: dts: st: Add USB nodes on stm32mp231
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Pankaj Dev, Alexandre Torgue, Christian Bruel,
Conor Dooley, Fabrice Gasnier, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Add USB controller and PHY nodes to stm32mp231 DT.
This includes two USB 2.0 FEMTO PHYs, USB 2.0 host
controller and DWC3 DRD controller nodes. Include
missing COMBOPHY for the USB 3.0 controller.
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.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
---
arch/arm64/boot/dts/st/stm32mp231.dtsi | 77 ++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp231.dtsi b/arch/arm64/boot/dts/st/stm32mp231.dtsi
index 4505fc0e3b537..b8cef81eceeb1 100644
--- a/arch/arm64/boot/dts/st/stm32mp231.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp231.dtsi
@@ -7,6 +7,7 @@
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/regulator/st,stm32mp25-regulator.h>
#include <dt-bindings/reset/st,stm32mp25-rcc.h>
+#include <dt-bindings/phy/phy.h>
/ {
#address-cells = <2>;
@@ -146,6 +147,26 @@ timer {
always-on;
};
+ usb2_phy1: usb2-phy1 {
+ compatible = "st,stm32mp25-usb2phy1";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2400>;
+ clocks = <&rcc CK_KER_USB2PHY1>;
+ resets = <&rcc USB2PHY1_R>;
+ status = "disabled";
+ };
+
+ usb2_phy2: usb2-phy2 {
+ compatible = "st,stm32mp25-usb2phy2";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2800>;
+ clocks = <&rcc CK_KER_USB2PHY2EN>;
+ resets = <&rcc USB2PHY2_R>;
+ status = "disabled";
+ };
+
soc@0 {
compatible = "simple-bus";
ranges = <0x0 0x0 0x0 0x80000000>;
@@ -769,6 +790,21 @@ dcmipp: dcmipp@48030000 {
status = "disabled";
};
+ combophy: phy@480c0000 {
+ compatible = "st,stm32mp25-combophy";
+ reg = <0x480c0000 0x1000>;
+ #phy-cells = <1>;
+ clocks = <&rcc CK_BUS_USB3PCIEPHY>, <&rcc CK_KER_USB3PCIEPHY>;
+ clock-names = "apb", "ker";
+ resets = <&rcc USB3PCIEPHY_R>;
+ reset-names = "phy";
+ access-controllers = <&rifsc 67>;
+ power-domains = <&cluster_pd>;
+ wakeup-source;
+ interrupts-extended = <&exti1 45 IRQ_TYPE_EDGE_FALLING>;
+ status = "disabled";
+ };
+
sdmmc1: mmc@48220000 {
compatible = "st,stm32mp25-sdmmc2", "arm,pl18x", "arm,primecell";
reg = <0x48220000 0x400>, <0x44230400 0x8>;
@@ -862,6 +898,47 @@ stmmac_axi_config_1: stmmac-axi-config {
snps,wr_osr_lmt = <0x7>;
};
};
+
+ usbh_ohci: usb@482e0000 {
+ compatible = "generic-ohci";
+ reg = <0x482e0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2OHCI>;
+ interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usbh_ehci: usb@482f0000 {
+ compatible = "generic-ehci";
+ reg = <0x482f0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2EHCI>;
+ companion = <&usbh_ohci>;
+ interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usb3dr: usb@48300000 {
+ compatible = "st,stm32mp25-dwc3";
+ reg = <0x48300000 0x100000>;
+ access-controllers = <&rifsc 66>;
+ clocks = <&rcc CK_KER_USB2PHY2>,
+ <&rcc CK_BUS_USB3DR>,
+ <&rcc CK_KER_USB2PHY2>;
+ clock-names = "ref", "bus_early", "suspend";
+ interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy2>, <&combophy PHY_TYPE_USB3>;
+ phy-names = "usb2-phy", "usb3-phy";
+ resets = <&rcc USB3DR_R>;
+ st,syscfg = <&syscfg 0x4800>;
+ status = "disabled";
+ };
};
bsec: efuse@44000000 {
--
2.53.0
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 7/8] arm64: dts: st: Add USB nodes on stm32mp231
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Marek Vasut, Pankaj Dev, Alexandre Torgue, Christian Bruel,
Conor Dooley, Fabrice Gasnier, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
Add USB controller and PHY nodes to stm32mp231 DT.
This includes two USB 2.0 FEMTO PHYs, USB 2.0 host
controller and DWC3 DRD controller nodes. Include
missing COMBOPHY for the USB 3.0 controller.
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.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
---
arch/arm64/boot/dts/st/stm32mp231.dtsi | 77 ++++++++++++++++++++++++++
1 file changed, 77 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp231.dtsi b/arch/arm64/boot/dts/st/stm32mp231.dtsi
index 4505fc0e3b537..b8cef81eceeb1 100644
--- a/arch/arm64/boot/dts/st/stm32mp231.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp231.dtsi
@@ -7,6 +7,7 @@
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/regulator/st,stm32mp25-regulator.h>
#include <dt-bindings/reset/st,stm32mp25-rcc.h>
+#include <dt-bindings/phy/phy.h>
/ {
#address-cells = <2>;
@@ -146,6 +147,26 @@ timer {
always-on;
};
+ usb2_phy1: usb2-phy1 {
+ compatible = "st,stm32mp25-usb2phy1";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2400>;
+ clocks = <&rcc CK_KER_USB2PHY1>;
+ resets = <&rcc USB2PHY1_R>;
+ status = "disabled";
+ };
+
+ usb2_phy2: usb2-phy2 {
+ compatible = "st,stm32mp25-usb2phy2";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2800>;
+ clocks = <&rcc CK_KER_USB2PHY2EN>;
+ resets = <&rcc USB2PHY2_R>;
+ status = "disabled";
+ };
+
soc@0 {
compatible = "simple-bus";
ranges = <0x0 0x0 0x0 0x80000000>;
@@ -769,6 +790,21 @@ dcmipp: dcmipp@48030000 {
status = "disabled";
};
+ combophy: phy@480c0000 {
+ compatible = "st,stm32mp25-combophy";
+ reg = <0x480c0000 0x1000>;
+ #phy-cells = <1>;
+ clocks = <&rcc CK_BUS_USB3PCIEPHY>, <&rcc CK_KER_USB3PCIEPHY>;
+ clock-names = "apb", "ker";
+ resets = <&rcc USB3PCIEPHY_R>;
+ reset-names = "phy";
+ access-controllers = <&rifsc 67>;
+ power-domains = <&cluster_pd>;
+ wakeup-source;
+ interrupts-extended = <&exti1 45 IRQ_TYPE_EDGE_FALLING>;
+ status = "disabled";
+ };
+
sdmmc1: mmc@48220000 {
compatible = "st,stm32mp25-sdmmc2", "arm,pl18x", "arm,primecell";
reg = <0x48220000 0x400>, <0x44230400 0x8>;
@@ -862,6 +898,47 @@ stmmac_axi_config_1: stmmac-axi-config {
snps,wr_osr_lmt = <0x7>;
};
};
+
+ usbh_ohci: usb@482e0000 {
+ compatible = "generic-ohci";
+ reg = <0x482e0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2OHCI>;
+ interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usbh_ehci: usb@482f0000 {
+ compatible = "generic-ehci";
+ reg = <0x482f0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2EHCI>;
+ companion = <&usbh_ohci>;
+ interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usb3dr: usb@48300000 {
+ compatible = "st,stm32mp25-dwc3";
+ reg = <0x48300000 0x100000>;
+ access-controllers = <&rifsc 66>;
+ clocks = <&rcc CK_KER_USB2PHY2>,
+ <&rcc CK_BUS_USB3DR>,
+ <&rcc CK_KER_USB2PHY2>;
+ clock-names = "ref", "bus_early", "suspend";
+ interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy2>, <&combophy PHY_TYPE_USB3>;
+ phy-names = "usb2-phy", "usb3-phy";
+ resets = <&rcc USB3DR_R>;
+ st,syscfg = <&syscfg 0x4800>;
+ status = "disabled";
+ };
};
bsec: efuse@44000000 {
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 8/8] arm64: dts: st: Add USB nodes on stm32mp251
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 0:55 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Pankaj Dev, Marek Vasut, Alexandre Torgue, Christian Bruel,
Conor Dooley, Fabrice Gasnier, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
From: Pankaj Dev <pankaj.dev@st.com>
Add USB controller and PHY nodes to stm32mp251 DT.
This includes two USB 2.0 FEMTO PHYs, USB 2.0 host
controller and DWC3 DRD controller nodes.
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.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
---
arch/arm64/boot/dts/st/stm32mp251.dtsi | 61 ++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/st/stm32mp251.dtsi
index 6e985f115b195..c54bd4554c33a 100644
--- a/arch/arm64/boot/dts/st/stm32mp251.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi
@@ -168,6 +168,26 @@ timer {
arm,no-tick-in-suspend;
};
+ usb2_phy1: usb2-phy1 {
+ compatible = "st,stm32mp25-usb2phy1";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2400>;
+ clocks = <&rcc CK_KER_USB2PHY1>;
+ resets = <&rcc USB2PHY1_R>;
+ status = "disabled";
+ };
+
+ usb2_phy2: usb2-phy2 {
+ compatible = "st,stm32mp25-usb2phy2";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2800>;
+ clocks = <&rcc CK_KER_USB2PHY2EN>;
+ resets = <&rcc USB2PHY2_R>;
+ status = "disabled";
+ };
+
soc@0 {
compatible = "simple-bus";
#address-cells = <1>;
@@ -1746,6 +1766,47 @@ stmmac_axi_config_1: stmmac-axi-config {
};
};
+ usbh_ohci: usb@482e0000 {
+ compatible = "generic-ohci";
+ reg = <0x482e0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2OHCI>;
+ interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usbh_ehci: usb@482f0000 {
+ compatible = "generic-ehci";
+ reg = <0x482f0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2EHCI>;
+ companion = <&usbh_ohci>;
+ interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usb3dr: usb@48300000 {
+ compatible = "st,stm32mp25-dwc3";
+ reg = <0x48300000 0x100000>;
+ access-controllers = <&rifsc 66>;
+ clocks = <&rcc CK_KER_USB2PHY2>,
+ <&rcc CK_BUS_USB3DR>,
+ <&rcc CK_KER_USB2PHY2>;
+ clock-names = "ref", "bus_early", "suspend";
+ interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy2>, <&combophy PHY_TYPE_USB3>;
+ phy-names = "usb2-phy", "usb3-phy";
+ resets = <&rcc USB3DR_R>;
+ st,syscfg = <&syscfg 0x4800>;
+ status = "disabled";
+ };
+
pcie_ep: pcie-ep@48400000 {
compatible = "st,stm32mp25-pcie-ep";
reg = <0x48400000 0x100000>,
--
2.53.0
^ permalink raw reply related [flat|nested] 36+ messages in thread
* [PATCH 8/8] arm64: dts: st: Add USB nodes on stm32mp251
@ 2026-08-12 0:55 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 0:55 UTC (permalink / raw)
To: linux-usb
Cc: Pankaj Dev, Marek Vasut, Alexandre Torgue, Christian Bruel,
Conor Dooley, Fabrice Gasnier, Greg Kroah-Hartman,
Krzysztof Kozlowski, Maxime Coquelin, Neil Armstrong, Rahul Kumar,
Rob Herring, Rosen Penev, Thinh Nguyen, Vinod Koul, devicetree,
kernel, linux-arm-kernel, linux-kernel, linux-phy, linux-stm32
From: Pankaj Dev <pankaj.dev@st.com>
Add USB controller and PHY nodes to stm32mp251 DT.
This includes two USB 2.0 FEMTO PHYs, USB 2.0 host
controller and DWC3 DRD controller nodes.
Signed-off-by: Marek Vasut <marex@nabladev.com>
Signed-off-by: Pankaj Dev <pankaj.dev@st.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
---
arch/arm64/boot/dts/st/stm32mp251.dtsi | 61 ++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/st/stm32mp251.dtsi
index 6e985f115b195..c54bd4554c33a 100644
--- a/arch/arm64/boot/dts/st/stm32mp251.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi
@@ -168,6 +168,26 @@ timer {
arm,no-tick-in-suspend;
};
+ usb2_phy1: usb2-phy1 {
+ compatible = "st,stm32mp25-usb2phy1";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2400>;
+ clocks = <&rcc CK_KER_USB2PHY1>;
+ resets = <&rcc USB2PHY1_R>;
+ status = "disabled";
+ };
+
+ usb2_phy2: usb2-phy2 {
+ compatible = "st,stm32mp25-usb2phy2";
+ #phy-cells = <0>;
+ #clock-cells = <0>;
+ st,syscfg = <&syscfg 0x2800>;
+ clocks = <&rcc CK_KER_USB2PHY2EN>;
+ resets = <&rcc USB2PHY2_R>;
+ status = "disabled";
+ };
+
soc@0 {
compatible = "simple-bus";
#address-cells = <1>;
@@ -1746,6 +1766,47 @@ stmmac_axi_config_1: stmmac-axi-config {
};
};
+ usbh_ohci: usb@482e0000 {
+ compatible = "generic-ohci";
+ reg = <0x482e0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2OHCI>;
+ interrupts = <GIC_SPI 140 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usbh_ehci: usb@482f0000 {
+ compatible = "generic-ehci";
+ reg = <0x482f0000 0x1000>;
+ access-controllers = <&rifsc 63>;
+ clocks = <&usb2_phy1>, <&rcc CK_BUS_USB2EHCI>;
+ companion = <&usbh_ohci>;
+ interrupts = <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy1>;
+ phy-names = "usb";
+ resets = <&rcc USBH_R>;
+ status = "disabled";
+ };
+
+ usb3dr: usb@48300000 {
+ compatible = "st,stm32mp25-dwc3";
+ reg = <0x48300000 0x100000>;
+ access-controllers = <&rifsc 66>;
+ clocks = <&rcc CK_KER_USB2PHY2>,
+ <&rcc CK_BUS_USB3DR>,
+ <&rcc CK_KER_USB2PHY2>;
+ clock-names = "ref", "bus_early", "suspend";
+ interrupts = <GIC_SPI 228 IRQ_TYPE_LEVEL_HIGH>;
+ phys = <&usb2_phy2>, <&combophy PHY_TYPE_USB3>;
+ phy-names = "usb2-phy", "usb3-phy";
+ resets = <&rcc USB3DR_R>;
+ st,syscfg = <&syscfg 0x4800>;
+ status = "disabled";
+ };
+
pcie_ep: pcie-ep@48400000 {
compatible = "st,stm32mp25-pcie-ep";
reg = <0x48400000 0x100000>,
--
2.53.0
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply related [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 1:05 ` sashiko-bot
-1 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:05 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-phy, robh, conor+dt, devicetree, neil.armstrong, vkoul,
olteanv
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] The compatible string used in the example does not match any of the allowed compatible strings defined in the schema enum.
--
--- Patch [1]: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY ---
commit 30374f65d955f737e83c81bfd3daa6123e05bf6b
Author: Pankaj Dev <pankaj.dev@st.com>
dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
This commit documents the USB2 PHY for STM32MP25 USB2 controllers. It
introduces bindings for two slightly different PHYs on the SoC, using
different compatible strings to discern them.
> diff --git a/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
> new file mode 100644
> index 0000000000000..ca9fc3b87383c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
[ ... ]
> +properties:
> + compatible:
> + enum:
> + - st,stm32mp25-usb2phy1
> + - st,stm32mp25-usb2phy2
> +
[ ... ]
> +examples:
> + - |
> + #include <dt-bindings/clock/st,stm32mp25-rcc.h>
> + #include <dt-bindings/reset/st,stm32mp25-rcc.h>
> +
> + usb2_phy2: usb-phy {
> + compatible = "st,stm32mp25-usb2phy";
[Severity: Low]
Does this compatible string match the ones defined in the schema properties?
Looking at the enum above, the schema defines st,stm32mp25-usb2phy1 and
st,stm32mp25-usb2phy2, but the example uses st,stm32mp25-usb2phy. Will
this cause dt_binding_check to fail when validating the example block against
the schema definitions?
> + #clock-cells = <0>;
> + #phy-cells = <0>;
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=1
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 1:05 ` sashiko-bot
0 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:05 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-phy, robh, conor+dt, devicetree, neil.armstrong, vkoul,
olteanv
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] The compatible string used in the example does not match any of the allowed compatible strings defined in the schema enum.
--
--- Patch [1]: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY ---
commit 30374f65d955f737e83c81bfd3daa6123e05bf6b
Author: Pankaj Dev <pankaj.dev@st.com>
dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
This commit documents the USB2 PHY for STM32MP25 USB2 controllers. It
introduces bindings for two slightly different PHYs on the SoC, using
different compatible strings to discern them.
> diff --git a/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
> new file mode 100644
> index 0000000000000..ca9fc3b87383c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
[ ... ]
> +properties:
> + compatible:
> + enum:
> + - st,stm32mp25-usb2phy1
> + - st,stm32mp25-usb2phy2
> +
[ ... ]
> +examples:
> + - |
> + #include <dt-bindings/clock/st,stm32mp25-rcc.h>
> + #include <dt-bindings/reset/st,stm32mp25-rcc.h>
> +
> + usb2_phy2: usb-phy {
> + compatible = "st,stm32mp25-usb2phy";
[Severity: Low]
Does this compatible string match the ones defined in the schema properties?
Looking at the enum above, the schema defines st,stm32mp25-usb2phy1 and
st,stm32mp25-usb2phy2, but the example uses st,stm32mp25-usb2phy. Will
this cause dt_binding_check to fail when validating the example block against
the schema definitions?
> + #clock-cells = <0>;
> + #phy-cells = <0>;
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=1
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 5/8] dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 1:08 ` sashiko-bot
-1 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:08 UTC (permalink / raw)
To: Marek Vasut
Cc: neil.armstrong, linux-phy, robh, conor+dt, devicetree, vkoul,
olteanv
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Missing reference to DWC3 core schema causes valid USB properties to be rejected.
- [Low] The `resets` property is missing a `maxItems` constraint.
--
--- Patch [5]: [PATCH 5/8] dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller ---
commit df84943476bf67384e16624668aaadbaba67875b
Author: Marek Vasut <marex@nabladev.com>
dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
The ST STM32MP2 SoC contains single instance of DWC3 USB controller with
glue logic wrapper around it controlled by syscon. Document the glue
logic and DWC3 controller.
> diff --git a/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
> new file mode 100644
> index 0000000000000..e377efef43503
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
> @@ -0,0 +1,108 @@
[ ... ]
> + phy-names:
> + minItems: 1
> + items:
> + - const: usb2-phy
> + - const: usb3-phy
> +
> + resets:
> + minItems: 1
[Severity: Low]
Does this resets definition need a maxItems constraint?
Without an upper bound, dt-schema allows an arbitrary number of reset items,
which might let invalid hardware configurations silently pass validation.
> +
> + st,syscfg:
[ ... ]
> +required:
> + - compatible
> + - reg
> + - clocks
> + - clock-names
> + - interrupts
> + - phys
> + - phy-names
> + - resets
> + - st,syscfg
> +
> +unevaluatedProperties: false
[Severity: Medium]
Will this strict constraint cause valid USB or DWC3 core properties to be
rejected?
Since the schema does not include a reference to the core DWC3 schema (such
as allOf: - $ref: snps,dwc3.yaml#), only the explicitly listed properties
are permitted.
Standard properties like maximum-speed, usb-role-switch, or child nodes
intended for the DWC3 core will fail validation when checked.
> +
> +examples:
> + - |
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=5
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 5/8] dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
@ 2026-08-12 1:08 ` sashiko-bot
0 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:08 UTC (permalink / raw)
To: Marek Vasut
Cc: neil.armstrong, linux-phy, robh, conor+dt, devicetree, vkoul,
olteanv
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Missing reference to DWC3 core schema causes valid USB properties to be rejected.
- [Low] The `resets` property is missing a `maxItems` constraint.
--
--- Patch [5]: [PATCH 5/8] dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller ---
commit df84943476bf67384e16624668aaadbaba67875b
Author: Marek Vasut <marex@nabladev.com>
dt-bindings: usb: dwc3: Document ST STM32MP2 DWC3 xHCI USB controller
The ST STM32MP2 SoC contains single instance of DWC3 USB controller with
glue logic wrapper around it controlled by syscon. Document the glue
logic and DWC3 controller.
> diff --git a/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
> new file mode 100644
> index 0000000000000..e377efef43503
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/st,stm32mp25-dwc3.yaml
> @@ -0,0 +1,108 @@
[ ... ]
> + phy-names:
> + minItems: 1
> + items:
> + - const: usb2-phy
> + - const: usb3-phy
> +
> + resets:
> + minItems: 1
[Severity: Low]
Does this resets definition need a maxItems constraint?
Without an upper bound, dt-schema allows an arbitrary number of reset items,
which might let invalid hardware configurations silently pass validation.
> +
> + st,syscfg:
[ ... ]
> +required:
> + - compatible
> + - reg
> + - clocks
> + - clock-names
> + - interrupts
> + - phys
> + - phy-names
> + - resets
> + - st,syscfg
> +
> +unevaluatedProperties: false
[Severity: Medium]
Will this strict constraint cause valid USB or DWC3 core properties to be
rejected?
Since the schema does not include a reference to the core DWC3 schema (such
as allOf: - $ref: snps,dwc3.yaml#), only the explicitly listed properties
are permitted.
Standard properties like maximum-speed, usb-role-switch, or child nodes
intended for the DWC3 core will fail validation when checked.
> +
> +examples:
> + - |
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=5
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 3/8] dt-bindings: usb: generic-ehci: Document access-controllers property
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 1:10 ` sashiko-bot
-1 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:10 UTC (permalink / raw)
To: Marek Vasut
Cc: vkoul, olteanv, linux-phy, robh, neil.armstrong, conor+dt,
devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] Incomplete schema update: `access-controllers` is added to EHCI but omitted from the companion OHCI binding.
--
--- Patch [3]: [PATCH 3/8] dt-bindings: usb: generic-ehci: Document access-controllers property ---
commit 5a4a63ad96f05ab82966f723bbb1698bcfb4356a
Author: Marek Vasut <marex@nabladev.com>
dt-bindings: usb: generic-ehci: Document access-controllers property
This commit adds the access-controllers property to the generic EHCI USB
controller device tree binding schema. This allows access checks to be
documented for these controllers.
> diff --git a/Documentation/devicetree/bindings/usb/generic-ehci.yaml b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
> index 55a5aa7d7a54e..602241887d995 100644
> --- a/Documentation/devicetree/bindings/usb/generic-ehci.yaml
> +++ b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
> @@ -80,6 +80,9 @@ properties:
> minItems: 1
> maxItems: 2
>
> + access-controllers:
> + maxItems: 1
> +
[Severity: Low]
Does this property also need to be added to the generic OHCI binding
(generic-ohci.yaml) or a common schema like usb-hcd.yaml?
If a device tree configures both an EHCI controller and its companion OHCI
controller behind an access controller, the OHCI node might fail
dt_binding_check validation because generic-ohci.yaml enforces
unevaluatedProperties: false.
> dma-coherent: true
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=3
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 3/8] dt-bindings: usb: generic-ehci: Document access-controllers property
@ 2026-08-12 1:10 ` sashiko-bot
0 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:10 UTC (permalink / raw)
To: Marek Vasut
Cc: vkoul, olteanv, linux-phy, robh, neil.armstrong, conor+dt,
devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] Incomplete schema update: `access-controllers` is added to EHCI but omitted from the companion OHCI binding.
--
--- Patch [3]: [PATCH 3/8] dt-bindings: usb: generic-ehci: Document access-controllers property ---
commit 5a4a63ad96f05ab82966f723bbb1698bcfb4356a
Author: Marek Vasut <marex@nabladev.com>
dt-bindings: usb: generic-ehci: Document access-controllers property
This commit adds the access-controllers property to the generic EHCI USB
controller device tree binding schema. This allows access checks to be
documented for these controllers.
> diff --git a/Documentation/devicetree/bindings/usb/generic-ehci.yaml b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
> index 55a5aa7d7a54e..602241887d995 100644
> --- a/Documentation/devicetree/bindings/usb/generic-ehci.yaml
> +++ b/Documentation/devicetree/bindings/usb/generic-ehci.yaml
> @@ -80,6 +80,9 @@ properties:
> minItems: 1
> maxItems: 2
>
> + access-controllers:
> + maxItems: 1
> +
[Severity: Low]
Does this property also need to be added to the generic OHCI binding
(generic-ohci.yaml) or a common schema like usb-hcd.yaml?
If a device tree configures both an EHCI controller and its companion OHCI
controller behind an access controller, the OHCI node might fail
dt_binding_check validation because generic-ohci.yaml enforces
unevaluatedProperties: false.
> dma-coherent: true
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=3
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 1:11 ` sashiko-bot
-1 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:11 UTC (permalink / raw)
To: Marek Vasut
Cc: olteanv, robh, linux-phy, vkoul, devicetree, neil.armstrong,
conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] Missing `#include <linux/bitfield.h>` for the `FIELD_PREP` macro.
--
--- Patch [6]: [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue ---
commit b7b018e07e03e9eca049254747c91235246ffef8
Author: Marek Vasut <marex@nabladev.com>
usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue
This commit adds support for the ST STM32MP2 DWC3 USB controller glue logic
to the generic DWC3 platform driver.
> 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
[ ... ]
> @@ -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)
> +{
[ ... ]
> + 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) |
[Severity: Low]
Does this file need to include linux/bitfield.h?
The FIELD_PREP macro is used here to prepare the bitfields, but the header
defining it does not appear to be included. If the header isn't pulled in
transitively, will this result in a build failure?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=6
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue
@ 2026-08-12 1:11 ` sashiko-bot
0 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:11 UTC (permalink / raw)
To: Marek Vasut
Cc: olteanv, robh, linux-phy, vkoul, devicetree, neil.armstrong,
conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] Missing `#include <linux/bitfield.h>` for the `FIELD_PREP` macro.
--
--- Patch [6]: [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue ---
commit b7b018e07e03e9eca049254747c91235246ffef8
Author: Marek Vasut <marex@nabladev.com>
usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue
This commit adds support for the ST STM32MP2 DWC3 USB controller glue logic
to the generic DWC3 platform driver.
> 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
[ ... ]
> @@ -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)
> +{
[ ... ]
> + 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) |
[Severity: Low]
Does this file need to include linux/bitfield.h?
The FIELD_PREP macro is used here to prepare the bitfields, but the header
defining it does not appear to be included. If the header isn't pulled in
transitively, will this result in a build failure?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=6
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/8] phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 1:12 ` sashiko-bot
-1 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:12 UTC (permalink / raw)
To: Marek Vasut
Cc: robh, devicetree, vkoul, neil.armstrong, olteanv, linux-phy,
conor+dt
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] Error paths in `stm32_usb2phy_enable` and `stm32_usb2phy_disable` fail to balance the `en_refcnt` reference counter.
- [High] Concurrent hardware initialization between the PHY framework and the Clock framework is not serialized.
- [High] System suspend/resume logic fails to correctly suspend and restore hardware state.
- [Medium] Configuring the host-only PHY into device mode physically corrupts the reference clock selection register.
- [Low] Missing validation of `device_get_match_data()` return value leads to a NULL pointer dereference.
--
--- Patch [2]: [PATCH 2/8] phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY ---
commit f2add7ff621e9f11087271861a198a27e1da818a
Author: Pankaj Dev <pankaj.dev@st.com>
phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
This commit adds the USB2 PHY driver for STM32MP25 USB2 controllers. It
supports both the USB2.0 host-only controller and the USB 2.0 part of the
DWC3 controller by differentiating them via compatible strings.
> diff --git a/drivers/phy/st/phy-stm32-usb2phy.c b/drivers/phy/st/phy-stm32-usb2phy.c
> new file mode 100644
> index 0000000000000..d902354f88b69
> --- /dev/null
> +++ b/drivers/phy/st/phy-stm32-usb2phy.c
[ ... ]
> +static int stm32_usb2phy_enable(struct stm32_usb2phy *phy_dev)
> +{
> + const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
> + unsigned long rate;
> + int refsel, ret;
> +
> + /* Check if a phy is already init or clk48 in use */
> + if (atomic_inc_return(&phy_dev->en_refcnt) > 1)
> + return 0;
[Severity: High]
Is there a race condition here if both the PHY and Clock frameworks
attempt to enable the hardware concurrently?
If Thread A calls stm32_usb2phy_enable() via phy_init and Thread B calls
it via clk_prepare concurrently:
Thread A increments en_refcnt to 1 and proceeds with initialization.
Thread B increments en_refcnt to 2 and returns success immediately.
Since no mutex is held during the multi-step hardware initialization,
could Thread B start using the hardware before Thread A has finished
configuring it?
> +
> + rate = clk_get_rate(phy_dev->phyref);
> + if (rate == 19200000)
> + refsel = 0;
> + else if (rate == 20000000)
> + refsel = 1;
> + else if (rate == 24000000)
> + refsel = 2;
> + else
> + return -EINVAL;
> +
> + ret = regmap_update_bits(phy_dev->regmap,
> + phy_dev->cr_offset,
> + phy_data->phyrefsel_mask,
> + field_prep(phy_data->phyrefsel_mask, refsel));
> + if (ret)
> + return ret;
[Severity: High]
If regmap_update_bits() fails, does this return early without decrementing
en_refcnt?
This looks like it could leave the reference counter permanently incremented,
preventing future attempts to initialize the PHY or clock if a resource
allocation fails here or in subsequent steps like regulator_enable().
> +
> + if (phy_data->is_usb2_host_only) {
[ ... ]
> +static int stm32_usb2phy_disable(struct stm32_usb2phy *phy_dev)
> +{
> + int ret;
> +
> + /* Check if a phy is still init or clk48 in use */
> + if (atomic_dec_return(&phy_dev->en_refcnt) > 0)
> + return 0;
> +
> + ret = reset_control_assert(phy_dev->rstc);
> + if (ret)
> + return ret;
[Severity: High]
If reset_control_assert() fails, does this skip the remaining hardware disable
steps while leaving en_refcnt already decremented?
> +
> + clk_disable_unprepare(phy_dev->phyref);
> +
> + return regulator_disable(phy_dev->vdd33);
> +}
> +
> +static int stm32_usb2phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
> +{
> + struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
> + const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
> + u32 val, mask = SYSCFG_USB2PHY2CR_USB2PHY2CMN;
> + int ret;
> +
> + if (mode == PHY_MODE_USB_HOST) {
[ ... ]
> + } else if (mode == PHY_MODE_USB_DEVICE) {
> + val = SYSCFG_USB2PHY2CR_USB2PHY2CMN |
> + SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL;
> + mask |= SYSCFG_USB2PHY2CR_VBUSVALID |
> + SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL |
> + SYSCFG_USB2PHY2CR_VBUSVLDEXT;
> + if (submode != USB_ROLE_NONE)
> + val |= SYSCFG_USB2PHY2CR_VBUSVLDEXT;
> + } else {
> + return -EINVAL;
> + }
> +
> + ret = regmap_update_bits(phy_dev->regmap, phy_dev->cr_offset, mask, val);
[Severity: Medium]
If device mode is mistakenly requested on the host-only PHY variant, does
this unconditionally write the device-mode configuration to bits 4, 5, and 6
of SYSCFG_USB2PHY2CR?
Looking at the hardware data definition for the host-only PHY:
static const struct stm32mp2_usb2phy_hw_data stm32mp25_usb2phy1_hwdata = {
.phyrefsel_mask = GENMASK(6, 4),
.is_usb2_host_only = true,
};
Since those exact bits are used for the reference clock selection, could
this silently corrupt the PHY clock configuration?
> + if (ret)
> + return ret;
[ ... ]
> +static int stm32_usb2phy_probe(struct platform_device *pdev)
> +{
[ ... ]
> + phy_dev->regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node, "st,syscfg", 1,
> + &phy_dev->cr_offset);
> + if (IS_ERR(phy_dev->regmap)) {
> + return dev_err_probe(dev, PTR_ERR(phy_dev->regmap),
> + "No st,syscfg phandle specified\n");
> + }
> +
> + phy_dev->hw_data = device_get_match_data(dev);
[Severity: Low]
If the driver is manually bound via sysfs to a device that does not match
the OF compatible strings, device_get_match_data() could return NULL.
Since the return value is not validated here, could this lead to a NULL
pointer dereference when phy_data->phyrefsel_mask is accessed later in
stm32_usb2phy_enable()?
> +
> + phy = devm_phy_create(dev, NULL, &stm32_usb2phy_data);
> + if (IS_ERR(phy))
> + return dev_err_probe(dev, PTR_ERR(phy), "Failed to create PHY\n");
[ ... ]
> +static int stm32_usb2phy_suspend(struct device *dev)
> +{
> + struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
> +
> + if (phy_dev->is_init)
> + return stm32_usb2phy_disable(phy_dev);
> +
> + return 0;
> +}
> +
> +static int stm32_usb2phy_resume(struct device *dev)
> +{
> + struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
> +
> + if (phy_dev->is_init)
> + return stm32_usb2phy_enable(phy_dev);
> +
> + return 0;
> +}
[Severity: High]
Does this system suspend/resume logic properly save and restore hardware
state when both the PHY and clock consumers are active?
If en_refcnt is 2, calling stm32_usb2phy_disable() during suspend will merely
decrement the counter to 1 and skip the actual hardware teardown. Conversely,
on resume, stm32_usb2phy_enable() increments the counter to 2 and skips
hardware initialization.
If power is lost during suspend, could the hardware remain completely
uninitialized upon resume?
Additionally, stm32_usb2phy_resume() does not appear to call
stm32_usb2phy_set_mode(), which might mean the PHY mode configuration is lost
after resuming.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=2
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 2/8] phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 1:12 ` sashiko-bot
0 siblings, 0 replies; 36+ messages in thread
From: sashiko-bot @ 2026-08-12 1:12 UTC (permalink / raw)
To: Marek Vasut
Cc: robh, devicetree, vkoul, neil.armstrong, olteanv, linux-phy,
conor+dt
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] Error paths in `stm32_usb2phy_enable` and `stm32_usb2phy_disable` fail to balance the `en_refcnt` reference counter.
- [High] Concurrent hardware initialization between the PHY framework and the Clock framework is not serialized.
- [High] System suspend/resume logic fails to correctly suspend and restore hardware state.
- [Medium] Configuring the host-only PHY into device mode physically corrupts the reference clock selection register.
- [Low] Missing validation of `device_get_match_data()` return value leads to a NULL pointer dereference.
--
--- Patch [2]: [PATCH 2/8] phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY ---
commit f2add7ff621e9f11087271861a198a27e1da818a
Author: Pankaj Dev <pankaj.dev@st.com>
phy: stm32: Add support for ST STM32MP25 USB2-FEMTO PHY
This commit adds the USB2 PHY driver for STM32MP25 USB2 controllers. It
supports both the USB2.0 host-only controller and the USB 2.0 part of the
DWC3 controller by differentiating them via compatible strings.
> diff --git a/drivers/phy/st/phy-stm32-usb2phy.c b/drivers/phy/st/phy-stm32-usb2phy.c
> new file mode 100644
> index 0000000000000..d902354f88b69
> --- /dev/null
> +++ b/drivers/phy/st/phy-stm32-usb2phy.c
[ ... ]
> +static int stm32_usb2phy_enable(struct stm32_usb2phy *phy_dev)
> +{
> + const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
> + unsigned long rate;
> + int refsel, ret;
> +
> + /* Check if a phy is already init or clk48 in use */
> + if (atomic_inc_return(&phy_dev->en_refcnt) > 1)
> + return 0;
[Severity: High]
Is there a race condition here if both the PHY and Clock frameworks
attempt to enable the hardware concurrently?
If Thread A calls stm32_usb2phy_enable() via phy_init and Thread B calls
it via clk_prepare concurrently:
Thread A increments en_refcnt to 1 and proceeds with initialization.
Thread B increments en_refcnt to 2 and returns success immediately.
Since no mutex is held during the multi-step hardware initialization,
could Thread B start using the hardware before Thread A has finished
configuring it?
> +
> + rate = clk_get_rate(phy_dev->phyref);
> + if (rate == 19200000)
> + refsel = 0;
> + else if (rate == 20000000)
> + refsel = 1;
> + else if (rate == 24000000)
> + refsel = 2;
> + else
> + return -EINVAL;
> +
> + ret = regmap_update_bits(phy_dev->regmap,
> + phy_dev->cr_offset,
> + phy_data->phyrefsel_mask,
> + field_prep(phy_data->phyrefsel_mask, refsel));
> + if (ret)
> + return ret;
[Severity: High]
If regmap_update_bits() fails, does this return early without decrementing
en_refcnt?
This looks like it could leave the reference counter permanently incremented,
preventing future attempts to initialize the PHY or clock if a resource
allocation fails here or in subsequent steps like regulator_enable().
> +
> + if (phy_data->is_usb2_host_only) {
[ ... ]
> +static int stm32_usb2phy_disable(struct stm32_usb2phy *phy_dev)
> +{
> + int ret;
> +
> + /* Check if a phy is still init or clk48 in use */
> + if (atomic_dec_return(&phy_dev->en_refcnt) > 0)
> + return 0;
> +
> + ret = reset_control_assert(phy_dev->rstc);
> + if (ret)
> + return ret;
[Severity: High]
If reset_control_assert() fails, does this skip the remaining hardware disable
steps while leaving en_refcnt already decremented?
> +
> + clk_disable_unprepare(phy_dev->phyref);
> +
> + return regulator_disable(phy_dev->vdd33);
> +}
> +
> +static int stm32_usb2phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
> +{
> + struct stm32_usb2phy *phy_dev = phy_get_drvdata(phy);
> + const struct stm32mp2_usb2phy_hw_data *phy_data = phy_dev->hw_data;
> + u32 val, mask = SYSCFG_USB2PHY2CR_USB2PHY2CMN;
> + int ret;
> +
> + if (mode == PHY_MODE_USB_HOST) {
[ ... ]
> + } else if (mode == PHY_MODE_USB_DEVICE) {
> + val = SYSCFG_USB2PHY2CR_USB2PHY2CMN |
> + SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL;
> + mask |= SYSCFG_USB2PHY2CR_VBUSVALID |
> + SYSCFG_USB2PHY2CR_VBUSVLDEXTSEL |
> + SYSCFG_USB2PHY2CR_VBUSVLDEXT;
> + if (submode != USB_ROLE_NONE)
> + val |= SYSCFG_USB2PHY2CR_VBUSVLDEXT;
> + } else {
> + return -EINVAL;
> + }
> +
> + ret = regmap_update_bits(phy_dev->regmap, phy_dev->cr_offset, mask, val);
[Severity: Medium]
If device mode is mistakenly requested on the host-only PHY variant, does
this unconditionally write the device-mode configuration to bits 4, 5, and 6
of SYSCFG_USB2PHY2CR?
Looking at the hardware data definition for the host-only PHY:
static const struct stm32mp2_usb2phy_hw_data stm32mp25_usb2phy1_hwdata = {
.phyrefsel_mask = GENMASK(6, 4),
.is_usb2_host_only = true,
};
Since those exact bits are used for the reference clock selection, could
this silently corrupt the PHY clock configuration?
> + if (ret)
> + return ret;
[ ... ]
> +static int stm32_usb2phy_probe(struct platform_device *pdev)
> +{
[ ... ]
> + phy_dev->regmap = syscon_regmap_lookup_by_phandle_args(dev->of_node, "st,syscfg", 1,
> + &phy_dev->cr_offset);
> + if (IS_ERR(phy_dev->regmap)) {
> + return dev_err_probe(dev, PTR_ERR(phy_dev->regmap),
> + "No st,syscfg phandle specified\n");
> + }
> +
> + phy_dev->hw_data = device_get_match_data(dev);
[Severity: Low]
If the driver is manually bound via sysfs to a device that does not match
the OF compatible strings, device_get_match_data() could return NULL.
Since the return value is not validated here, could this lead to a NULL
pointer dereference when phy_data->phyrefsel_mask is accessed later in
stm32_usb2phy_enable()?
> +
> + phy = devm_phy_create(dev, NULL, &stm32_usb2phy_data);
> + if (IS_ERR(phy))
> + return dev_err_probe(dev, PTR_ERR(phy), "Failed to create PHY\n");
[ ... ]
> +static int stm32_usb2phy_suspend(struct device *dev)
> +{
> + struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
> +
> + if (phy_dev->is_init)
> + return stm32_usb2phy_disable(phy_dev);
> +
> + return 0;
> +}
> +
> +static int stm32_usb2phy_resume(struct device *dev)
> +{
> + struct stm32_usb2phy *phy_dev = dev_get_drvdata(dev);
> +
> + if (phy_dev->is_init)
> + return stm32_usb2phy_enable(phy_dev);
> +
> + return 0;
> +}
[Severity: High]
Does this system suspend/resume logic properly save and restore hardware
state when both the PHY and clock consumers are active?
If en_refcnt is 2, calling stm32_usb2phy_disable() during suspend will merely
decrement the counter to 1 and skip the actual hardware teardown. Conversely,
on resume, stm32_usb2phy_enable() increments the counter to 2 and skips
hardware initialization.
If power is lost during suspend, could the hardware remain completely
uninitialized upon resume?
Additionally, stm32_usb2phy_resume() does not appear to call
stm32_usb2phy_set_mode(), which might mean the PHY mode configuration is lost
after resuming.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260812010157.1772849-1-marex@nabladev.com?part=2
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 2:45 ` Rob Herring (Arm)
-1 siblings, 0 replies; 36+ messages in thread
From: Rob Herring (Arm) @ 2026-08-12 2:45 UTC (permalink / raw)
To: Marek Vasut
Cc: Alexandre Torgue, linux-usb, Fabrice Gasnier,
Clément Le Goffic, Vinod Koul, Rahul Kumar, devicetree,
Neil Armstrong, Conor Dooley, Thinh Nguyen, Maxime Coquelin,
linux-phy, linux-kernel, Pankaj Dev, Christian Bruel,
linux-arm-kernel, Krzysztof Kozlowski, Rosen Penev, linux-stm32,
kernel, Greg Kroah-Hartman
On Wed, 12 Aug 2026 02:55:41 +0200, Marek Vasut wrote:
> From: Pankaj Dev <pankaj.dev@st.com>
>
> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
> Two such PHYs in total are present in STM32MP25 SoC, they both are
> slightly different, therefore they use different compatible string
> to discern them.
>
> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
> Signed-off-by: Marek Vasut <marex@nabladev.com>
> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
> Signed-off-by: Rahul Kumar <rahul.kumar05@st.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
> ---
> .../bindings/phy/st,stm32-usb2phy.yaml | 72 +++++++++++++++++++
> 1 file changed, 72 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/phy/st,stm32-usb2phy.example.dtb: /example-0/usb-phy: failed to match any schema with compatible: ['st,stm32mp25-usb2phy']
doc reference errors (make refcheckdocs):
See https://patchwork.kernel.org/project/devicetree/patch/20260812010157.1772849-2-marex@nabladev.com
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 2:45 ` Rob Herring (Arm)
0 siblings, 0 replies; 36+ messages in thread
From: Rob Herring (Arm) @ 2026-08-12 2:45 UTC (permalink / raw)
To: Marek Vasut
Cc: Alexandre Torgue, linux-usb, Fabrice Gasnier,
Clément Le Goffic, Vinod Koul, Rahul Kumar, devicetree,
Neil Armstrong, Conor Dooley, Thinh Nguyen, Maxime Coquelin,
linux-phy, linux-kernel, Pankaj Dev, Christian Bruel,
linux-arm-kernel, Krzysztof Kozlowski, Rosen Penev, linux-stm32,
kernel, Greg Kroah-Hartman
On Wed, 12 Aug 2026 02:55:41 +0200, Marek Vasut wrote:
> From: Pankaj Dev <pankaj.dev@st.com>
>
> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
> Two such PHYs in total are present in STM32MP25 SoC, they both are
> slightly different, therefore they use different compatible string
> to discern them.
>
> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
> Signed-off-by: Marek Vasut <marex@nabladev.com>
> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
> Signed-off-by: Rahul Kumar <rahul.kumar05@st.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
> ---
> .../bindings/phy/st,stm32-usb2phy.yaml | 72 +++++++++++++++++++
> 1 file changed, 72 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
>
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
Documentation/devicetree/bindings/phy/st,stm32-usb2phy.example.dtb: /example-0/usb-phy: failed to match any schema with compatible: ['st,stm32mp25-usb2phy']
doc reference errors (make refcheckdocs):
See https://patchwork.kernel.org/project/devicetree/patch/20260812010157.1772849-2-marex@nabladev.com
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
2026-08-12 0:55 ` Marek Vasut
@ 2026-08-12 10:15 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 36+ messages in thread
From: Krzysztof Kozlowski @ 2026-08-12 10:15 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-usb, Pankaj Dev, Clément Le Goffic, Fabrice Gasnier,
Rahul Kumar, Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
On Wed, Aug 12, 2026 at 02:55:41AM +0200, Marek Vasut wrote:
> From: Pankaj Dev <pankaj.dev@st.com>
>
> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
> Two such PHYs in total are present in STM32MP25 SoC, they both are
> slightly different, therefore they use different compatible string
What is slightly different? This should be either here, or better, in
"description" part.
> to discern them.
>
> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
> Signed-off-by: Marek Vasut <marex@nabladev.com>
> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
> Signed-off-by: Rahul Kumar <rahul.kumar05@st.com>
Incomplete/incorrect DCO chain. Who sends it? Rahul?
> ---
> 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
> ---
> .../bindings/phy/st,stm32-usb2phy.yaml | 72 +++++++++++++++++++
> 1 file changed, 72 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
>
> diff --git a/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
> new file mode 100644
> index 0000000000000..ca9fc3b87383c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
> @@ -0,0 +1,72 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/phy/st,stm32-usb2phy.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: STMicroelectronics STM32 MPU High-Speed USB PHY
> +
> +description:
> + USB2 PHY block in STM32 is attached to USB 2.0 Host controller and
> + USB 2.0 side of DWC3 DRD controller, and provides the USB LS/FS/HS
> + connectivity.
> +
> +maintainers:
> + - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
> + - Marek Vasut <marex@nabladev.com>
> + - Pankaj Dev <pankaj.dev@st.com>
> +
> +properties:
> + compatible:
> + enum:
> + - st,stm32mp25-usb2phy1
> + - st,stm32mp25-usb2phy2
> +
> + "#phy-cells":
> + const: 0
> +
> + clocks:
> + maxItems: 1
> +
> + resets:
> + maxItems: 1
> +
> + vdd33-supply:
> + description: Phandle to regulator providing 3V3 power supply to the USB2 HS PHY
> +
> + st,syscfg:
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + description: Phandle to system configuration controller.
> + items:
> + - items:
> + - description: phandle to syscfg
> + - description: USB2PHY control offset within syscfg
> +
> + "#clock-cells":
> + const: 0
> +
> +required:
> + - compatible
> + - "#clock-cells"
> + - "#phy-cells"
> + - clocks
> + - resets
> + - st,syscfg
> + - vdd33-supply
> +
> +unevaluatedProperties: false
additionalProperties.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 10:15 ` Krzysztof Kozlowski
0 siblings, 0 replies; 36+ messages in thread
From: Krzysztof Kozlowski @ 2026-08-12 10:15 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-usb, Pankaj Dev, Clément Le Goffic, Fabrice Gasnier,
Rahul Kumar, Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
On Wed, Aug 12, 2026 at 02:55:41AM +0200, Marek Vasut wrote:
> From: Pankaj Dev <pankaj.dev@st.com>
>
> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
> Two such PHYs in total are present in STM32MP25 SoC, they both are
> slightly different, therefore they use different compatible string
What is slightly different? This should be either here, or better, in
"description" part.
> to discern them.
>
> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
> Signed-off-by: Marek Vasut <marex@nabladev.com>
> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
> Signed-off-by: Rahul Kumar <rahul.kumar05@st.com>
Incomplete/incorrect DCO chain. Who sends it? Rahul?
> ---
> 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
> ---
> .../bindings/phy/st,stm32-usb2phy.yaml | 72 +++++++++++++++++++
> 1 file changed, 72 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
>
> diff --git a/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
> new file mode 100644
> index 0000000000000..ca9fc3b87383c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/phy/st,stm32-usb2phy.yaml
> @@ -0,0 +1,72 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/phy/st,stm32-usb2phy.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: STMicroelectronics STM32 MPU High-Speed USB PHY
> +
> +description:
> + USB2 PHY block in STM32 is attached to USB 2.0 Host controller and
> + USB 2.0 side of DWC3 DRD controller, and provides the USB LS/FS/HS
> + connectivity.
> +
> +maintainers:
> + - Fabrice Gasnier <fabrice.gasnier@foss.st.com>
> + - Marek Vasut <marex@nabladev.com>
> + - Pankaj Dev <pankaj.dev@st.com>
> +
> +properties:
> + compatible:
> + enum:
> + - st,stm32mp25-usb2phy1
> + - st,stm32mp25-usb2phy2
> +
> + "#phy-cells":
> + const: 0
> +
> + clocks:
> + maxItems: 1
> +
> + resets:
> + maxItems: 1
> +
> + vdd33-supply:
> + description: Phandle to regulator providing 3V3 power supply to the USB2 HS PHY
> +
> + st,syscfg:
> + $ref: /schemas/types.yaml#/definitions/phandle-array
> + description: Phandle to system configuration controller.
> + items:
> + - items:
> + - description: phandle to syscfg
> + - description: USB2PHY control offset within syscfg
> +
> + "#clock-cells":
> + const: 0
> +
> +required:
> + - compatible
> + - "#clock-cells"
> + - "#phy-cells"
> + - clocks
> + - resets
> + - st,syscfg
> + - vdd33-supply
> +
> +unevaluatedProperties: false
additionalProperties.
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
2026-08-12 10:15 ` Krzysztof Kozlowski
@ 2026-08-12 10:56 ` Marek Vasut
-1 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 10:56 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-usb, Pankaj Dev, Fabrice Gasnier, Rahul Kumar,
Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
On 8/12/26 12:15 PM, Krzysztof Kozlowski wrote:
> On Wed, Aug 12, 2026 at 02:55:41AM +0200, Marek Vasut wrote:
>> From: Pankaj Dev <pankaj.dev@st.com>
>>
>> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
>> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
>> Two such PHYs in total are present in STM32MP25 SoC, they both are
>> slightly different, therefore they use different compatible string
>
> What is slightly different? This should be either here, or better, in
> "description" part.
They are both Synopsys FEMTO-PHY , but they are each attached to a
different controller (one to USB 2.0 host , the other to DWC3 DRD) , and
their control bits in the system controller register are different for
each variant.
I extended the description in V2.
>> to discern them.
>>
>> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
>> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
>> Signed-off-by: Marek Vasut <marex@nabladev.com>
>> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
>> Signed-off-by: Rahul Kumar <rahul.kumar05@st.com>
>
> Incomplete/incorrect DCO chain. Who sends it? Rahul?
This is lifted from the ST downstream kernel fork, it's a combination of
a bunch of commits there and then cleaned up. Pankaj and Fabrice did
most of the downstream work, I did the clean up for upstreaming. I
collected the SoB lines from all the commits from ST downstream fork and
added mine, hence this list. How shall I address this correctly, with
some Co-developed-by tag ? Who gets which tag ?
additionalProperties is addressed in V2, so is the reported from Rob's
bot regarding the botched compatible string in example.
Thanks !
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 10:56 ` Marek Vasut
0 siblings, 0 replies; 36+ messages in thread
From: Marek Vasut @ 2026-08-12 10:56 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: linux-usb, Pankaj Dev, Fabrice Gasnier, Rahul Kumar,
Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
On 8/12/26 12:15 PM, Krzysztof Kozlowski wrote:
> On Wed, Aug 12, 2026 at 02:55:41AM +0200, Marek Vasut wrote:
>> From: Pankaj Dev <pankaj.dev@st.com>
>>
>> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
>> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
>> Two such PHYs in total are present in STM32MP25 SoC, they both are
>> slightly different, therefore they use different compatible string
>
> What is slightly different? This should be either here, or better, in
> "description" part.
They are both Synopsys FEMTO-PHY , but they are each attached to a
different controller (one to USB 2.0 host , the other to DWC3 DRD) , and
their control bits in the system controller register are different for
each variant.
I extended the description in V2.
>> to discern them.
>>
>> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
>> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
>> Signed-off-by: Marek Vasut <marex@nabladev.com>
>> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
>> Signed-off-by: Rahul Kumar <rahul.kumar05@st.com>
>
> Incomplete/incorrect DCO chain. Who sends it? Rahul?
This is lifted from the ST downstream kernel fork, it's a combination of
a bunch of commits there and then cleaned up. Pankaj and Fabrice did
most of the downstream work, I did the clean up for upstreaming. I
collected the SoB lines from all the commits from ST downstream fork and
added mine, hence this list. How shall I address this correctly, with
some Co-developed-by tag ? Who gets which tag ?
additionalProperties is addressed in V2, so is the reported from Rob's
bot regarding the botched compatible string in example.
Thanks !
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
2026-08-12 10:56 ` Marek Vasut
@ 2026-08-12 11:22 ` Krzysztof Kozlowski
-1 siblings, 0 replies; 36+ messages in thread
From: Krzysztof Kozlowski @ 2026-08-12 11:22 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-usb, Pankaj Dev, Fabrice Gasnier, Rahul Kumar,
Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
On 12/08/2026 12:56, Marek Vasut wrote:
> On 8/12/26 12:15 PM, Krzysztof Kozlowski wrote:
>> On Wed, Aug 12, 2026 at 02:55:41AM +0200, Marek Vasut wrote:
>>> From: Pankaj Dev <pankaj.dev@st.com>
>>>
>>> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
>>> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
>>> Two such PHYs in total are present in STM32MP25 SoC, they both are
>>> slightly different, therefore they use different compatible string
>>
>> What is slightly different? This should be either here, or better, in
>> "description" part.
>
> They are both Synopsys FEMTO-PHY , but they are each attached to a
> different controller (one to USB 2.0 host , the other to DWC3 DRD) , and
> their control bits in the system controller register are different for
> each variant.
>
> I extended the description in V2.
Depending on the actual difference, this rather belongs to the phandle
to syscon, instead of separate compatible.
>
>>> to discern them.
>>>
>>> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
>>> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
>>> Signed-off-by: Marek Vasut <marex@nabladev.com>
>>> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
>>> Signed-off-by: Rahul Kumar <rahul.kumar05@st.com>
>>
>> Incomplete/incorrect DCO chain. Who sends it? Rahul?
> This is lifted from the ST downstream kernel fork, it's a combination of
> a bunch of commits there and then cleaned up. Pankaj and Fabrice did
> most of the downstream work, I did the clean up for upstreaming. I
> collected the SoB lines from all the commits from ST downstream fork and
> added mine, hence this list. How shall I address this correctly, with
> some Co-developed-by tag ? Who gets which tag ?
Everything explained in submitting patches. The SoBs represent the
chronological lifecyle of the patch. Person sending the patch is
obviously the last one touching. How Rahul could touch the code AFTER
you sent it?
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 36+ messages in thread
* Re: [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY
@ 2026-08-12 11:22 ` Krzysztof Kozlowski
0 siblings, 0 replies; 36+ messages in thread
From: Krzysztof Kozlowski @ 2026-08-12 11:22 UTC (permalink / raw)
To: Marek Vasut
Cc: linux-usb, Pankaj Dev, Fabrice Gasnier, Rahul Kumar,
Alexandre Torgue, Christian Bruel, Conor Dooley,
Greg Kroah-Hartman, Krzysztof Kozlowski, Maxime Coquelin,
Neil Armstrong, Rob Herring, Rosen Penev, Thinh Nguyen,
Vinod Koul, devicetree, kernel, linux-arm-kernel, linux-kernel,
linux-phy, linux-stm32
On 12/08/2026 12:56, Marek Vasut wrote:
> On 8/12/26 12:15 PM, Krzysztof Kozlowski wrote:
>> On Wed, Aug 12, 2026 at 02:55:41AM +0200, Marek Vasut wrote:
>>> From: Pankaj Dev <pankaj.dev@st.com>
>>>
>>> Document USB2 PHY for STM32MP25 USB2 controllers, which includes the
>>> USB2.0 host-only controller and USB 2.0 part of the DWC3 controller.
>>> Two such PHYs in total are present in STM32MP25 SoC, they both are
>>> slightly different, therefore they use different compatible string
>>
>> What is slightly different? This should be either here, or better, in
>> "description" part.
>
> They are both Synopsys FEMTO-PHY , but they are each attached to a
> different controller (one to USB 2.0 host , the other to DWC3 DRD) , and
> their control bits in the system controller register are different for
> each variant.
>
> I extended the description in V2.
Depending on the actual difference, this rather belongs to the phandle
to syscon, instead of separate compatible.
>
>>> to discern them.
>>>
>>> Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
>>> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
>>> Signed-off-by: Marek Vasut <marex@nabladev.com>
>>> Signed-off-by: Pankaj Dev <pankaj.dev@st.com>
>>> Signed-off-by: Rahul Kumar <rahul.kumar05@st.com>
>>
>> Incomplete/incorrect DCO chain. Who sends it? Rahul?
> This is lifted from the ST downstream kernel fork, it's a combination of
> a bunch of commits there and then cleaned up. Pankaj and Fabrice did
> most of the downstream work, I did the clean up for upstreaming. I
> collected the SoB lines from all the commits from ST downstream fork and
> added mine, hence this list. How shall I address this correctly, with
> some Co-developed-by tag ? Who gets which tag ?
Everything explained in submitting patches. The SoBs represent the
chronological lifecyle of the patch. Person sending the patch is
obviously the last one touching. How Rahul could touch the code AFTER
you sent it?
Best regards,
Krzysztof
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 36+ messages in thread
end of thread, other threads:[~2026-08-12 11:23 UTC | newest]
Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-12 0:55 [PATCH 0/8] arm64: dts: phy: st: usb: Add STM32MP2 USB support Marek Vasut
2026-08-12 0:55 ` Marek Vasut
2026-08-12 0:55 ` [PATCH 1/8] dt-bindings: phy: Document ST STM32MP25 USB2-FEMTO PHY Marek Vasut
2026-08-12 0:55 ` Marek Vasut
2026-08-12 1:05 ` sashiko-bot
2026-08-12 1:05 ` sashiko-bot
2026-08-12 2:45 ` Rob Herring (Arm)
2026-08-12 2:45 ` Rob Herring (Arm)
2026-08-12 10:15 ` Krzysztof Kozlowski
2026-08-12 10:15 ` Krzysztof Kozlowski
2026-08-12 10:56 ` Marek Vasut
2026-08-12 10:56 ` Marek Vasut
2026-08-12 11:22 ` Krzysztof Kozlowski
2026-08-12 11:22 ` Krzysztof Kozlowski
2026-08-12 0:55 ` [PATCH 2/8] phy: stm32: Add support for " Marek Vasut
2026-08-12 0:55 ` Marek Vasut
2026-08-12 1:12 ` sashiko-bot
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 0:55 ` Marek Vasut
2026-08-12 1:10 ` sashiko-bot
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 ` 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 0:55 ` Marek Vasut
2026-08-12 1:08 ` sashiko-bot
2026-08-12 1:08 ` sashiko-bot
2026-08-12 0:55 ` [PATCH 6/8] usb: dwc3: dwc3-generic-plat: Add ST STM32MP2 DWC3 xHCI USB controller glue Marek Vasut
2026-08-12 0:55 ` Marek Vasut
2026-08-12 1:11 ` sashiko-bot
2026-08-12 1:11 ` 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 ` Marek Vasut
2026-08-12 0:55 ` [PATCH 8/8] arm64: dts: st: Add USB nodes on stm32mp251 Marek Vasut
2026-08-12 0:55 ` Marek Vasut
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.