* [PATCH V3 1/3] dt-bindings: usb: Add Tegra264 XUSB host support
2026-09-03 7:45 [PATCH V3 0/3] usb: host: xhci-tegra: Add Tegra264 XHCI support Wayne Chang
@ 2026-09-03 7:45 ` Wayne Chang
2026-09-03 17:33 ` Conor Dooley
2026-09-03 7:45 ` [PATCH V3 2/3] usb: host: xhci-tegra: Skip MBOX MSG_ENABLED on Tegra264 Wayne Chang
2026-09-03 7:45 ` [PATCH V3 3/3] usb: host: xhci-tegra: Add Tegra264 XHCI support Wayne Chang
2 siblings, 1 reply; 5+ messages in thread
From: Wayne Chang @ 2026-09-03 7:45 UTC (permalink / raw)
To: Greg Kroah-Hartman, Mathias Nyman, Thierry Reding,
Jonathan Hunter, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, devicetree, linux-tegra, linux-kernel, Wayne Chang
Extend the Tegra234 XUSB host binding to cover Tegra264:
- Add nvidia,tegra264-xusb compatible string
- Document optional USB wake interrupts for Tegra264
- Document Tegra264 PMC wake event to port mapping
- List the up to five IOMMU specifiers for the additional XUSB host
stream IDs, since their order is now significant
- Constrain interrupts and iommus counts for both Tegra234 and
Tegra264 via allOf conditionals, since each SoC wires up a fixed
number of wake interrupts and stream IDs
Signed-off-by: Wayne Chang <waynec@nvidia.com>
---
V2 -> V3: List the iommus entries instead of just bounding minItems/
maxItems, and clarify that entries 1-4 correspond to XHCI virtual
functions 1-4. Add an allOf conditional that also constrains Tegra264
to interrupts maxItems 10 and iommus minItems 5, instead of leaving
Tegra264 with the same flexible top-level bounds as Tegra234.
V1 -> V2: Property definitions are back at the top level with the widest
constraints, The allOf conditional only tightens Tegra234 to interrupts
maxItems 9 and iommus maxItems 1.
.../bindings/usb/nvidia,tegra234-xusb.yaml | 52 +++++++++++++++++++++---
1 file changed, 47 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/usb/nvidia,tegra234-xusb.yaml b/Documentation/devicetree/bindings/usb/nvidia,tegra234-xusb.yaml
index ec0993497fbb..71e01701ae2c 100644
--- a/Documentation/devicetree/bindings/usb/nvidia,tegra234-xusb.yaml
+++ b/Documentation/devicetree/bindings/usb/nvidia,tegra234-xusb.yaml
@@ -17,7 +17,9 @@ description: |
properties:
compatible:
- const: nvidia,tegra234-xusb
+ enum:
+ - nvidia,tegra234-xusb
+ - nvidia,tegra264-xusb
reg:
items:
@@ -43,6 +45,7 @@ properties:
- description: USB wake event 4
- description: USB wake event 5
- description: USB wake event 6
+ - description: USB wake event 7
description: |
The first two interrupts are required for the USB host controller. The
remaining USB wake event interrupts are optional. Each USB wake event is
@@ -50,10 +53,9 @@ properties:
platform. The USB host controller can function even if no wake-up events
are defined. The USB wake event interrupts are handled by the Tegra PMC;
hence, the interrupt controller for these is the PMC and the interrupt
- IDs correspond to the PMC wake event IDs. A complete list of wake event
- IDs is provided below, and this information is also present in the Tegra
- TRM document.
+ IDs correspond to the PMC wake event IDs.
+ Tegra234 PMC wake events:
PMC wake-up 76 for USB3 port 0 wakeup
PMC wake-up 77 for USB3 port 1 wakeup
PMC wake-up 78 for USB3 port 2 and port 3 wakeup
@@ -62,6 +64,16 @@ properties:
PMC wake-up 81 for USB2 port 2 wakeup
PMC wake-up 82 for USB2 port 3 wakeup
+ Tegra264 PMC wake events:
+ PMC wake-up 79 for USB3 port 0 wakeup
+ PMC wake-up 80 for USB3 port 1 wakeup
+ PMC wake-up 81 for USB3 port 2 wakeup
+ PMC wake-up 82 for USB3 port 3 wakeup
+ PMC wake-up 83 for USB2 port 0 wakeup
+ PMC wake-up 84 for USB2 port 1 wakeup
+ PMC wake-up 85 for USB2 port 2 wakeup
+ PMC wake-up 86 for USB2 port 3 wakeup
+
clocks:
items:
- description: XUSB host clock
@@ -97,7 +109,13 @@ properties:
- const: write
iommus:
- maxItems: 1
+ minItems: 1
+ items:
+ - description: XUSB host stream ID
+ - description: XUSB host stream ID for virtual function 1
+ - description: XUSB host stream ID for virtual function 2
+ - description: XUSB host stream ID for virtual function 3
+ - description: XUSB host stream ID for virtual function 4
nvidia,xusb-padctl:
$ref: /schemas/types.yaml#/definitions/phandle
@@ -137,6 +155,30 @@ properties:
allOf:
- $ref: usb-xhci.yaml
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: nvidia,tegra234-xusb
+ then:
+ properties:
+ interrupts:
+ maxItems: 9
+ iommus:
+ maxItems: 1
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: nvidia,tegra264-xusb
+ then:
+ properties:
+ interrupts:
+ maxItems: 10
+ iommus:
+ minItems: 5
+
unevaluatedProperties: false
examples:
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH V3 1/3] dt-bindings: usb: Add Tegra264 XUSB host support
2026-09-03 7:45 ` [PATCH V3 1/3] dt-bindings: usb: Add Tegra264 XUSB host support Wayne Chang
@ 2026-09-03 17:33 ` Conor Dooley
0 siblings, 0 replies; 5+ messages in thread
From: Conor Dooley @ 2026-09-03 17:33 UTC (permalink / raw)
To: Wayne Chang
Cc: Greg Kroah-Hartman, Mathias Nyman, Thierry Reding,
Jonathan Hunter, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
linux-usb, devicetree, linux-tegra, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 75 bytes --]
Acked-by: Conor Dooley <conor.dooley@microchip.com>
pw-bot: not-applicable
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH V3 2/3] usb: host: xhci-tegra: Skip MBOX MSG_ENABLED on Tegra264
2026-09-03 7:45 [PATCH V3 0/3] usb: host: xhci-tegra: Add Tegra264 XHCI support Wayne Chang
2026-09-03 7:45 ` [PATCH V3 1/3] dt-bindings: usb: Add Tegra264 XUSB host support Wayne Chang
@ 2026-09-03 7:45 ` Wayne Chang
2026-09-03 7:45 ` [PATCH V3 3/3] usb: host: xhci-tegra: Add Tegra264 XHCI support Wayne Chang
2 siblings, 0 replies; 5+ messages in thread
From: Wayne Chang @ 2026-09-03 7:45 UTC (permalink / raw)
To: Greg Kroah-Hartman, Mathias Nyman, Thierry Reding,
Jonathan Hunter, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, devicetree, linux-tegra, linux-kernel, Wayne Chang
Tegra264 XUSB does not use the firmware mailbox handshake to enable
controller messages (MBOX_CMD_MSG_ENABLED). Add a per-SoC flag and
short-circuit __tegra_xusb_enable_firmware_messages() so both probe
and resume avoid sending the command.
Signed-off-by: Wayne Chang <waynec@nvidia.com>
---
V2 -> V3: No change
V1 -> V2: No change
drivers/usb/host/xhci-tegra.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
index e7e6d569f1db..7d56f35ec9e7 100644
--- a/drivers/usb/host/xhci-tegra.c
+++ b/drivers/usb/host/xhci-tegra.c
@@ -250,6 +250,7 @@ struct tegra_xusb_soc {
bool otg_set_port_power;
bool has_bar2;
+ bool enable_firmware_messages;
};
struct tegra_xusb_context {
@@ -1260,6 +1261,9 @@ static int __tegra_xusb_enable_firmware_messages(struct tegra_xusb *tegra)
struct tegra_xusb_mbox_msg msg;
int err;
+ if (!tegra->soc->enable_firmware_messages)
+ return 0;
+
/* Enable firmware messages from controller. */
msg.cmd = MBOX_CMD_MSG_ENABLED;
msg.data = 0;
@@ -2580,6 +2584,7 @@ static const struct tegra_xusb_soc tegra124_soc = {
.owner = 0xf0,
.smi_intr = XUSB_CFG_ARU_SMI_INTR,
},
+ .enable_firmware_messages = true,
};
#if IS_ENABLED(CONFIG_ARCH_TEGRA_124_SOC) || IS_ENABLED(CONFIG_ARCH_TEGRA_132_SOC)
MODULE_FIRMWARE("nvidia/tegra124/xusb.bin");
@@ -2621,6 +2626,7 @@ static const struct tegra_xusb_soc tegra210_soc = {
.owner = 0xf0,
.smi_intr = XUSB_CFG_ARU_SMI_INTR,
},
+ .enable_firmware_messages = true,
};
#if IS_ENABLED(CONFIG_ARCH_TEGRA_210_SOC)
MODULE_FIRMWARE("nvidia/tegra210/xusb.bin");
@@ -2670,6 +2676,7 @@ static const struct tegra_xusb_soc tegra186_soc = {
.smi_intr = XUSB_CFG_ARU_SMI_INTR,
},
.lpm_support = true,
+ .enable_firmware_messages = true,
};
static const char * const tegra194_supply_names[] = {
@@ -2704,6 +2711,7 @@ static const struct tegra_xusb_soc tegra194_soc = {
.smi_intr = XUSB_CFG_ARU_SMI_INTR,
},
.lpm_support = true,
+ .enable_firmware_messages = true,
};
#if IS_ENABLED(CONFIG_ARCH_TEGRA_194_SOC)
MODULE_FIRMWARE("nvidia/tegra194/xusb.bin");
@@ -2741,6 +2749,7 @@ static const struct tegra_xusb_soc tegra234_soc = {
},
.lpm_support = true,
.has_bar2 = true,
+ .enable_firmware_messages = true,
};
static const struct of_device_id tegra_xusb_of_match[] = {
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH V3 3/3] usb: host: xhci-tegra: Add Tegra264 XHCI support
2026-09-03 7:45 [PATCH V3 0/3] usb: host: xhci-tegra: Add Tegra264 XHCI support Wayne Chang
2026-09-03 7:45 ` [PATCH V3 1/3] dt-bindings: usb: Add Tegra264 XUSB host support Wayne Chang
2026-09-03 7:45 ` [PATCH V3 2/3] usb: host: xhci-tegra: Skip MBOX MSG_ENABLED on Tegra264 Wayne Chang
@ 2026-09-03 7:45 ` Wayne Chang
2 siblings, 0 replies; 5+ messages in thread
From: Wayne Chang @ 2026-09-03 7:45 UTC (permalink / raw)
To: Greg Kroah-Hartman, Mathias Nyman, Thierry Reding,
Jonathan Hunter, Rob Herring, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, devicetree, linux-tegra, linux-kernel, Wayne Chang
This change adds Tegra264 XUSB host mode controller support.
The host controller is very similar to the existing Tegra234 XHCI,
except the number of max_num_wakes.
Signed-off-by: Wayne Chang <waynec@nvidia.com>
---
V2 -> V3: No change
V1 -> V2: No change
drivers/usb/host/xhci-tegra.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
index 7d56f35ec9e7..9a55d5818efb 100644
--- a/drivers/usb/host/xhci-tegra.c
+++ b/drivers/usb/host/xhci-tegra.c
@@ -2752,12 +2752,40 @@ static const struct tegra_xusb_soc tegra234_soc = {
.enable_firmware_messages = true,
};
+static const struct tegra_xusb_soc tegra264_soc = {
+ .supply_names = tegra194_supply_names,
+ .num_supplies = ARRAY_SIZE(tegra194_supply_names),
+ .phy_types = tegra194_phy_types,
+ .num_types = ARRAY_SIZE(tegra194_phy_types),
+ .max_num_wakes = 8,
+ .context = &tegra186_xusb_context,
+ .ports = {
+ .usb3 = { .offset = 0, .count = 4, },
+ .usb2 = { .offset = 4, .count = 4, },
+ },
+ .scale_ss_clock = false,
+ .has_ipfs = false,
+ .otg_reset_sspi = false,
+ .ops = &tegra234_ops,
+ .mbox = {
+ .cmd = XUSB_BAR2_ARU_MBOX_CMD,
+ .data_in = XUSB_BAR2_ARU_MBOX_DATA_IN,
+ .data_out = XUSB_BAR2_ARU_MBOX_DATA_OUT,
+ .owner = XUSB_BAR2_ARU_MBOX_OWNER,
+ .smi_intr = XUSB_BAR2_ARU_SMI_INTR,
+ },
+ .lpm_support = true,
+ .has_bar2 = true,
+ .enable_firmware_messages = false,
+};
+
static const struct of_device_id tegra_xusb_of_match[] = {
{ .compatible = "nvidia,tegra124-xusb", .data = &tegra124_soc },
{ .compatible = "nvidia,tegra210-xusb", .data = &tegra210_soc },
{ .compatible = "nvidia,tegra186-xusb", .data = &tegra186_soc },
{ .compatible = "nvidia,tegra194-xusb", .data = &tegra194_soc },
{ .compatible = "nvidia,tegra234-xusb", .data = &tegra234_soc },
+ { .compatible = "nvidia,tegra264-xusb", .data = &tegra264_soc },
{ },
};
MODULE_DEVICE_TABLE(of, tegra_xusb_of_match);
--
2.25.1
^ permalink raw reply related [flat|nested] 5+ messages in thread