Skip to contentSkip to conversation

Add Google Tensor SoC USB controller support

PATCH Superseded Roy Luo 5 participants 15 messages Nov 22, 2025 – Dec 3, 2025

Subsystems (5)

v8 of 10 Superseded Latest is v10 →

lore
Share & tools
lore

Roy Luo

author
#0 lore raw

v8 cover Add Google Tensor SoC USB controller support

This series introduces USB controller support for the Google Tensor G5 SoC (codename: Laguna), a new generation of Google silicon first launched with Pixel 10 devices.

The Tensor G5 represents a significant architectural overhaul compared to previous Tensor generations (e.g., gs101), which were based on Samsung Exynos IP. Although the G5 still utilizes Synopsys IP for the USB components, the custom top-level integration introduces a completely new design for clock, reset scheme, register interfaces and programming sequence, necessitating new drivers and device tree bindings.

The USB subsystem on Tensor G5 integrates a Synopsys DWC3 USB 3.1 DRD-Single Port controller with hibernation support, and a custom PHY block comprising Synopsys eUSB2 and USB 3.2/DP combo PHYs. The PHY support is sent as a separate patch series.

---
Changes in v8:
- Add COMPILE_TEST to dependencies for build coverage.
- Drop redundant default n in Kconfig.
- Update Kconfig help text to explicitly state the module name.
- Use container_of_const() in the to_dwc3_google() macro for type safety. Link to v7: https://lore.kernel.org/linux-usb/[email protected]

Changes in v7:
- Follow driver naming convention and rename the driver as "dwc3-google". Link to v6: https://lore.kernel.org/linux-usb/[email protected]

Changes in v6:
- Use "lga" as SoC name instead of "gs5" to align with Tensor G5 device tree https://lore.kernel.org/lkml/[email protected]
Link to v5: https://lore.kernel.org/linux-usb/[email protected]

Changes in v5:
- Use syscon to access host_cfg and usbint_cfg MMIO space per
discussion in https://lore.kernel.org/linux-phy/[email protected]
- Make warn logs in dwc3_google_resume_irq() dev_dbg.
Link to v4: https://lore.kernel.org/linux-usb/[email protected]

Changes in v4:
- Separate controller and phy changes into two distinct patch series.
- Rename dwc3 core interrupt as "core".
- Remove u2phy_apb clk/reset (moved to PHY)
- Configure usb2only mode when usb3 phy is not present.
- Adopt pm_ptr PM macros to fix build warnings.
Link to v3: https://lore.kernel.org/linux-usb/[email protected]

Changes in v3:
- Align binding file name with the compatible string
- Simplify the compatible property in binding to a single const value.
- Add descriptive comments and use item list in binding.
- Rename binding entries for clarity and brevity.
Link to v2: https://lore.kernel.org/linux-usb/[email protected]

Changes in v2:
- Reorder patches to present bindings first.
- Update dt binding compatible strings to be SoC-specific (google,gs5-*).
- Better describe the hardware in dt binding commit messages and descriptions.
- Adjust PHY driver commit subjects to use correct prefixes ("phy:").
- Move PHY driver from a subdirectory to drivers/phy/.
Link to v1: https://lore.kernel.org/linux-usb/[email protected]/

---
Roy Luo (2):
dt-bindings: usb: dwc3: Add Google Tensor G5 DWC3
usb: dwc3: Add Google Tensor SoC DWC3 glue driver

 .../devicetree/bindings/usb/google,lga-dwc3.yaml   | 140 +++++
 drivers/usb/dwc3/Kconfig                           |  13 +
 drivers/usb/dwc3/Makefile                          |   1 +
 drivers/usb/dwc3/dwc3-google.c                     | 628 +++++++++++++++++++++
 4 files changed, 782 insertions(+)

---
base-commit: 8b690556d8fe074b4f9835075050fba3fb180e93
change-id: 20251122-controller-129b0dd57a74

Best regards,

Signature · 1 line
Roy Luo <[email protected]>
author
#1 lore raw

PATCH v8 1/2 dt-bindings: usb: dwc3: Add Google Tensor G5 DWC3

Document the device tree bindings for the DWC3 USB controller found in Google Tensor SoCs, starting with the G5 generation (codename: laguna).

The Tensor G5 silicon represents a complete architectural departure from previous generations (like gs101), including entirely new clock/reset schemes, top-level wrapper and register interface. Consequently, existing Samsung/Exynos DWC3 USB bindings are incompatible, necessitating this new device tree binding.

The USB controller on Tensor G5 is based on Synopsys DWC3 IP and features Dual-Role Device single port with hibernation support.

---
 .../devicetree/bindings/usb/google,lga-dwc3.yaml   | 140 +++++++++++++++++++++
 1 file changed, 140 insertions(+)
