2023-08-07 13:15:07

by Mehta, Piyush

[permalink] [raw]
Subject: [PATCH] uas: Add US_FL_NO_ATA_1X for linux tcm_usb_gadget

The linux kernel's tcm_usb_gadget requires the US_FL_NO_ATA_1X quirk.
It does not respond to the ATA_12 family of commands and hangs. The host
prevents the issuing of ATA_12 commands to the TCM module, by introducing
this quirk, the host is permitted to proceed with other operations.

Signed-off-by: Piyush Mehta <[email protected]>
---
drivers/usb/storage/unusual_uas.h | 7 +++++++
1 file changed, 7 insertions(+)

diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h
index 1f8c9b16a0fb..2fc0220c72ee 100644
--- a/drivers/usb/storage/unusual_uas.h
+++ b/drivers/usb/storage/unusual_uas.h
@@ -177,6 +177,13 @@ UNUSUAL_DEV(0x4971, 0x8017, 0x0000, 0x9999,
USB_SC_DEVICE, USB_PR_DEVICE, NULL,
US_FL_NO_REPORT_OPCODES),

+/* Reported-by: Piyush Mehta <[email protected]> */
+UNUSUAL_DEV(0x0525, 0xa4a5, 0x0000, 0x9999,
+ "NetChip",
+ "Target Product",
+ USB_SC_DEVICE, USB_PR_DEVICE, NULL,
+ US_FL_NO_ATA_1X),
+
/* "G-DRIVE" external HDD hangs on write without these.
* Patch submitted by Alexander Kappner <[email protected]>
*/
--
2.25.1



2023-08-07 14:19:26

by Alan Stern

[permalink] [raw]
Subject: Re: [PATCH] uas: Add US_FL_NO_ATA_1X for linux tcm_usb_gadget

On Mon, Aug 07, 2023 at 05:50:25PM +0530, Piyush Mehta wrote:
> The linux kernel's tcm_usb_gadget requires the US_FL_NO_ATA_1X quirk.
> It does not respond to the ATA_12 family of commands and hangs. The host

Are you certain of that? Doesn't this depend on the underlying device
that the gadget is attached to?

> prevents the issuing of ATA_12 commands to the TCM module, by introducing
> this quirk, the host is permitted to proceed with other operations.

Rather than changing just one host (the Linux one) while leaving all
other hosts to malfunction, why not fix the gadget instead? Change it
so that it _doesn't_ hang when it gets an ATA_12 command but returns an
appropriate error status. That way the gadget will work with all hosts.

Alan Stern