TX2新烧完系统之后,默认只有一个USB3.0口使能了,实际上TX2最多可以使能3个USB3.0口,在TX2的design guide中,可以找到相应的配置说明,见下图。
TX2默认的配置为配置2,只使能了USB_SS#0。为了使能3个USB3.0口,需要将USB配置为配置4。
配置的前提是你的上位机上已经安装了JetPack。并且你已经掌握了TX2编译内核和DTB的方法,以及烧写DTB的方法。如果还不会的同学,可以查阅相关资料,或者参考我的其它帖子。
首先需要进入 ../jetpack/64_TX2/Linux_for_Tegra文件夹,打开这个文件夹下的p2771-0000.conf.common文件,将这个文件中的ODMDATA的值修改为0x7090000,如下图所示,这个设置将USB配置为配置4。
修改完配置之后,就需要修改TX2的设备树DTB。需要修改TX2内核源码,并重新生成DTB文件,再将DTB文件烧写到TX2中。需要修改的内容如下:
1、首先要修改源码中的hardware/nvidia/platform/t18x/common/kernel-dts/t18x-common-plugin-manager/ tegra186-quill-p3310-1000-a00-plugin-manager.dtsi 文件中的内容。将这个文件中与下面三段相关的内容注释掉
fragment-500-pcie-config
fragment-500-xusb-config
fragment-500-e3325-pcie
如下所示:
/*fragment-500-pcie-config {
ids = ">=3310-1000-500";
override@0 {
target = <&tegra_pcie>;
_overlay_ {
pci@1,0 {
nvidia,num-lanes = <4>;
};
pci@2,0 {
nvidia,num-lanes = <0>;
};
pci@3,0 {
nvidia,num-lanes = <1>;
};
};
};
};*/
/*fragment-500-xusb-config {
ids = ">=3310-1000-500";
override@0 {
target = <&{/xhci@3530000}>;
_overlay_ {
phys = <&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(0)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(1)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(2)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_USB3_P(0)>;
phy-names = "utmi-0", "utmi-1", "utmi-2", "usb3-0";
};
};
override@1 {
target = <&tegra_xusb_padctl_pinmux_default>;
_overlay_ {
usb3-std-A-port2 {
nvidia,lanes = "usb3-0";
};
e3325-usb3-std-A-HS {
status = "okay";
};
};
};
};*/
/*fragment-500-e3325-pcie {
enable-override-on-all-matches;
ids = ">=3310-1000-500";
odm-data = "enable-pcie-on-uphy-lane0";
override@0 {
target = <&{/xhci@3530000}>;
_overlay_ {
phys = <&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(0)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(1)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(2)>;
phy-names = "utmi-0", "utmi-1", "utmi-2";
};
};
override@1 {
target = <&tegra_xusb_padctl_pinmux_default>;
_overlay_ {
usb3-std-A-port2 {
status = "disabled";
};
};
};
override@2 {
target = <&tegra_main_gpio>;
_overlay_ {
pcie0_lane2_mux {
status = "okay";
};
};
};
};*/
2、另外需要修改hardware/nvidia/platform/t18x/quill/kernel-dts/tegra186-quill-p3310-1000-c03-00-base.dts文件中的内容,修改如下:
xudc@3550000 {
status = "okay";
phys = <&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(1)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_USB3_P(0)>;
phy-names = "usb2", "usb3";
};
pcie-controller@10003000 {
pci@1,0 {
nvidia,num-lanes = <1>;
nvidia,disable-clock-request;
status = "okay";
};
pci@2,0 {
nvidia,num-lanes = <1>;
status = "okay";
};
pci@3,0 {
nvidia,num-lanes = <1>;
status = "disabled";
};
};
xhci@3530000 {
phys = <&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(0)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(1)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_UTMI_P(2)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_USB3_P(0)>,
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_USB3_P(1)>
<&tegra_xusb_padctl TEGRA_PADCTL_PHY_USB3_P(2)>;
phy-names = "utmi-0", "utmi-1","utmi-2", "usb3-0", "usb3-1", "usb3-2";
};
pinctrl@3520000 {
pinmux {
usb2-micro {
nvidia,lanes = "otg-0";
nvidia,function = "xusb";
nvidia,port-cap = ;
};
usb2-1 {
nvidia,lanes = "otg-1";
nvidia,function = "xusb";
nvidia,port-cap = ;
};
usb2-2 {
nvidia,lanes = "otg-2";
nvidia,function = "xusb";
nvidia,port-cap = ;
};
usb3-std-A-port2 {
nvidia,lanes = "usb3-0";
nvidia,port-cap = ;
status = "okay";
};
usb3-std-A-port3 {
nvidia,lanes = "usb3-2";
nvidia,port-cap = ;
status = "okay";
};
usb3-std-A-port4 {
nvidia,lanes = "usb3-1";
nvidia,port-cap = ;
status = "okay";
};
};
};
3、接下来需要修改hardware/nvidia/platform/t18x/common/kernel-dts/t18x-common-platforms/tegra186-quill-power-tree-p3310-1000-a00-00.dtsi文件中的内容。将vbus-2-supply = <&vdd_usb2_5v>;修改为vbus-2-supply = <&battery_reg>;如下所示:
pinctrl@3520000 {
vbus-0-supply = <&vdd_usb0_5v>;
vbus-1-supply = <&vdd_usb1_5v>;
vbus-2-supply = <&battery_reg>;
vbus-3-supply = <&battery_reg>;
vddio-hsic-supply = <&battery_reg>;
avdd_usb-supply = <&spmic_sd3>;
vclamp_usb-supply = <&spmic_sd2>;
avdd_pll_erefeut-supply = <&spmic_sd2>;
};
修改完以上内容之后,重新编译内核和DTB,将生成的DTB文件烧写到TX2中,重新启动TX2,三个USB3.0口就可以完美运行了。