Documentation/devicetree/bindings/usb/google,lga-dwc3.yaml new file +140 -0
new file mode 100644
index 0000000000000000000000000000000000000000..95be84c843f5da0e80ef5ef1ac9193019b5eb2a0
@@ -0,0 +1,140 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright (c) 2025, Google LLC
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/google,lga-dwc3.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Google Tensor Series G5 (Laguna) DWC3 USB SoC Controller
+
+maintainers:
+  - Roy Luo <[email protected]>
+
+description:
+  Describes the DWC3 USB controller block implemented on Google Tensor SoCs,
+  starting with the G5 generation (laguna). Based on Synopsys DWC3 IP, the
+  controller features Dual-Role Device single port with hibernation add-on.
+
+properties:
+  compatible:
+    const: google,lga-dwc3
+
+  reg:
+    items:
+      - description: Core DWC3 IP registers.
+
+  interrupts:
+    items:
+      - description: Core DWC3 interrupt.
+      - description: High speed power management event for remote wakeup.
+      - description: Super speed power management event for remote wakeup.
+
+  interrupt-names:
+    items:
+      - const: core
+      - const: hs_pme
+      - const: ss_pme
+
+  clocks:
+    items:
+      - description: Non-sticky module clock.
+      - description: Sticky module clock.
+
+  clock-names:
+    items:
+      - const: non_sticky
+      - const: sticky
+
+  resets:
+    items:
+      - description: Non-sticky module reset.
+      - description: Sticky module reset.
+      - description: DRD bus reset.
+      - description: Top-level reset.
+
+  reset-names:
+    items:
+      - const: non_sticky
+      - const: sticky
+      - const: drd_bus
+      - const: top
+
+  power-domains:
+    items:
+      - description: Power switchable domain, the child of top domain.
+          Turning it on puts the controller into full power state,
+          turning it off puts the controller into power gated state.
+      - description: Top domain, the parent of power switchable domain.
+          Turning it on puts the controller into power gated state,
+          turning it off completely shuts off the controller.
+
+  power-domain-names:
+    items:
+      - const: psw
+      - const: top
+
+  iommus:
+    maxItems: 1
+
+  google,usb-cfg-csr:
+    description:
+      A phandle to a syscon node used to access the USB configuration
+      registers. These registers are the top-level wrapper of the USB
+      subsystem and provide control and status for the integrated USB
+      controller and USB PHY.
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+    items:
+      - items:
+          - description: phandle to the syscon node.
+          - description: USB host controller configuration register offset.
+          - description: USB custom interrrupts control register offset.
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - interrupt-names
+  - clocks
+  - clock-names
+  - resets
+  - reset-names
+  - power-domains
+  - power-domain-names
+  - google,usb-cfg-csr
+
+allOf:
+  - $ref: snps,dwc3-common.yaml#
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/interrupt-controller/irq.h>
+    soc {
+        #address-cells = <2>;
+        #size-cells = <2>;
+
+        usb@c400000 {
+            compatible = "google,lga-dwc3";
+            reg = <0 0x0c400000  0 0xd060>;
+            interrupts = <GIC_SPI 580 IRQ_TYPE_LEVEL_HIGH 0>,
+                         <GIC_SPI 597 IRQ_TYPE_LEVEL_HIGH 0>,
+                         <GIC_SPI 598 IRQ_TYPE_LEVEL_HIGH 0>;
+            interrupt-names = "core", "hs_pme", "ss_pme";
+            clocks = <&hsion_usbc_non_sticky_clk>,  <&hsion_usbc_sticky_clk>;
+            clock-names = "non_sticky", "sticky";
+            resets = <&hsion_resets_usbc_non_sticky>, <&hsion_resets_usbc_sticky>,
+                     <&hsion_resets_usb_drd_bus>, <&hsion_resets_usb_top>;
+            reset-names = "non_sticky", "sticky", "drd_bus", "top";
+            power-domains = <&hsio_n_usb_psw>, <&hsio_n_usb>;
+            power-domain-names = "psw", "top";
+            phys = <&usb_phy 0>;
+            phy-names = "usb2-phy";
+            snps,quirk-frame-length-adjustment = <0x20>;
+            snps,gfladj-refclk-lpm-sel-quirk;
+            snps,incr-burst-type-adjustment = <4>;
+            google,usb-cfg-csr = <&usb_cfg_csr 0x0 0x20>;
+        };
+    };
+...
Signature · 1 line
2.52.0.rc2.455.g230fcf2819-goog
author
#2 lore raw

PATCH v8 2/2 usb: dwc3: Add Google Tensor SoC DWC3 glue driver

In reply to Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +13 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
 	  the dwc3 child node in the device tree.
 	  Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
+config USB_DWC3_GOOGLE
+	tristate "Google Platform"
+	depends on COMPILE_TEST
+	depends on OF && COMMON_CLK && RESET_CONTROLLER
+	help
+	  Support the DesignWare Core USB3 IP found on Google Tensor
+	  SoCs, starting with the G5 generation. This driver includes
+	  support for hibernation in host mode.
+	  Say 'Y' or 'M' if you have one such device.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called dwc3-google.ko.
+
 endif
