From: Greg KH <gregkh@linuxfoundation.org>
To: Olivier Kaloudoff <olivier.kaloudoff@gmail.com>
Cc: linux-usb@vger.kernel.org, stern@rowland.harvard.edu,
usb-storage@lists.one-eyed-alien.net, stable@vger.kernel.org
Subject: Re: [PATCH v2] usb: uas: ignore UAS for ASMT135x bridges (174c:55aa)
Date: Wed, 14 Oct 2026 13:16:39 +0200 [thread overview]
Message-ID: <2026101459-mortuary-curator-63f7@gregkh> (raw)
In-Reply-To: <20261014105700.19433-1-olivier.kaloudoff@gmail.com>
On Wed, Oct 14, 2026 at 12:57:00PM +0200, Olivier Kaloudoff wrote:
> The ASMedia chip detection in uas_use_uas_driver() assumes that every
> device with idVendor/idProduct 174c:5106 or 174c:55aa reporting a
> config.MaxPower of 0 is an ASM1153 with working UAS.
>
> ASMT135x bridges (iProduct "ASMT135x") share the same 174c:55aa id and
> also report MaxPower == 0, so they take the "ASM1153, do nothing"
> path — but their UAS implementation is broken:
>
> - The first READ(16) issued by sd probing times out after 30 s;
> enumeration only completes after a uas_eh_abort_handler plus a full
> uas_eh_host_reset_handler cycle:
>
> scsi 3:0:0:0: Direct-Access ASMT ASMT135x 0 PQ: 0 ANSI: 6
> sd 3:0:0:0: [sdb] tag#26 uas_eh_abort_handler 0 uas-tag 1 inflight: CMD IN
> sd 3:0:0:0: [sdb] tag#26 CDB: Read(16) 88 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
> scsi host3: uas_eh_host_reset_handler start
> usb 6-2: reset SuperSpeed USB device number 2 using xhci_hcd
> scsi host3: uas_eh_host_reset_handler success
>
> - Under concurrent load the bridge stalls: all inflight commands (20+
> UAS tags in the captured incident, mixed READ(16)/WRITE(16)) hit the
> 30 s UAS timeout in the same event, forcing repeated abort/reset
> cycles and eventually a USB disconnect. Writes dropped mid-flight
> during these resets returned zeros to the filesystem (observed as
> XFS metadata corruption on the mounted volume).
>
> - Sequential-write throughput is ~45 MiB/s under UAS versus ~136 MiB/s
> after disabling UAS (usb-storage BOT mode), which is fully stable:
> several tens of GiB written without a single error.
>
> - Bulk reads of healthy LBA ranges do work under UAS (~190 MiB/s, no
> errors); the failure pattern is command-timeout at enumeration and
> under queue depth / write load, not a broken transfer path.
>
> Since 174c:55aa is shared across several ASMedia bridges and enclosure
> rebrandings, distinguish the ASMT135x by its product string — the same
> approach used for the HIKSEMI MD202 check a few lines below. The
> product strings of working bridges using the same id ("ASM1053E",
> "ASM1153", "ASM1153E", "ASM1351", vendor rebrands such as "YZWY_TECH")
> do not contain "ASMT135", so the match is safe.
>
> Verified on an ORICO enclosure (iManufacturer "ASMT", iProduct
> "ASMT135x", bcdDevice 1.00) attached through an Alpine Ridge TB3 dock:
> with the equivalent usb-storage quirks parameter (174c:55aa:u) the
> device is completely stable.
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Olivier Kaloudoff <olivier.kaloudoff@gmail.com>
> ---
> v2: fix the comment block: added lines were missing the leading
> tab, breaking the *-alignment with the rest of the block.
> Apologies — the v1 diff was mangled by my editor before sending.
>
> drivers/usb/storage/uas-detect.h | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/storage/uas-detect.h b/drivers/usb/storage/uas-detect.h
> index 4d3b49e5b87a..d8dc77015992 100644
> --- a/drivers/usb/storage/uas-detect.h
> +++ b/drivers/usb/storage/uas-detect.h
> @@ -78,6 +78,8 @@ static int uas_use_uas_driver(struct usb_interface *intf,
> * ASM1051 - with broken (*) uas support
> * ASM1053 - with working uas support, but problems with large xfers
> * ASM1153 - with working uas support
> + * ASMT135x - broken uas support, shares the ASM1153 MaxPower == 0
> + * signature, identify it by its product string
> *
> * Devices with these chips re-use a number of device-ids over the
> * entire line, so the device-id is useless to determine if we're
> @@ -99,7 +101,10 @@ static int uas_use_uas_driver(struct usb_interface *intf,
> (le16_to_cpu(udev->descriptor.idProduct) == 0x5106 ||
> le16_to_cpu(udev->descriptor.idProduct) == 0x55aa)) {
> if (udev->actconfig->desc.bMaxPower == 0) {
> - /* ASM1153, do nothing */
> + if (udev->product && strstr(udev->product, "ASMT135"))
> + /* ASMT135x, broken uas */
> + flags |= US_FL_IGNORE_UAS;
You have a 2 line statement after the if () here without any {}.
Yes, it will work (or it should), but it's not good form and will
confuse us over time. Please fix this up, odd that checkpatch.pl didn't
catch it.
thanks,
greg k-h
next prev parent reply other threads:[~2026-10-14 11:16 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 22:19 [PATCH] usb: uas: ignore UAS for ASMT135x bridges (174c:55aa) Olivier Kaloudoff
2026-10-13 22:23 ` sashiko-bot
2026-10-14 5:00 ` Greg KH
2026-10-14 10:57 ` [PATCH v2] " Olivier Kaloudoff
2026-10-14 11:02 ` sashiko-bot
2026-10-14 11:16 ` Greg KH [this message]
2026-10-14 16:57 ` [PATCH v3] " Olivier Kaloudoff
2026-10-14 17:02 ` sashiko-bot
2026-10-14 19:04 ` [usb-storage] " Alan Stern
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2026101459-mortuary-curator-63f7@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
--cc=olivier.kaloudoff@gmail.com \
--cc=stable@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=usb-storage@lists.one-eyed-alien.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox