Re: [PATCH v3 04/13] arm64: tegra: Enable XUSB host and device on Jetson AGX Orin

Jon Hunter
2022-11-15T12:17:21Z

On 14/11/2022 12:40, Wayne Chang wrote:
> This commit enables XUSB host, device, and pad controller on
> Jetson AGX Orin.
>
> Signed-off-by: Wayne Chang <waynec@nvidia.com>
> ---
> depends on the following change
> https://lore.kernel.org/all/20221003125141.123759-1-jonathanh@nvidia.com/
> V2 -> V3:nothing has changed but added the dependency here
> V1 -> V2:removed the redundant cells and status in ucsi-ccg.
> Using dash instead of underscore in the ucsi-ccg node name.
> Using representive name in cypress,firmware-build property.
> .../boot/dts/nvidia/tegra234-p3701-0000.dtsi | 48 +++++
> .../nvidia/tegra234-p3737-0000+p3701-0000.dts | 175 ++++++++++++++++++
> arch/arm64/boot/dts/nvidia/tegra234.dtsi | 170 +++++++++++++++++
> 3 files changed, 393 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/nvidia/tegra234-p3701-0000.dtsi b/arch/arm64/boot/dts/nvidia/tegra234-p3701-0000.dtsi
> index 9e4d72cfa69f..8acef87a5398 100644
> --- a/arch/arm64/boot/dts/nvidia/tegra234-p3701-0000.dtsi
> +++ b/arch/arm64/boot/dts/nvidia/tegra234-p3701-0000.dtsi
> @@ -61,6 +61,29 @@ mmc@3460000 {
> non-removable;
> };
>
> + padctl@3520000 {
> + vclamp-usb-supply = <&vdd_ao_1v8>;
> + avdd-usb-supply = <&vdd_ao_3v3>;
> +
> + ports {
> + usb2-0 {
> + vbus-supply = <&vdd_5v0_sys>;
> + };
> +
> + usb2-1 {
> + vbus-supply = <&vdd_5v0_sys>;
> + };
> +
> + usb2-2 {
> + vbus-supply = <&vdd_5v0_sys>;
> + };
> +
> + usb2-3 {
> + vbus-supply = <&vdd_5v0_sys>;
> + };
> + };
> + };
> +
> rtc@c2a0000 {
> status = "okay";
> };
> @@ -69,4 +92,29 @@ pmc@c360000 {
> nvidia,invert-interrupt;
> };
> };
> +
> + vdd_5v0_sys: regulator@0 {
> + compatible = "regulator-fixed";
> + regulator-name = "VIN_SYS_5V0";
> + regulator-min-microvolt = <5000000>;
> + regulator-max-microvolt = <5000000>;
> + regulator-always-on;
> + regulator-boot-on;
> + };
> +
> + vdd_ao_1v8: regulator@1 {
> + compatible = "regulator-fixed";
> + regulator-name = "vdd-AO-1v8";
> + regulator-min-microvolt = <1800000>;
> + regulator-max-microvolt = <1800000>;
> + regulator-always-on;
> + };
> +
> + vdd_ao_3v3: regulator@2 {
> + compatible = "regulator-fixed";
> + regulator-name = "vdd-AO-3v3";
> + regulator-min-microvolt = <3300000>;
> + regulator-max-microvolt = <3300000>;
> + regulator-always-on;
> + };
> };
> diff --git a/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts b/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts
> index 57ab75328814..58baedbd0f93 100644
> --- a/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts
> +++ b/arch/arm64/boot/dts/nvidia/tegra234-p3737-0000+p3701-0000.dts
> @@ -2011,6 +2011,181 @@ hda@3510000 {
> nvidia,model = "NVIDIA Jetson AGX Orin HDA";
> status = "okay";
> };
> +
> + padctl@3520000 {
> + status = "okay";
> +
> + pads {
> + usb2 {
> + lanes {
> + usb2-0 {
> + status = "okay";
> + };
> +
> + usb2-1 {
> + status = "okay";
> + };
> +
> + usb2-2 {
> + status = "okay";
> + };
> +
> + usb2-3 {
> + status = "okay";
> + };
> + };
> + };
> +
> + usb3 {
> + lanes {
> + usb3-0 {
> + status = "okay";
> + };
> +
> + usb3-1 {
> + status = "okay";
> + };
> +
> + usb3-2 {
> + status = "okay";
> + };
> + };
> + };
> + };
> +
> + ports {
> + usb2-0 {
> + mode = "otg";
> + usb-role-switch;
> + status = "okay";
> + port {
> + hs_typec_p1: endpoint {
> + remote-endpoint = <&hs_ucsi_ccg_p1>;
> + };
> + };
> + };
> +
> + usb2-1 {
> + mode = "host";
> + status = "okay";
> + port {
> + hs_typec_p0: endpoint {
> + remote-endpoint = <&hs_ucsi_ccg_p0>;
> + };
> + };
> + };
> +
> + usb2-2 {
> + mode = "host";
> + status = "okay";
> + };
> +
> + usb2-3 {
> + mode = "host";
> + status = "okay";
> + };
> +
> + usb3-0 {
> + nvidia,usb2-companion = <1>;
> + status = "okay";
> + port {
> + ss_typec_p0: endpoint {
> + remote-endpoint = <&ss_ucsi_ccg_p0>;
> + };
> + };
> + };
> +
> + usb3-1 {
> + nvidia,usb2-companion = <0>;
> + status = "okay";
> + port {
> + ss_typec_p1: endpoint {
> + remote-endpoint = <&ss_ucsi_ccg_p1>;
> + };
> + };
> + };
> +
> + usb3-2 {
> + nvidia,usb2-companion = <3>;
> + status = "okay";
> + };
> + };
> + };
> +
> + usb@3550000 {
> + status = "okay";
> +
> + phys = <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-0}>,
> + <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-1}>;
> + phy-names = "usb2-0", "usb3-1";
> + };
> +
> + usb@3610000 {
> + status = "okay";
> +
> + phys = <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-0}>,
> + <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-1}>,
> + <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-2}>,
> + <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-3}>,
> + <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-0}>,
> + <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-1}>,
> + <&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-2}>;
> + phy-names = "usb2-0", "usb2-1", "usb2-2", "usb2-3",
> + "usb3-0", "usb3-1", "usb3-2";
> + };
> +
> + i2c@c240000 {
> + status = "okay";
> + ucsi-ccg@8 {
> + compatible = "cypress,cypd4226";
> + cypress,firmware-build = "nvidia,jetson-agx-xavier";
> + interrupt-parent = <&gpio>;
> + interrupts = <TEGRA234_MAIN_GPIO(Y, 4) IRQ_TYPE_LEVEL_LOW>;
> + reg = <0x08>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> + ccg_typec_con0: connector@0 {
> + compatible = "usb-c-connector";
> + reg = <0>;
> + label = "USB-C";
> + data-role = "host";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + port@0 {
> + reg = <0>;
> + hs_ucsi_ccg_p0: endpoint {
> + remote-endpoint = <&hs_typec_p0>;
> + };
> + };
> + port@1 {
> + reg = <1>;
> + ss_ucsi_ccg_p0: endpoint {
> + remote-endpoint = <&ss_typec_p0>;
> + };
> + };
> + };
> + ccg_typec_con1: connector@1 {
> + compatible = "usb-c-connector";
> + reg = <1>;
> + label = "USB-C";
> + data-role = "dual";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + port@0 {
> + reg = <0>;
> + hs_ucsi_ccg_p1: endpoint {
> + remote-endpoint = <&hs_typec_p1>;
> + };
> + };
> + port@1 {
> + reg = <1>;
> + ss_ucsi_ccg_p1: endpoint {
> + remote-endpoint = <&ss_typec_p1>;
> + };
> + };
> + };
> + };
> + };
> };
>
> chosen {
> diff --git a/arch/arm64/boot/dts/nvidia/tegra234.dtsi b/arch/arm64/boot/dts/nvidia/tegra234.dtsi
> index 0170bfa8a467..27635d459e4c 100644
> --- a/arch/arm64/boot/dts/nvidia/tegra234.dtsi
> +++ b/arch/arm64/boot/dts/nvidia/tegra234.dtsi
> @@ -942,6 +942,174 @@ hda@3510000 {
> status = "disabled";
> };
>
> + xusb_padctl: padctl@3520000 {
> + compatible = "nvidia,tegra234-xusb-padctl";
> + reg = <0x03520000 0x20000>,
> + <0x03540000 0x10000>;
> + reg-names = "padctl", "ao";
> + interrupts = <GIC_SPI 167 IRQ_TYPE_LEVEL_HIGH>;
> +
> + resets = <&bpmp TEGRA234_RESET_XUSB_PADCTL>;
> + reset-names = "padctl";
> +
> + status = "disabled";
> +
> + pads {
> + usb2 {
> + clocks = <&bpmp TEGRA234_CLK_USB2_TRK>;
> + clock-names = "trk";
> +
> + lanes {
> + usb2-0 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> +
> + usb2-1 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> +
> + usb2-2 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> +
> + usb2-3 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> + };
> + };
> +
> + usb3 {
> + lanes {
> + usb3-0 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> +
> + usb3-1 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> +
> + usb3-2 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> +
> + usb3-3 {
> + nvidia,function = "xusb";
> + status = "disabled";
> + #phy-cells = <0>;
> + };
> + };
> + };
> + };
> +
> + ports {
> + usb2-0 {
> + status = "disabled";
> + };
> +
> + usb2-1 {
> + status = "disabled";
> + };
> +
> + usb2-2 {
> + status = "disabled";
> + };
> +
> + usb2-3 {
> + status = "disabled";
> + };
> +
> + usb3-0 {
> + status = "disabled";
> + };
> +
> + usb3-1 {
> + status = "disabled";
> + };
> +
> + usb3-2 {
> + status = "disabled";
> + };
> +
> + usb3-3 {
> + status = "disabled";
> + };
> + };
> + };
> +
> + usb@3550000 {
> + compatible = "nvidia,tegra234-xudc";
> + reg = <0x03550000 0x8000>,
> + <0x03558000 0x8000>;
> + reg-names = "base", "fpci";
> + interrupts = <GIC_SPI 166 IRQ_TYPE_LEVEL_HIGH>;
> + clocks = <&bpmp TEGRA234_CLK_XUSB_CORE_DEV>,
> + <&bpmp TEGRA234_CLK_XUSB_CORE_SS>,
> + <&bpmp TEGRA234_CLK_XUSB_SS>,
> + <&bpmp TEGRA234_CLK_XUSB_FS>;
> + clock-names = "dev", "ss", "ss_src", "fs_src";
> + interconnects = <&mc TEGRA234_MEMORY_CLIENT_XUSB_DEVR &emc>,
> + <&mc TEGRA234_MEMORY_CLIENT_XUSB_DEVW &emc>;
> + interconnect-names = "dma-mem", "write";
> + iommus = <&smmu_niso1 TEGRA234_SID_XUSB_DEV>;
> + power-domains = <&bpmp TEGRA234_POWER_DOMAIN_XUSBB>,
> + <&bpmp TEGRA234_POWER_DOMAIN_XUSBA>;
> + power-domain-names = "dev", "ss";
> + nvidia,xusb-padctl = <&xusb_padctl>;
> + dma-coherent;
> + status = "disabled";
> + };
> +
> + usb@3610000 {
> + compatible = "nvidia,tegra234-xusb";
> + reg = <0x03610000 0x40000>,
> + <0x03600000 0x10000>,
> + <0x03650000 0x10000>;
> + reg-names = "hcd", "fpci", "bar2";
> +
> + interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>,
> + <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>;
> +
> + clocks = <&bpmp TEGRA234_CLK_XUSB_CORE_HOST>,
> + <&bpmp TEGRA234_CLK_XUSB_FALCON>,
> + <&bpmp TEGRA234_CLK_XUSB_CORE_SS>,
> + <&bpmp TEGRA234_CLK_XUSB_SS>,
> + <&bpmp TEGRA234_CLK_CLK_M>,
> + <&bpmp TEGRA234_CLK_XUSB_FS>,
> + <&bpmp TEGRA234_CLK_UTMIP_PLL>,
> + <&bpmp TEGRA234_CLK_CLK_M>,
> + <&bpmp TEGRA234_CLK_PLLE>;
> + clock-names = "xusb_host", "xusb_falcon_src",
> + "xusb_ss", "xusb_ss_src", "xusb_hs_src",
> + "xusb_fs_src", "pll_u_480m", "clk_m",
> + "pll_e";
> + interconnects = <&mc TEGRA234_MEMORY_CLIENT_XUSB_HOSTR &emc>,
> + <&mc TEGRA234_MEMORY_CLIENT_XUSB_HOSTW &emc>;
> + interconnect-names = "dma-mem", "write";
> + iommus = <&smmu_niso1 TEGRA234_SID_XUSB_HOST>;
> +
> + power-domains = <&bpmp TEGRA234_POWER_DOMAIN_XUSBC>,
> + <&bpmp TEGRA234_POWER_DOMAIN_XUSBA>;
> + power-domain-names = "xusb_host", "xusb_ss";
> +
> + nvidia,xusb-padctl = <&xusb_padctl>;
> + dma-coherent;
> + status = "disabled";
> + };
> +
> fuse@3810000 {
> compatible = "nvidia,tegra234-efuse";
> reg = <0x03810000 0x10000>;
> @@ -1470,6 +1638,8 @@ gen2_i2c: i2c@c240000 {
> compatible = "nvidia,tegra194-i2c";
> reg = <0xc240000 0x100>;
> interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>;
> + #address-cells = <1>;
> + #size-cells = <0>;
> status = "disabled";
> clock-frequency = <100000>;
> clocks = <&bpmp TEGRA234_CLK_I2C2

Reviewed-by: Jon Hunter <jonathanh@nvidia.com>

Thanks
Jon

--
nvpublic