drivers/usb/dwc3/Makefile +1 -0
index 96469e48ff9d189cc8d0b65e65424eae2158bcfe..cf1cd408d938b3ac26d58b9be7fcc5af3ee82660 100644
@@ -58,3 +58,4 @@ obj-$(CONFIG_USB_DWC3_XILINX)		+= dwc3-xilinx.o
 obj-$(CONFIG_USB_DWC3_OCTEON)		+= dwc3-octeon.o
 obj-$(CONFIG_USB_DWC3_RTK)		+= dwc3-rtk.o
 obj-$(CONFIG_USB_DWC3_GENERIC_PLAT)	+= dwc3-generic-plat.o
+obj-$(CONFIG_USB_DWC3_GOOGLE)		+= dwc3-google.o
drivers/usb/dwc3/dwc3-google.c new file +628 -0

628 lines not on this page · raw message

Signature · 1 line
2.52.0.rc2.455.g230fcf2819-goog
maintainer Reviewed-by on v8 2/2
#3 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Hi Roy,

Thanks for your patch. It's great to see Laguna support being added upstream.

Quoted 39 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 209

Quoted 10 lines
drivers/usb/dwc3/Kconfig +7 -0
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
          the dwc3 child node in the device tree.
          Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
+config USB_DWC3_GOOGLE
+       tristate "Google Platform"
+       depends on COMPILE_TEST
+       depends on OF && COMMON_CLK && RESET_CONTROLLER
+       help
+         Support the DesignWare Core USB3 IP found on Google Tensor
+         SoCs, starting with the G5 generation. This driver includes

consider adding: (Laguna)

Quoted 32 lines
drivers/usb/dwc3/Kconfig +6 -0
+         support for hibernation in host mode.
+         Say 'Y' or 'M' if you have one such device.
+
+         To compile this driver as a module, choose M here: the
+         module will be called dwc3-google.ko.
+
 endif
drivers/usb/dwc3/Makefile +1 -0
index 96469e48ff9d189cc8d0b65e65424eae2158bcfe..cf1cd408d938b3ac26d58b9be7fcc5af3ee82660 100644
@@ -58,3 +58,4 @@ obj-$(CONFIG_USB_DWC3_XILINX)         += dwc3-xilinx.o
 obj-$(CONFIG_USB_DWC3_OCTEON)          += dwc3-octeon.o
 obj-$(CONFIG_USB_DWC3_RTK)             += dwc3-rtk.o
 obj-$(CONFIG_USB_DWC3_GENERIC_PLAT)    += dwc3-generic-plat.o
+obj-$(CONFIG_USB_DWC3_GOOGLE)          += dwc3-google.o
drivers/usb/dwc3/dwc3-google.c new file +10 -0
new file mode 100644
index 0000000000000000000000000000000000000000..53e04a5409d8a11eb025b0f5cd351cb1b33281ab
@@ -0,0 +1,628 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * dwc3-google.c - Google DWC3 Specific Glue Layer
+ *
+ * Copyright (c) 2025, Google LLC
+ * Author: Roy Luo <[email protected]>
+ */
+
+#include <linux/of.h>
+#include <linux/bitfield.h>

drivers/usb/dwc3/dwc3-google.c line 20

Quoted 10 lines
drivers/usb/dwc3/dwc3-google.c new file +10 -0
+#include <linux/irq.h>
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+#include <linux/reset.h>
+#include <linux/pm_domain.h>
+#include <linux/iopoll.h>
+#include <linux/regmap.h>
+#include <linux/mfd/syscon.h>

Please sort the headers alphabetically. It helps avoid duplicates and is easier when adding new headers.

Also can you add this file, and the bindings patch to the Tensor SoC MAINTAINERS entry, so it's easier to review future patches?

With those nits addressed:

regards,

Peter.

#4 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Quoted 47 lines · Peter Griffin

Hi Roy,

Thanks for your patch. It's great to see Laguna support being added upstream.

Quoted 42 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
          the dwc3 child node in the device tree.
          Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
Quoted 9 lines

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 209

Quoted 7 lines
drivers/usb/dwc3/Kconfig +7 -0
+config USB_DWC3_GOOGLE
+       tristate "Google Platform"
+       depends on COMPILE_TEST
+       depends on OF && COMMON_CLK && RESET_CONTROLLER
+       help
+         Support the DesignWare Core USB3 IP found on Google Tensor
+         SoCs, starting with the G5 generation. This driver includes

consider adding: (Laguna)

What is "laguna" and why should it be listed here?

Quoted 37 lines
Quoted 37 lines
drivers/usb/dwc3/Kconfig +6 -0
+         support for hibernation in host mode.
+         Say 'Y' or 'M' if you have one such device.
+
+         To compile this driver as a module, choose M here: the
+         module will be called dwc3-google.ko.
+
 endif
