Commit 574d9cff authored by Thierry Reding's avatar Thierry Reding
Browse files

arm64: tegra: Enable XUSB on Norrin



Use the XUSB controller instead of the legacy EHCI controller to enable
USB 3.0 support.

Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 67bb17f6
Loading
Loading
Loading
Loading
+112 −28
Original line number Diff line number Diff line
@@ -671,7 +671,7 @@
					regulator-boot-on;
				};

				ldo0 {
				avdd_1v05_run: ldo0 {
					regulator-name = "+1.05_RUN_AVDD";
					regulator-min-microvolt = <1050000>;
					regulator-max-microvolt = <1050000>;
@@ -893,55 +893,123 @@
		nvidia,reset-gpio = <&gpio TEGRA_GPIO(I, 5) GPIO_ACTIVE_LOW>;
	};

	/* WIFI/BT module */
	mmc@700b0000 {
		status = "disabled";
	usb@70090000 {
		phys = <&{/padctl@7009f000/pads/usb2/lanes/usb2-0}>, /* 1st USB A */
		       <&{/padctl@7009f000/pads/usb2/lanes/usb2-1}>, /* Internal USB */
		       <&{/padctl@7009f000/pads/usb2/lanes/usb2-2}>, /* 2nd USB A */
		       <&{/padctl@7009f000/pads/pcie/lanes/pcie-0}>, /* 1st USB A */
		       <&{/padctl@7009f000/pads/pcie/lanes/pcie-1}>; /* 2nd USB A */
		phy-names = "usb2-0", "usb2-1", "usb2-2", "usb3-0", "usb3-1";

		avddio-pex-supply = <&vdd_1v05_run>;
		dvddio-pex-supply = <&vdd_1v05_run>;
		avdd-usb-supply = <&vdd_3v3_lp0>;
		hvdd-usb-ss-supply = <&vdd_3v3_lp0>;

		status = "okay";
	};

	/* external SD/MMC */
	mmc@700b0400 {
		cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
		power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
		wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_HIGH>;
	padctl@7009f000 {
		avdd-pll-utmip-supply = <&vddio_1v8>;
		avdd-pll-erefe-supply = <&avdd_1v05_run>;
		avdd-pex-pll-supply = <&vdd_1v05_run>;
		hvdd-pex-pll-e-supply = <&vdd_3v3_lp0>;

		pads {
			usb2 {
				status = "okay";

				lanes {
					usb2-0 {
						nvidia,function = "xusb";
						status = "okay";
		bus-width = <4>;
		vqmmc-supply = <&vddio_sdmmc3>;
					};

	/* EMMC 4.51 */
	mmc@700b0600 {
					usb2-1 {
						nvidia,function = "xusb";
						status = "okay";
		bus-width = <8>;
		non-removable;
					};

	usb@7d000000 {
					usb2-2 {
						nvidia,function = "xusb";
						status = "okay";
					};
				};
			};

	usb-phy@7d000000 {
			pcie {
				status = "okay";

				lanes {
					pcie-0 {
						nvidia,function = "usb3-ss";
						status = "okay";
		vbus-supply = <&vdd_usb1_vbus>;
					};

	usb@7d004000 {
					pcie-1 {
						nvidia,function = "usb3-ss";
						status = "okay";
					};
				};
			};
		};

	usb-phy@7d004000 {
		ports {
			usb2-0 {
				status = "okay";
		vbus-supply = <&vdd_run_cam>;
				mode = "otg";

				vbus-supply = <&vdd_usb1_vbus>;
			};

	usb@7d008000 {
			usb2-1 {
				status = "okay";
				mode = "host";

				vbus-supply = <&vdd_run_cam>;
			};

	usb-phy@7d008000 {
			usb2-2 {
				status = "okay";
				mode = "host";

				vbus-supply = <&vdd_usb3_vbus>;
			};

			usb3-0 {
				nvidia,usb2-companion = <0>;
				status = "okay";
			};

			usb3-1 {
				nvidia,usb2-companion = <2>;
				status = "okay";
			};
		};
	};

	/* WIFI/BT module */
	mmc@700b0000 {
		status = "disabled";
	};

	/* external SD/MMC */
	mmc@700b0400 {
		cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>;
		power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>;
		wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_HIGH>;
		status = "okay";
		bus-width = <4>;
		vqmmc-supply = <&vddio_sdmmc3>;
	};

	/* EMMC 4.51 */
	mmc@700b0600 {
		status = "okay";
		bus-width = <8>;
		non-removable;
	};

	backlight: backlight {
		compatible = "pwm-backlight";

@@ -1132,5 +1200,21 @@
			gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>;
			enable-active-high;
		};

		vdd_3v3_lp0: regulator@12 {
			compatible = "regulator-fixed";
			reg = <12>;
			regulator-name = "+3.3V_LP0";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			/*
			 * TODO: find a way to wire this up with the USB EHCI
			 * controllers so that it can be enabled on demand.
			 */
			regulator-always-on;
			gpio = <&as3722 2 GPIO_ACTIVE_HIGH>;
			enable-active-high;
			vin-supply = <&vdd_3v3_sys>;
		};
	};
};
+134 −14
Original line number Diff line number Diff line
@@ -50,9 +50,6 @@
		reset-names = "pex", "afi", "pcie_x";
		status = "disabled";

		phys = <&padctl TEGRA_XUSB_PADCTL_PCIE>;
		phy-names = "pcie";

		pci@1,0 {
			device_type = "pci";
			assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>;
@@ -630,8 +627,6 @@
			 <&tegra_car 123>,
			 <&tegra_car 129>;
		reset-names = "sata", "sata-oob", "sata-cold";
		phys = <&padctl TEGRA_XUSB_PADCTL_SATA>;
		phy-names = "sata-phy";
		status = "disabled";
	};

@@ -651,6 +646,41 @@
		status = "disabled";
	};

	usb@70090000 {
		compatible = "nvidia,tegra132-xusb", "nvidia,tegra124-xusb";
		reg = <0x0 0x70090000 0x0 0x8000>,
		      <0x0 0x70098000 0x0 0x1000>,
		      <0x0 0x70099000 0x0 0x1000>;
		reg-names = "hcd", "fpci", "ipfs";

		interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
			     <GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;

		clocks = <&tegra_car TEGRA124_CLK_XUSB_HOST>,
			 <&tegra_car TEGRA124_CLK_XUSB_HOST_SRC>,
			 <&tegra_car TEGRA124_CLK_XUSB_FALCON_SRC>,
			 <&tegra_car TEGRA124_CLK_XUSB_SS>,
			 <&tegra_car TEGRA124_CLK_XUSB_SS_SRC>,
			 <&tegra_car TEGRA124_CLK_XUSB_SS_DIV2>,
			 <&tegra_car TEGRA124_CLK_XUSB_HS_SRC>,
			 <&tegra_car TEGRA124_CLK_XUSB_FS_SRC>,
			 <&tegra_car TEGRA124_CLK_PLL_U_480M>,
			 <&tegra_car TEGRA124_CLK_CLK_M>,
			 <&tegra_car TEGRA124_CLK_PLL_E>;
		clock-names = "xusb_host", "xusb_host_src",
			      "xusb_falcon_src", "xusb_ss",
			      "xusb_ss_src", "xusb_ss_div2",
			      "xusb_hs_src", "xusb_fs_src",
			      "pll_u_480m", "clk_m", "pll_e";
		resets = <&tegra_car 89>, <&tegra_car 156>,
			 <&tegra_car 143>;
		reset-names = "xusb_host", "xusb_ss", "xusb_src";

		nvidia,xusb-padctl = <&padctl>;

		status = "disabled";
	};

	padctl: padctl@7009f000 {
		compatible = "nvidia,tegra132-xusb-padctl",
			     "nvidia,tegra124-xusb-padctl";
@@ -658,34 +688,124 @@
		resets = <&tegra_car 142>;
		reset-names = "padctl";

		#phy-cells = <1>;
		pads {
			usb2 {
				status = "disabled";

				lanes {
					usb2-0 {
						status = "disabled";
						#phy-cells = <0>;
					};

					usb2-1 {
						status = "disabled";
						#phy-cells = <0>;
					};

					usb2-2 {
						status = "disabled";
						#phy-cells = <0>;
					};
				};
			};

			ulpi {
				status = "disabled";

				lanes {
					ulpi-0 {
						status = "disabled";
						#phy-cells = <0>;
					};
				};
			};

		phys {
			hsic {
				status = "disabled";

				lanes {
					hsic-0 {
						status = "disabled";
						#phy-cells = <0>;
					};

					hsic-1 {
						status = "disabled";
						#phy-cells = <0>;
					};
				};
			};

			pcie {
				status = "disabled";

				lanes {
					pcie-0 {
						status = "disabled";
						#phy-cells = <0>;
					};

					pcie-1 {
						status = "disabled";
						#phy-cells = <0>;
					};

					pcie-2 {
						status = "disabled";
						#phy-cells = <0>;
					};

					pcie-3 {
						status = "disabled";
						#phy-cells = <0>;
					};

					pcie-4 {
						status = "disabled";
						#phy-cells = <0>;
					};
				};
			};

			sata {
				status = "disabled";

				lanes {
					sata-0 {
						status = "disabled";
						#phy-cells = <0>;
					};
				};
			};
		};

			usb3-0 {
		ports {
			usb2-0 {
				status = "disabled";
			};

			usb3-1 {
			usb2-1 {
				status = "disabled";
			};

			utmi-0 {
			usb2-2 {
				status = "disabled";
			};

			utmi-1 {
			hsic-0 {
				status = "disabled";
			};

			utmi-2 {
			hsic-1 {
				status = "disabled";
			};

			usb3-0 {
				status = "disabled";
			};

			usb3-1 {
				status = "disabled";
			};
		};