Hi,
Indeed, there are many topics, related to USB problems on custom boards, on this forum, and I’ve reviewed quite a few of them. In addition I’ve reviewed the USB section on “platform adaptation and bring-up guide” document, but didn’t manage to overcome this problem.
Regarding USB, the custom boards is similar in characteristics to the TX2 development kit, and contains a single USB3 port and a single USB2 port with OTG.
My SW configuration is:
- Jetpack 4.2.1
- L4T 32.2
I’ll start with describing what is the current status, and later on provide information about my configuration.
The output of ‘lsusb -t’ is:
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/3p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
Trying to connect a small hub with keyboard & mouse to the usb3 port yields the following output on dmesg:
[ 150.266029] tegra-xusb 3530000.xhci: exiting ELPG
[ 150.270895] tegra-xusb 3530000.xhci: Firmware timestamp: 2018-12-26 10:30:04 UTC, Version: 55.12 release
[ 150.272239] tegra-xusb 3530000.xhci: exiting ELPG done
[b][ 150.499160] usb 1-2: new full-speed USB device number 2 using tegra-xusb
[ 150.499834] usb 1-2: Device not responding to setup address.
[ 150.711794] usb 1-2: Device not responding to setup address.
[ 150.923129] usb 1-2: device not accepting address 2, error -71
[ 151.047085] usb 1-2: new full-speed USB device number 3 using tegra-xusb
[ 151.047759] usb 1-2: Device not responding to setup address.
[ 151.259744] usb 1-2: Device not responding to setup address.
[ 151.471063] usb 1-2: device not accepting address 3, error -71[/b]
[ 151.477245] usb usb1-port2: attempt power cycle
[ 153.575741] usb usb1: usb_suspend_both: status 0
[ 153.575801] tegra-xusb 3530000.xhci: entering ELPG
[ 153.580364] tegra-xusb 3530000.xhci: entering ELPG done
BTW, when I connect the same to the USB2 port, I only see the ELPG exit & entry messages.
For your reference I’m attaching the complete kernel initialization log and schematics of the USB.
Device tree configuration:
The custom board doesn’t include the GPIO expander, as in the TX2 development kit, so I’ve applied the recommended changes to tegra186-quill-power-tree-p3310-1000-a00-00.dtsi.
As for USB lane mapping I’m using the default configuration and OMDATA is set to 0x1090000 in p2771-0000.conf.common.
Following is the relevant configuration from tegra186-quill-p3310-1000-a00-00-base.dts:
#if TEGRA_XUSB_PADCONTROL_VERSION >= DT_VERSION_2
xhci@3530000 {
status = "okay";
phys = <&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-0}>,
<&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-1}>,
<&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-2}>,
<&{/xusb_padctl@3520000/pads/usb3/lanes/usb3-1}>;
phy-names = "usb2-0", "usb2-1", "usb2-2", "usb3-1";
};
#else
xhci@3530000 {
status = "okay";
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_USB3_P(1)>;
phy-names = "utmi-0", "utmi-1", "usb3-1";
nvidia,boost_cpu_freq = <800>;
};
#endif
#if TEGRA_XUSB_PADCONTROL_VERSION >= DT_VERSION_2
xusb_padctl@3520000 {
status = "okay";
pinctrl-0 = <&vbus_en0_default_state>;
pinctrl-1 = <&vbus_en1_default_state>;
pinctrl-2 = <&vbus_en0_sfio_tristate_state>;
pinctrl-3 = <&vbus_en1_sfio_tristate_state>;
pinctrl-4 = <&vbus_en0_sfio_passthrough_state>;
pinctrl-5 = <&vbus_en1_sfio_passthrough_state>;
pinctrl-names = "vbus_en0_default", "vbus_en1_default",
"vbus_en0_sfio_tristate", "vbus_en1_sfio_tristate",
"vbus_en0_sfio_passthrough", "vbus_en1_sfio_passthrough";
pads {
usb2 {
lanes {
usb2-0 {
nvidia,function = "xusb";
status = "okay";
};
usb2-1 {
nvidia,function = "xusb";
status = "okay";
};
usb2-2 {
nvidia,function = "xusb";
status = "okay";
};
};
};
usb3 {
lanes {
usb3-0 {
nvidia,function = "xusb";
status = "okay";
};
usb3-1 {
nvidia,function = "xusb";
status = "okay";
};
usb3-2 {
nvidia,function = "xusb";
status = "okay";
};
};
};
};
ports {
usb2-0 {
status = "okay";
mode = "otg";
vbus-supply = <&vdd_usb0_5v>;
nvidia,oc-pin = <0>;
};
usb2-1 {
status = "okay";
mode = "host";
vbus-supply = <&vdd_usb1_5v>;
nvidia,oc-pin = <1>;
};
usb2-2 {
status = "okay";
mode = "host";
<b>vbus-supply = <&battery_reg>;</b>
};
usb3-0 {
nvidia,usb2-companion = <2>;
};
usb3-1 {
nvidia,usb2-companion = <1>;
status = "okay";
};
};
};
#endif
pinctrl@3520000 {
status = "okay";
pinctrl-0 = <&tegra_xusb_padctl_pinmux_default>;
pinctrl-1 = <&vbus_en0_sfio_tristate_state>;
pinctrl-2 = <&vbus_en1_sfio_tristate_state>;
pinctrl-3 = <&vbus_en0_sfio_passthrough_state>;
pinctrl-4 = <&vbus_en1_sfio_passthrough_state>;
pinctrl-5 = <&vbus_en0_default_state>;
pinctrl-6 = <&vbus_en1_default_state>;
pinctrl-names = "default",
"vbus_en0_sfio_tristate", "vbus_en1_sfio_tristate",
"vbus_en0_sfio_passthrough", "vbus_en1_sfio_passthrough",
"vbus_en0_default", "vbus_en1_default";
tegra_xusb_padctl_pinmux_default: pinmux {
/* Quill does not support usb3-micro AB */
usb2-micro-AB {
nvidia,lanes = "otg-0";
nvidia,function = "xusb";
nvidia,port-cap = <TEGRA_PADCTL_PORT_OTG_CAP>;
nvidia,oc-pin = <0>;
};
usb2-std-A-port2 {
nvidia,lanes = "otg-1";
nvidia,function = "xusb";
nvidia,port-cap = <TEGRA_PADCTL_PORT_HOST_ONLY>;
nvidia,oc-pin = <1>;
};
usb3-std-A-port2 {
nvidia,lanes = "usb3-1";
nvidia,port-cap = <TEGRA_PADCTL_PORT_HOST_ONLY>;
nvidia,oc-pin = <1>;
};
e3325-usb3-std-A-HS {
nvidia,lanes = "otg-2";
nvidia,function = "xusb";
nvidia,port-cap = <TEGRA_PADCTL_PORT_HOST_ONLY>;
status = "disabled";
};
e3325-usb3-std-A-SS {
nvidia,lanes = "usb3-0";
nvidia,port-cap = <TEGRA_PADCTL_PORT_HOST_ONLY>;
status = "disabled";
};
};
};
The above is basically the default configuration except one modification where I updated the ‘vbus-supply’ for usb2-2 to battery_reg, as it was using vdd_usb2_5v.
I verified that plugin-manager doesn’t override my configuration.
I require your help in verifying if the DT configuration is OK and whether the failure I observe is related to some other missing configuration or an issue with the HW.
Looking forward to a response that would hopefully provide some clarifications.
Thanks in advance,
Eli.
usb_schematics.pdf (37.1 KB)
dmesg.txt (60.3 KB)