drivers/usb/dwc3/Makefile +1 -0
index 96469e48ff9d189cc8d0b65e65424eae2158bcfe..cf1cd408d938b3ac26d58b9be7fcc5af3ee82660 100644
@@ -58,3 +58,4 @@ obj-$(CONFIG_USB_DWC3_XILINX)         += dwc3-xilinx.o
 obj-$(CONFIG_USB_DWC3_OCTEON)          += dwc3-octeon.o
 obj-$(CONFIG_USB_DWC3_RTK)             += dwc3-rtk.o
 obj-$(CONFIG_USB_DWC3_GENERIC_PLAT)    += dwc3-generic-plat.o
+obj-$(CONFIG_USB_DWC3_GOOGLE)          += dwc3-google.o
drivers/usb/dwc3/dwc3-google.c new file +15 -0
new file mode 100644
index 0000000000000000000000000000000000000000..53e04a5409d8a11eb025b0f5cd351cb1b33281ab
@@ -0,0 +1,628 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * dwc3-google.c - Google DWC3 Specific Glue Layer
+ *
+ * Copyright (c) 2025, Google LLC
+ * Author: Roy Luo <[email protected]>
+ */
+
+#include <linux/of.h>
+#include <linux/bitfield.h>
+#include <linux/irq.h>
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
Quoted 8 lines

drivers/usb/dwc3/dwc3-google.c line 20

Quoted 5 lines
drivers/usb/dwc3/dwc3-google.c new file +5 -0
+#include <linux/reset.h>
+#include <linux/pm_domain.h>
+#include <linux/iopoll.h>
+#include <linux/regmap.h>
+#include <linux/mfd/syscon.h>

Please sort the headers alphabetically. It helps avoid duplicates and is easier when adding new headers.

There is no such requirement for USB drivers.

thanks,

greg k-h

maintainer
#5 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Hi Greg

Quoted 59 lines · Greg Kroah-Hartman
Quoted 47 lines · Peter Griffin

Hi Roy,

Thanks for your patch. It's great to see Laguna support being added upstream.

Quoted 42 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
          the dwc3 child node in the device tree.
          Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
Quoted 9 lines

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 209

Quoted 7 lines
drivers/usb/dwc3/Kconfig +7 -0
+config USB_DWC3_GOOGLE
+       tristate "Google Platform"
+       depends on COMPILE_TEST
+       depends on OF && COMMON_CLK && RESET_CONTROLLER
+       help
+         Support the DesignWare Core USB3 IP found on Google Tensor
+         SoCs, starting with the G5 generation. This driver includes

consider adding: (Laguna)

Quoted 1 line

What is "laguna" and why should it be listed here?

Laguna is the codename of the SoC (mentioned in the commit message). The dt compatibles and proposed dt files all mention Laguna (as opposed to G5) or its abbreviated form lga so it could be helpful to have this mentioned in the help message.

See https://lore.kernel.org/lkml/20251111112158.1.I72a0b72562b85d02fee424fed939fea9049ddda9@changeid/

Peter.

author
#6 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

In reply to Peter Griffin
Quoted 48 lines · Peter Griffin

Hi Roy,

Thanks for your patch. It's great to see Laguna support being added upstream.

Quoted 42 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
          the dwc3 child node in the device tree.
          Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
Quoted 9 lines

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 209

Quoted 7 lines
drivers/usb/dwc3/Kconfig +7 -0
+config USB_DWC3_GOOGLE
+       tristate "Google Platform"
+       depends on COMPILE_TEST
+       depends on OF && COMMON_CLK && RESET_CONTROLLER
+       help
+         Support the DesignWare Core USB3 IP found on Google Tensor
+         SoCs, starting with the G5 generation. This driver includes

consider adding: (Laguna)

Ack, will add it in the next revision.

Quoted 38 lines
Quoted 38 lines
drivers/usb/dwc3/Kconfig +6 -0
+         support for hibernation in host mode.
+         Say 'Y' or 'M' if you have one such device.
+
+         To compile this driver as a module, choose M here: the
+         module will be called dwc3-google.ko.
+
 endif
drivers/usb/dwc3/Makefile +1 -0
index 96469e48ff9d189cc8d0b65e65424eae2158bcfe..cf1cd408d938b3ac26d58b9be7fcc5af3ee82660 100644
@@ -58,3 +58,4 @@ obj-$(CONFIG_USB_DWC3_XILINX)         += dwc3-xilinx.o
 obj-$(CONFIG_USB_DWC3_OCTEON)          += dwc3-octeon.o
 obj-$(CONFIG_USB_DWC3_RTK)             += dwc3-rtk.o
 obj-$(CONFIG_USB_DWC3_GENERIC_PLAT)    += dwc3-generic-plat.o
