diff options
Diffstat (limited to 'drivers/usb/storage')
-rw-r--r-- | drivers/usb/storage/uas-detect.h | 33 | ||||
-rw-r--r-- | drivers/usb/storage/unusual_uas.h | 46 |
2 files changed, 66 insertions, 13 deletions
diff --git a/drivers/usb/storage/uas-detect.h b/drivers/usb/storage/uas-detect.h index 8a6f371ed6e7..9893d696fc97 100644 --- a/drivers/usb/storage/uas-detect.h +++ b/drivers/usb/storage/uas-detect.h | |||
@@ -69,16 +69,39 @@ static int uas_use_uas_driver(struct usb_interface *intf, | |||
69 | return 0; | 69 | return 0; |
70 | 70 | ||
71 | /* | 71 | /* |
72 | * ASM1051 and older ASM1053 devices have the same usb-id, and UAS is | 72 | * ASMedia has a number of usb3 to sata bridge chips, at the time of |
73 | * broken on the ASM1051, use the number of streams to differentiate. | 73 | * this writing the following versions exist: |
74 | * New ASM1053-s also support 32 streams, but have a different prod-id. | 74 | * ASM1051 - no uas support version |
75 | * ASM1051 - with broken (*) uas support | ||
76 | * ASM1053 - with working uas support | ||
77 | * ASM1153 - with working uas support | ||
78 | * | ||
79 | * Devices with these chips re-use a number of device-ids over the | ||
80 | * entire line, so the device-id is useless to determine if we're | ||
81 | * dealing with an ASM1051 (which we want to avoid). | ||
82 | * | ||
83 | * The ASM1153 can be identified by config.MaxPower == 0, | ||
84 | * where as the ASM105x models have config.MaxPower == 36. | ||
85 | * | ||
86 | * Differentiating between the ASM1053 and ASM1051 is trickier, when | ||
87 | * connected over USB-3 we can look at the number of streams supported, | ||
88 | * ASM1051 supports 32 streams, where as early ASM1053 versions support | ||
89 | * 16 streams, newer ASM1053-s also support 32 streams, but have a | ||
90 | * different prod-id. | ||
91 | * | ||
92 | * (*) ASM1051 chips do work with UAS with some disks (with the | ||
93 | * US_FL_NO_REPORT_OPCODES quirk), but are broken with other disks | ||
75 | */ | 94 | */ |
76 | if (le16_to_cpu(udev->descriptor.idVendor) == 0x174c && | 95 | if (le16_to_cpu(udev->descriptor.idVendor) == 0x174c && |
77 | le16_to_cpu(udev->descriptor.idProduct) == 0x55aa) { | 96 | (le16_to_cpu(udev->descriptor.idProduct) == 0x5106 || |
78 | if (udev->speed < USB_SPEED_SUPER) { | 97 | le16_to_cpu(udev->descriptor.idProduct) == 0x55aa)) { |
98 | if (udev->actconfig->desc.bMaxPower == 0) { | ||
99 | /* ASM1153, do nothing */ | ||
100 | } else if (udev->speed < USB_SPEED_SUPER) { | ||
79 | /* No streams info, assume ASM1051 */ | 101 | /* No streams info, assume ASM1051 */ |
80 | flags |= US_FL_IGNORE_UAS; | 102 | flags |= US_FL_IGNORE_UAS; |
81 | } else if (usb_ss_max_streams(&eps[1]->ss_ep_comp) == 32) { | 103 | } else if (usb_ss_max_streams(&eps[1]->ss_ep_comp) == 32) { |
104 | /* Possibly an ASM1051, disable uas */ | ||
82 | flags |= US_FL_IGNORE_UAS; | 105 | flags |= US_FL_IGNORE_UAS; |
83 | } | 106 | } |
84 | } | 107 | } |
diff --git a/drivers/usb/storage/unusual_uas.h b/drivers/usb/storage/unusual_uas.h index 18a283d6de1c..6df4357d9ee3 100644 --- a/drivers/usb/storage/unusual_uas.h +++ b/drivers/usb/storage/unusual_uas.h | |||
@@ -40,6 +40,16 @@ | |||
40 | * and don't forget to CC: the USB development list <linux-usb@vger.kernel.org> | 40 | * and don't forget to CC: the USB development list <linux-usb@vger.kernel.org> |
41 | */ | 41 | */ |
42 | 42 | ||
43 | /* | ||
44 | * Apricorn USB3 dongle sometimes returns "USBSUSBSUSBS" in response to SCSI | ||
45 | * commands in UAS mode. Observed with the 1.28 firmware; are there others? | ||
46 | */ | ||
47 | UNUSUAL_DEV(0x0984, 0x0301, 0x0128, 0x0128, | ||
48 | "Apricorn", | ||
49 | "", | ||
50 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
51 | US_FL_IGNORE_UAS), | ||
52 | |||
43 | /* https://bugzilla.kernel.org/show_bug.cgi?id=79511 */ | 53 | /* https://bugzilla.kernel.org/show_bug.cgi?id=79511 */ |
44 | UNUSUAL_DEV(0x0bc2, 0x2312, 0x0000, 0x9999, | 54 | UNUSUAL_DEV(0x0bc2, 0x2312, 0x0000, 0x9999, |
45 | "Seagate", | 55 | "Seagate", |
@@ -68,6 +78,20 @@ UNUSUAL_DEV(0x0bc2, 0xa003, 0x0000, 0x9999, | |||
68 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 78 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
69 | US_FL_NO_ATA_1X), | 79 | US_FL_NO_ATA_1X), |
70 | 80 | ||
81 | /* Reported-by: Marcin ZajÄ…czkowski <mszpak@wp.pl> */ | ||
82 | UNUSUAL_DEV(0x0bc2, 0xa013, 0x0000, 0x9999, | ||
83 | "Seagate", | ||
84 | "Backup Plus", | ||
85 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
86 | US_FL_NO_ATA_1X), | ||
87 | |||
88 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ | ||
89 | UNUSUAL_DEV(0x0bc2, 0xa0a4, 0x0000, 0x9999, | ||
90 | "Seagate", | ||
91 | "Backup Plus Desk", | ||
92 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
93 | US_FL_NO_ATA_1X), | ||
94 | |||
71 | /* https://bbs.archlinux.org/viewtopic.php?id=183190 */ | 95 | /* https://bbs.archlinux.org/viewtopic.php?id=183190 */ |
72 | UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999, | 96 | UNUSUAL_DEV(0x0bc2, 0xab20, 0x0000, 0x9999, |
73 | "Seagate", | 97 | "Seagate", |
@@ -82,6 +106,13 @@ UNUSUAL_DEV(0x0bc2, 0xab21, 0x0000, 0x9999, | |||
82 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 106 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
83 | US_FL_NO_ATA_1X), | 107 | US_FL_NO_ATA_1X), |
84 | 108 | ||
109 | /* Reported-by: G. Richard Bellamy <rbellamy@pteradigm.com> */ | ||
110 | UNUSUAL_DEV(0x0bc2, 0xab2a, 0x0000, 0x9999, | ||
111 | "Seagate", | ||
112 | "BUP Fast HDD", | ||
113 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
114 | US_FL_NO_ATA_1X), | ||
115 | |||
85 | /* Reported-by: Claudio Bizzarri <claudio.bizzarri@gmail.com> */ | 116 | /* Reported-by: Claudio Bizzarri <claudio.bizzarri@gmail.com> */ |
86 | UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999, | 117 | UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999, |
87 | "JMicron", | 118 | "JMicron", |
@@ -89,14 +120,6 @@ UNUSUAL_DEV(0x152d, 0x0567, 0x0000, 0x9999, | |||
89 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 120 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
90 | US_FL_NO_REPORT_OPCODES), | 121 | US_FL_NO_REPORT_OPCODES), |
91 | 122 | ||
92 | /* Most ASM1051 based devices have issues with uas, blacklist them all */ | ||
93 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ | ||
94 | UNUSUAL_DEV(0x174c, 0x5106, 0x0000, 0x9999, | ||
95 | "ASMedia", | ||
96 | "ASM1051", | ||
97 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
98 | US_FL_IGNORE_UAS), | ||
99 | |||
100 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ | 123 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ |
101 | UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, | 124 | UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, |
102 | "VIA", | 125 | "VIA", |
@@ -104,6 +127,13 @@ UNUSUAL_DEV(0x2109, 0x0711, 0x0000, 0x9999, | |||
104 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | 127 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, |
105 | US_FL_NO_ATA_1X), | 128 | US_FL_NO_ATA_1X), |
106 | 129 | ||
130 | /* Reported-by: Takeo Nakayama <javhera@gmx.com> */ | ||
131 | UNUSUAL_DEV(0x357d, 0x7788, 0x0000, 0x9999, | ||
132 | "JMicron", | ||
133 | "JMS566", | ||
134 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
135 | US_FL_NO_REPORT_OPCODES), | ||
136 | |||
107 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ | 137 | /* Reported-by: Hans de Goede <hdegoede@redhat.com> */ |
108 | UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999, | 138 | UNUSUAL_DEV(0x4971, 0x1012, 0x0000, 0x9999, |
109 | "Hitachi", | 139 | "Hitachi", |