USB drive cannot operate at UASP

Hi Nvidia team,

My customized board is running JetPack 6.0 (L4T: R36.3). I understand that ‘uas’ is not included in the default configuration of kernel, so I manually added the ‘uas’ module (in-tree type) and recompiled the kernel. However, in this version, my USB high-speed drive cannot operate in UASP mode.

I checked the system log and found that the USB controller does not support streams

I’m sure my USB high speed drive supports UASP, and can operate in UASP mode in JetPack 5.1.2.

Is there any way to solve this issue?
JP6_dmesg.txt (63.0 KB)

Thanks.

What is your method to tell USB device is working in UASP?

Are you saying that you won’t see that warning log " USB controller 3610000.usb does not support streams, which are required by the UAS driver" in Jetpack5?

Hi Wayne,

Operating in UASP is negotiated between host and device.
You can get supporting UASP device to give it a try. E.g. NVMe to USB converter.

Are you saying that you won’t see that warning log " USB controller 3610000.usb does not support streams, which are required by the UAS driver" in Jetpack5?

Yes, I did not see the message in JetPack 5.

Thanks.

You can get supporting UASP device to give it a try. E.g. NVMe to USB converter.

I am just asking how did you tell “jetpack5 has UASP” and “Jetpack6 has no UASP”. That is the only thing I want to ask… Not trying anything here.

Hi Wayne,

I open the defconfig from kernel source (kernel-jammy-src/arch/arm64/configs), I do not see that “CONFIG_USB_UAS=y” is added, so I think JetPack 6 has no UASP.

Thanks.

Hi,

我直接用中文解釋可能會比較清楚一點.

  1. 我們在下一版jetpack6會把UAS加進去. 會使用 “CONFIG_USB_UAS=m”. 所以之後會有uas.ko可以使用

  2. 你說你也重新設定了CONFIG_USB_UAS + 重build kernel了 . 但是你又說 “my USB high-speed drive cannot operate in UASP mode.”
    所以你到底是用什麼依據來判斷說 " 現在UASP mode有開" ? 聽起來你就算加了CONFIG_USB_UAS之後你還是有東西沒辦法使用?

Hi Wayne,

使用lsusb -tv,檢查USB Drive使用的Driver是否為uas

目前我自己重新加了CONFIG_USB_UAS這行,確實仍無法運作為UASP。

Hi,

能請你rel-36/ rel-35的lsusb跟dmesg都各抓一份出來嗎?

現在這情況看起來得比較兩個版本的driver行為為何有差別.

看起來 kernel/3rdparty/canonical/linux-jammy/kernel-source/drivers/usb/storage/uas.c裡面以下判斷在rel-36過不了.

992  	if (!uas_use_uas_driver(intf, id, &dev_flags))
993  		return -ENODEV;

如果追的再往下一點就會到log印出來的那一行 kernel/3rdparty/canonical/linux-jammy/kernel-source/drivers/usb/storage/uas-detect.h

149  	if (udev->speed >= USB_SPEED_SUPER && !hcd->can_do_streams) {
150  		dev_warn(&udev->dev,
151  			"USB controller %s does not support streams, which are required by the UAS driver.\n",

可能得確認一下為什麼rel-35的狀況下can_do_streams的設定跟rel-36不同.

Hi Wayne,

請參閱上傳之附件。
uasp_logs.zip (39.6 KB)

Thanks.

Hi,

從rel-36的dmesg看來 你用的這一個usb device有被列進quirk. 所以不會使用uas driver.

3.282445] usb 2-1.1: new SuperSpeed Plus Gen 2x1 USB device number 3 using tegra-xusb
[ 3.313402] usb 2-1.1: UAS is ignored for this device, using usb-storage instead
[ 3.313423] usb 2-1.1: UAS is ignored for this device, using usb-storage instead
[ 3.313426] usb-storage 2-1.1:1.0: USB Mass Storage device detected
[ 3.314149] usb-storage 2-1.1:1.0: Quirks match for vid 0b05 pid 1932: 800000

Hi Wayne,

感謝您的提醒。
我在/kernel-jammy-src/drivers/usb/storage/unusual_uas.h裡找到了以下內容

73	UNUSUAL_DEV(0x0b05, 0x1932, 0x0000, 0x9999,
74			"ASUS",
75			"External HDD",
76			USB_SC_DEVICE, USB_PR_DEVICE, NULL,
77			US_FL_IGNORE_UAS),

看起來是被回報後加了進去,針對這個USB Device我沒問題。
而另一個VID 13fe PID 6500,我在 /kernel-jammy-src/drivers/usb/ 的所有檔案,搜尋不到VID&PID一致的內容,可能還要再請您了解一下。

Thanks.

請分享一下只有VID 13fe PID 6500這個裝置狀況下的dmesg.

Hi Wayne,

請參閱附件,謝謝。
rel-36p3_13fe-6500.zip (18.3 KB)

Hi,

看來還是得追一下我這邊提到的這個

能請你加一些print比較一下你在rel-35跟rel-36這個can_do_streams的狀況嗎

Hi Wayne,

看了一下,發現xhci-tegra.c在rel-36缺少了以下內容

--- kernel/kernel-jammy-src/drivers/usb/host/xhci-tegra.c.old   2024-12-30 08:51:07.165753413 +0800
+++ kernel/kernel-jammy-src/drivers/usb/host/xhci-tegra.c       2024-12-30 08:52:10.048226021 +0800
@@ -1836,6 +1836,9 @@
                goto remove_usb2;
        }

+       if (HCC_MAX_PSA(xhci->hcc_params) >= 4)
+                xhci->shared_hcd->can_do_streams = 1;
+
        err = usb_add_hcd(xhci->shared_hcd, tegra->xhci_irq, IRQF_SHARED);
        if (err < 0) {
                dev_err(&pdev->dev, "failed to add shared HCD: %d\n", err);

把它補上去之後,支援UAS的USB Drive現在能以UAS模式運作。

Thanks.

1 Like

我們在下一版中會將這兩行補上.

Hi Wayne,

了解,感謝您的協助。

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.