+obj-$(CONFIG_USB_DWC3_GOOGLE)          += dwc3-google.o
drivers/usb/dwc3/dwc3-google.c new file +15 -0
new file mode 100644
index 0000000000000000000000000000000000000000..53e04a5409d8a11eb025b0f5cd351cb1b33281ab
@@ -0,0 +1,628 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * dwc3-google.c - Google DWC3 Specific Glue Layer
+ *
+ * Copyright (c) 2025, Google LLC
+ * Author: Roy Luo <[email protected]>
+ */
+
+#include <linux/of.h>
+#include <linux/bitfield.h>
+#include <linux/irq.h>
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
Quoted 8 lines

drivers/usb/dwc3/dwc3-google.c line 20

Quoted 5 lines
drivers/usb/dwc3/dwc3-google.c new file +5 -0
+#include <linux/reset.h>
+#include <linux/pm_domain.h>
+#include <linux/iopoll.h>
+#include <linux/regmap.h>
+#include <linux/mfd/syscon.h>

Please sort the headers alphabetically. It helps avoid duplicates and is easier when adding new headers.

As Greg pointed out, no such requirement exists for usb drivers, but if it makes things look nicer, why not?
Will sort the headers alphabetically in the next revision.

Quoted 3 lines

Also can you add this file, and the bindings patch to the Tensor SoC MAINTAINERS entry, so it's easier to review future patches?

Sure! Will update MAITAINERS in the next revision. Appreciate the review!

Thanks,
Roy Luo

Quoted 7 lines

With those nits addressed:

regards,

Peter.

#7 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

In reply to Roy Luo
Quoted 38 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 206

Quoted 7 lines
drivers/usb/dwc3/Kconfig +4 -0
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
 	  the dwc3 child node in the device tree.
 	  Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
+config USB_DWC3_GOOGLE
+	tristate "Google Platform"
+	depends on COMPILE_TEST
+	depends on OF && COMMON_CLK && RESET_CONTROLLER

Shouldn't this be:

	depends on (OF && COMMON_CLK && RESET_CONTROLLER) || COMPILE_TEST

I shouldn't have to enable those options to just get a build test here, the apis should be properly stubbed out if those options are not enabled, right?

thanks,

greg k-h

author
#8 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Quoted 51 lines · Greg Kroah-Hartman
Quoted 38 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 206

Quoted 7 lines
drivers/usb/dwc3/Kconfig +4 -0
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
        the dwc3 child node in the device tree.
        Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
+config USB_DWC3_GOOGLE
+     tristate "Google Platform"
+     depends on COMPILE_TEST
+     depends on OF && COMMON_CLK && RESET_CONTROLLER

Shouldn't this be:

        depends on (OF && COMMON_CLK && RESET_CONTROLLER) || COMPILE_TEST
Quoted 7 lines

I shouldn't have to enable those options to just get a build test here, the apis should be properly stubbed out if those options are not enabled, right?

thanks,

greg k-h

Hi Greg,

I agree with your interpretation of COMPILE_TEST but it doesn't seem to align with upstream convention. I found the following pattern in several device driver Kconfig files (including but not limited to usb, pinctrl and phy).

    depends on COMPILE_TEST || ARCH_XXX
    depends on CONFIG_A && CONFIG_B...

For this patch, the APIs exposed by OF, COMMON_CLK and RESET_CONTROLLER are properly stubbed out so I'm all good to go with your suggestion, but I'd like to make sure this approach is conventional.

I plan to add ARCH_GOOGLE as a dependency in the next version per [1], so the "depends on" would probably look like the following per your suggestion:

    depends on (OF && COMMON_CLK && RESET_CONTROLLER && ARCH_GOOGLE)

|| COMPILE_TEST

Please let me know your thoughts.
[1] https://lore.kernel.org/linux-phy/[email protected]/

Thanks,
Roy Luo

#9 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Quoted 68 lines · Roy Luo
Quoted 51 lines · Greg Kroah-Hartman
Quoted 38 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 206

Quoted 7 lines
drivers/usb/dwc3/Kconfig +4 -0
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
        the dwc3 child node in the device tree.
        Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
+config USB_DWC3_GOOGLE
+     tristate "Google Platform"
+     depends on COMPILE_TEST
+     depends on OF && COMMON_CLK && RESET_CONTROLLER

Shouldn't this be:

        depends on (OF && COMMON_CLK && RESET_CONTROLLER) || COMPILE_TEST
Quoted 7 lines

I shouldn't have to enable those options to just get a build test here, the apis should be properly stubbed out if those options are not enabled, right?

thanks,

greg k-h

Hi Greg,

I agree with your interpretation of COMPILE_TEST but it doesn't seem to align with upstream convention. I found the following pattern in several device driver Kconfig files (including but not limited to usb, pinctrl and phy).

Quoted 7 lines
    depends on COMPILE_TEST || ARCH_XXX
    depends on CONFIG_A && CONFIG_B...

For this patch, the APIs exposed by OF, COMMON_CLK and RESET_CONTROLLER are properly stubbed out so I'm all good to go with your suggestion, but I'd like to make sure this approach is conventional.

Whatever works for building properly, as-is, what you have in this patch didn't work for my systems at all.

Quoted 3 lines

I plan to add ARCH_GOOGLE as a dependency in the next version per [1], so the "depends on" would probably look like the following per your suggestion:

But "Google" is not an arch :(

And really, the whole "only have a sub-arch symbol" is something that personally, I think is totally wrong and prevents kernel images from being built for more than one "arch". As an example, the Android GKI kernel has to support more than one of these, so what does putting this behind a symbol that no one will actually use mean anything? Android will never be only building a ARCH_GOOGLE kernel.

Quoted 5 lines
    depends on (OF && COMMON_CLK && RESET_CONTROLLER && ARCH_GOOGLE)

|| COMPILE_TEST

Please let me know your thoughts.
[1] https://lore.kernel.org/linux-phy/[email protected]/

Again, I hate the ARCH_ stuff, but Krzysztof does seem to like it for some reason, so I'll defer to others here. But note, as someone who helps maintain a "generic" ARM64 kernel, these ARCH_* usages for different platforms do nothing at all to help anyone out.

thanks,

greg k-h

#10 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Quoted 32 lines · Greg Kroah-Hartman
Quoted 17 lines
Quoted 9 lines
        depends on (OF && COMMON_CLK && RESET_CONTROLLER) || COMPILE_TEST

I shouldn't have to enable those options to just get a build test here, the apis should be properly stubbed out if those options are not enabled, right?

thanks,

greg k-h

Hi Greg,

I agree with your interpretation of COMPILE_TEST but it doesn't seem to align with upstream convention. I found the following pattern in several device driver Kconfig files (including but not limited to usb, pinctrl and phy).

Quoted 7 lines
    depends on COMPILE_TEST || ARCH_XXX
    depends on CONFIG_A && CONFIG_B...

For this patch, the APIs exposed by OF, COMMON_CLK and RESET_CONTROLLER are properly stubbed out so I'm all good to go with your suggestion, but I'd like to make sure this approach is conventional.

Whatever works for building properly, as-is, what you have in this patch didn't work for my systems at all.

Quoted 3 lines

I plan to add ARCH_GOOGLE as a dependency in the next version per [1], so the "depends on" would probably look like the following per your suggestion:

Quoted 5 lines

But "Google" is not an arch :(

And really, the whole "only have a sub-arch symbol" is something that personally, I think is totally wrong and prevents kernel images from being built for more than one "arch". As an example, the Android GKI

Probably you think ARCH_FOO as arch/FOO/ directory, but this is not the case. ARCH_FOO in this context is SoC platform, so e.g. arch/arm64/boot/dts/FOO/.

All of ARCH_FOO build into one image and that's recommended way to limit unnecessary drivers.

It's just confusing naming for whatever reason.

Quoted 3 lines

kernel has to support more than one of these, so what does putting this behind a symbol that no one will actually use mean anything? Android will never be only building a ARCH_GOOGLE kernel.

But distros will be, people will be. OK, maybe not for ARCH_GOOGLE, but ARCH_QCOM we do for Qualcomm-based laptops and embedded folks even more.

We had this talk in the past. The point is that these drivers here are unusable outside of that hardware platform, so only when you choose hardware platform (ARCH_EXYNOS, ARCH_GOOGLE, ARCH_QCOM) you will be able to choose these drivers.

You can also look at ARCH_FOO a bit orthogonal to actual kernel architecture, because ARCH_EXYNOS is for both arm (arm32) and arm64. The drivers should be available for all Exynos-platforms, regardless whether this is arm32 or arm64.

Quoted 11 lines
Quoted 6 lines
    depends on (OF && COMMON_CLK && RESET_CONTROLLER && ARCH_GOOGLE)

|| COMPILE_TEST

Please let me know your thoughts.
[1] https://lore.kernel.org/linux-phy/[email protected]/

Again, I hate the ARCH_ stuff, but Krzysztof does seem to like it for some reason, so I'll defer to others here. But note, as someone who helps maintain a "generic" ARM64 kernel, these ARCH_* usages for different platforms do nothing at all to help anyone out.

True and that's not their goal. The truly generic kernels, like you mentioned or arch/arm64/configs/defconfig, build everything for arm64. The entire point is to limit this for actual users wanting much smaller kernels and distros, which do not need these on for example RISC-V.

Best regards,
Krzysztof

#11 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Hi,

Quoted 32 lines · Krzysztof Kozlowski
Quoted 10 lines
Quoted 4 lines

I plan to add ARCH_GOOGLE as a dependency in the next version per [1], so the "depends on" would probably look like the following per your suggestion:

But "Google" is not an arch :(

And really, the whole "only have a sub-arch symbol" is something that personally, I think is totally wrong and prevents kernel images from being built for more than one "arch". As an example, the Android GKI

Probably you think ARCH_FOO as arch/FOO/ directory, but this is not the case. ARCH_FOO in this context is SoC platform, so e.g. arch/arm64/boot/dts/FOO/.

All of ARCH_FOO build into one image and that's recommended way to limit unnecessary drivers.

It's just confusing naming for whatever reason.

Quoted 3 lines

kernel has to support more than one of these, so what does putting this behind a symbol that no one will actually use mean anything? Android will never be only building a ARCH_GOOGLE kernel.

But distros will be, people will be. OK, maybe not for ARCH_GOOGLE, but ARCH_QCOM we do for Qualcomm-based laptops and embedded folks even more.

We had this talk in the past. The point is that these drivers here are unusable outside of that hardware platform, so only when you choose hardware platform (ARCH_EXYNOS, ARCH_GOOGLE, ARCH_QCOM) you will be able to choose these drivers.

Quoted 4 lines

You can also look at ARCH_FOO a bit orthogonal to actual kernel architecture, because ARCH_EXYNOS is for both arm (arm32) and arm64. The drivers should be available for all Exynos-platforms, regardless whether this is arm32 or arm64.

FWIW I don't feel strongly about the ARCH_XYZ Kconfig settings, but I'd tend to agree with Krzysztof that I personally find them useful. Sure, it's fine to just turn all of the ARCH_XYZ values on and they shouldn't conflict with each other, but it provides an easy way for someone to know that certain drivers are only useful if the kernel you're building supports a given arch. If I'm building a kernel that doesn't need to support any Qualcomm boards, for instance, I can just turn that arch off and I don't even need to think about all of the Qualcomm-related config options.

FWIW, if you do add a "depend" on ARCH_GOOGLE you should mention somewhere (maybe "after the cut" in your patch) that ARCH_GOOGLE doesn't exist yet. It should eventually exist when some version of this patch lands:

https://lore.kernel.org/r/20251111112158.3.I35b9e835ac49ab408e5ca3e0983930a1f1395814@changeid/

...but it's not there yet. ;-)

-Doug

author
#12 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

Quoted 56 lines · Doug Anderson

Hi,

Quoted 32 lines · Krzysztof Kozlowski
Quoted 10 lines
Quoted 4 lines

I plan to add ARCH_GOOGLE as a dependency in the next version per [1], so the "depends on" would probably look like the following per your suggestion:

But "Google" is not an arch :(

And really, the whole "only have a sub-arch symbol" is something that personally, I think is totally wrong and prevents kernel images from being built for more than one "arch". As an example, the Android GKI

Probably you think ARCH_FOO as arch/FOO/ directory, but this is not the case. ARCH_FOO in this context is SoC platform, so e.g. arch/arm64/boot/dts/FOO/.

All of ARCH_FOO build into one image and that's recommended way to limit unnecessary drivers.

It's just confusing naming for whatever reason.

Quoted 3 lines

kernel has to support more than one of these, so what does putting this behind a symbol that no one will actually use mean anything? Android will never be only building a ARCH_GOOGLE kernel.

But distros will be, people will be. OK, maybe not for ARCH_GOOGLE, but ARCH_QCOM we do for Qualcomm-based laptops and embedded folks even more.

We had this talk in the past. The point is that these drivers here are unusable outside of that hardware platform, so only when you choose hardware platform (ARCH_EXYNOS, ARCH_GOOGLE, ARCH_QCOM) you will be able to choose these drivers.

Quoted 4 lines

You can also look at ARCH_FOO a bit orthogonal to actual kernel architecture, because ARCH_EXYNOS is for both arm (arm32) and arm64. The drivers should be available for all Exynos-platforms, regardless whether this is arm32 or arm64.

FWIW I don't feel strongly about the ARCH_XYZ Kconfig settings, but I'd tend to agree with Krzysztof that I personally find them useful. Sure, it's fine to just turn all of the ARCH_XYZ values on and they shouldn't conflict with each other, but it provides an easy way for someone to know that certain drivers are only useful if the kernel you're building supports a given arch. If I'm building a kernel that doesn't need to support any Qualcomm boards, for instance, I can just turn that arch off and I don't even need to think about all of the Qualcomm-related config options.

FWIW, if you do add a "depend" on ARCH_GOOGLE you should mention somewhere (maybe "after the cut" in your patch) that ARCH_GOOGLE doesn't exist yet. It should eventually exist when some version of this patch lands:

Quoted 5 lines

https://lore.kernel.org/r/20251111112158.3.I35b9e835ac49ab408e5ca3e0983930a1f1395814@changeid/

...but it's not there yet. ;-)

-Doug

Hi all,

I appreciate the detailed discussion regarding Kconfig dependencies. Based on all the feedback, I'll make the following adjustments:
- I will update the Kconfig dependency to depends on ARCH_GOOGLE || COMPILE_TEST and drop the other dependencies on OF && COMMON_CLK && RESET_CONTROLLER
as suggested by Krzysztof. This should also address the build coverage concern from Greg.
- As Doug pointed out, the ARCH_GOOGLE Kconfig option does not exist... yet. I will add a note about this in the next version.

Thank you all again for helping me improve this patch. I will send out a new version with these changes soon.

Regards,
Roy Luo

#13 lore raw

Re: [PATCH v8 2/2] usb: dwc3: Add Google Tensor SoC DWC3 glue driver

In reply to Roy Luo
Quoted 57 lines · Roy Luo
Quoted 55 lines · Greg Kroah-Hartman
Quoted 38 lines · Roy Luo

Add support for the DWC3 USB controller found on Google Tensor G5 (codename: laguna). The controller features dual-role functionality and hibernation.

The primary focus is implementing hibernation support in host mode, enabling the controller to enter a low-power state (D3). This is particularly relevant during system power state transition and runtime power management for power efficiency. Highlights:
- Align suspend callback with dwc3_suspend_common() for deciding between a full teardown and hibernation in host mode.
- Integration with psw (power switchable) and top power domains, managing their states and device links to support hibernation.
- A notifier callback dwc3_google_usb_psw_pd_notifier() for psw power domain events to manage controller state transitions to/from D3.
- Coordination of the non_sticky reset during power state transitions, asserting it on D3 entry and deasserting on D0 entry in hibernation scenario.
- Handling of high-speed and super-speed PME interrupts that are generated by remote wakeup during hibernation.

---
 drivers/usb/dwc3/Kconfig       |  13 +
 drivers/usb/dwc3/Makefile      |   1 +
 drivers/usb/dwc3/dwc3-google.c | 628 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 642 insertions(+)
drivers/usb/dwc3/Kconfig +0 -0
index 4925d15084f816d3ff92059b476ebcc799b56b51..f58c70dabf108878cbefe0abea88572d9ae81e26 100644

drivers/usb/dwc3/Kconfig config USB_DWC3_GENERIC_PLAT · line 206

Quoted 7 lines
drivers/usb/dwc3/Kconfig +4 -0
@@ -200,4 +200,17 @@ config USB_DWC3_GENERIC_PLAT
        the dwc3 child node in the device tree.
        Say 'Y' or 'M' here if your platform integrates DWC3 in a similar way.
 
+config USB_DWC3_GOOGLE
+     tristate "Google Platform"
+     depends on COMPILE_TEST
+     depends on OF && COMMON_CLK && RESET_CONTROLLER

Shouldn't this be:

        depends on (OF && COMMON_CLK && RESET_CONTROLLER) || COMPILE_TEST

I shouldn't have to enable those options to just get a build test here, the apis should be properly stubbed out if those options are not enabled, right?

Quoted 8 lines
Quoted 3 lines

thanks,

greg k-h

Hi Greg,

I agree with your interpretation of COMPILE_TEST but it doesn't seem to align with upstream convention. I found the following pattern

The problem is not in Greg's solution but your code:
depends on COMPILE_TEST

which makes absolutely no sense because it means this cannot be used anywhere (in reasonable terms).

Quoted 11 lines

in several device driver Kconfig files (including but not limited to usb, pinctrl and phy).

    depends on COMPILE_TEST || ARCH_XXX
    depends on CONFIG_A && CONFIG_B...

For this patch, the APIs exposed by OF, COMMON_CLK and RESET_CONTROLLER are properly stubbed out so I'm all good to go with your suggestion, but I'd like to make sure this approach is conventional.

Quoted 7 lines

I plan to add ARCH_GOOGLE as a dependency in the next version per [1], so the "depends on" would probably look like the following per your suggestion:

    depends on (OF && COMMON_CLK && RESET_CONTROLLER && ARCH_GOOGLE)

|| COMPILE_TEST

No, instead depends ARCH_foo || COMPILE_TEST

and drop all other dependencies. You don't need them.

Best regards,
Krzysztof

#14 lore raw
In reply to Roy Luo
Quoted 16 lines · Roy Luo

This series introduces USB controller support for the Google Tensor G5 SoC (codename: Laguna), a new generation of Google silicon first launched with Pixel 10 devices.

The Tensor G5 represents a significant architectural overhaul compared to previous Tensor generations (e.g., gs101), which were based on Samsung Exynos IP. Although the G5 still utilizes Synopsys IP for the USB components, the custom top-level integration introduces a completely new design for clock, reset scheme, register interfaces and programming sequence, necessitating new drivers and device tree bindings.

The USB subsystem on Tensor G5 integrates a Synopsys DWC3 USB 3.1 DRD-Single Port controller with hibernation support, and a custom PHY block comprising Synopsys eUSB2 and USB 3.2/DP combo PHYs. The PHY support is sent as a separate patch series.

Quoted 8 lines

---
Changes in v8:
- Add COMPILE_TEST to dependencies for build coverage.

Nope, that didn't work :(