svn commit: r331044 - in stable/11/sys: cam/ata cam/scsi dev/bhnd/siba dev/sdhci dev/usb dev/usb/quirk
Eitan Adler
eadler at FreeBSD.org
Fri Mar 16 02:44:20 UTC 2018
Author: eadler
Date: Fri Mar 16 02:44:18 2018
New Revision: 331044
URL: https://svnweb.freebsd.org/changeset/base/331044
Log:
MFC r305373,r312344,r318095,r319117,r320948,r320953,r328528:
siba(4): Add missing bhnd_device/bhnd_device_quirk table terminator entries.
This resulted in an over-read on siba chipsets that failed to match the
existing entries.
r312344 | sbruno | 2017-01-17 14:52:48 +0000 (Tue, 17 Jan 2017) | 7 lines
Add 4k quirk for Micron 5100 and Intel S3610 SSDs
r318095 | loos | 2017-05-09 19:01:57 +0000 (Tue, 09 May 2017) | 9 lines
Add a new SDHCI quirk, SDHCI_QUIRK_BROKEN_AUTO_STOP, to workaround
controllers that do not support or have broken ACMD12 implementations.
r319117 | wma | 2017-05-29 09:22:53 +0000 (Mon, 29 May 2017) | 16 lines
Introduce Genesys GL3224 quirks
The Genesys chip is failing when issueing READ_CAP(16) command.
Force a quirk to disable it and use READ_CAP(10) instead.
Also, depending on used firmware, GL3224 can be recognized
either as 'storage device' or 'mass storage class' -
enable both variants in scsi_quirk_table.
r320948 | sbruno | 2017-07-13 15:33:08 +0000 (Thu, 13 Jul 2017) | 6 lines
Add 4K quirks for Samsung 750 EVO SSD
r320953 | sbruno | 2017-07-13 16:56:26 +0000 (Thu, 13 Jul 2017) | 5 lines
Add 4k and NCQ_TRIM_BROKEN quirks for Samsung 845 SSDs.
r328528 | ian | 2018-01-29 03:24:02 +0000 (Mon, 29 Jan 2018) | 3 lines
Add a NO_GETMAXLUN quirk for the JMicron JMS567 USB to SATA bridge, to
prevent lengthy timeout pauses while probing/attaching drives.
Modified:
stable/11/sys/cam/ata/ata_da.c
stable/11/sys/cam/scsi/scsi_da.c
stable/11/sys/cam/scsi/scsi_xpt.c
stable/11/sys/dev/bhnd/siba/siba_bhndb.c
stable/11/sys/dev/sdhci/sdhci.c
stable/11/sys/dev/sdhci/sdhci.h
stable/11/sys/dev/usb/quirk/usb_quirk.c
stable/11/sys/dev/usb/usbdevs
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/cam/ata/ata_da.c
==============================================================================
--- stable/11/sys/cam/ata/ata_da.c Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/cam/ata/ata_da.c Fri Mar 16 02:44:18 2018 (r331044)
@@ -513,6 +513,14 @@ static struct ada_quirk_entry ada_quirk_table[] =
},
{
/*
+ * Intel S3610 Series SSDs
+ * 4k optimised & trim only works in 4k requests + 4k aligned
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "*", "INTEL SSDSC2BX*", "*" },
+ /*quirks*/ADA_Q_4K
+ },
+ {
+ /*
* Intel X25-M Series SSDs
* 4k optimised & trim only works in 4k requests + 4k aligned
*/
@@ -569,6 +577,14 @@ static struct ada_quirk_entry ada_quirk_table[] =
},
{
/*
+ * Micron 5100 SSDs
+ * 4k optimised & trim only works in 4k requests + 4k aligned
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "*", "Micron 5100 MTFDDAK*", "*" },
+ /*quirks*/ADA_Q_4K
+ },
+ {
+ /*
* OCZ Agility 2 SSDs
* 4k optimised & trim only works in 4k requests + 4k aligned
*/
@@ -617,6 +633,14 @@ static struct ada_quirk_entry ada_quirk_table[] =
},
{
/*
+ * Samsung 750 SSDs
+ * 4k optimised, NCQ TRIM seems to work
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "*", "Samsung SSD 750*", "*" },
+ /*quirks*/ADA_Q_4K
+ },
+ {
+ /*
* Samsung 830 Series SSDs
* 4k optimised, NCQ TRIM Broken (normal TRIM is fine)
*/
@@ -629,6 +653,14 @@ static struct ada_quirk_entry ada_quirk_table[] =
* 4k optimised, NCQ TRIM Broken (normal TRIM is fine)
*/
{ T_DIRECT, SIP_MEDIA_FIXED, "*", "Samsung SSD 840*", "*" },
+ /*quirks*/ADA_Q_4K | ADA_Q_NCQ_TRIM_BROKEN
+ },
+ {
+ /*
+ * Samsung 845 SSDs
+ * 4k optimised, NCQ TRIM Broken (normal TRIM is fine)
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "*", "Samsung SSD 845*", "*" },
/*quirks*/ADA_Q_4K | ADA_Q_NCQ_TRIM_BROKEN
},
{
Modified: stable/11/sys/cam/scsi/scsi_da.c
==============================================================================
--- stable/11/sys/cam/scsi/scsi_da.c Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/cam/scsi/scsi_da.c Fri Mar 16 02:44:18 2018 (r331044)
@@ -682,6 +682,13 @@ static struct da_quirk_entry da_quirk_table[] =
},
{
/*
+ * Genesys GL3224
+ */
+ {T_DIRECT, SIP_MEDIA_REMOVABLE, "Generic*", "STORAGE DEVICE*",
+ "120?"}, /*quirks*/ DA_Q_NO_SYNC_CACHE | DA_Q_4K | DA_Q_NO_RC16
+ },
+ {
+ /*
* Genesys 6-in-1 Card Reader
* PR: usb/94647
*/
@@ -836,6 +843,11 @@ static struct da_quirk_entry da_quirk_table[] =
/*quirks*/DA_Q_4K
},
{
+ /* Micron Advanced Format (4k) drives */
+ { T_DIRECT, SIP_MEDIA_FIXED, "ATA", "Micron 5100 MTFDDAK*", "*" },
+ /*quirks*/DA_Q_4K
+ },
+ {
/* Samsung Advanced Format (4k) drives */
{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "SAMSUNG HD155UI*", "*" },
/*quirks*/DA_Q_4K
@@ -1158,6 +1170,14 @@ static struct da_quirk_entry da_quirk_table[] =
},
{
/*
+ * Intel S3610 Series SSDs
+ * 4k optimised & trim only works in 4k requests + 4k aligned
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "ATA", "INTEL SSDSC2BX*", "*" },
+ /*quirks*/DA_Q_4K
+ },
+ {
+ /*
* Intel X25-M Series SSDs
* 4k optimised & trim only works in 4k requests + 4k aligned
*/
@@ -1238,6 +1258,14 @@ static struct da_quirk_entry da_quirk_table[] =
},
{
/*
+ * Samsung 750 Series SSDs
+ * 4k optimised & trim only works in 4k requests + 4k aligned
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "ATA", "Samsung SSD 750*", "*" },
+ /*quirks*/DA_Q_4K
+ },
+ {
+ /*
* Samsung 830 Series SSDs
* 4k optimised & trim only works in 4k requests + 4k aligned
*/
@@ -1250,6 +1278,14 @@ static struct da_quirk_entry da_quirk_table[] =
* 4k optimised & trim only works in 4k requests + 4k aligned
*/
{ T_DIRECT, SIP_MEDIA_FIXED, "ATA", "Samsung SSD 840*", "*" },
+ /*quirks*/DA_Q_4K
+ },
+ {
+ /*
+ * Samsung 845 SSDs
+ * 4k optimised & trim only works in 4k requests + 4k aligned
+ */
+ { T_DIRECT, SIP_MEDIA_FIXED, "ATA", "Samsung SSD 845*", "*" },
/*quirks*/DA_Q_4K
},
{
Modified: stable/11/sys/cam/scsi/scsi_xpt.c
==============================================================================
--- stable/11/sys/cam/scsi/scsi_xpt.c Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/cam/scsi/scsi_xpt.c Fri Mar 16 02:44:18 2018 (r331044)
@@ -547,6 +547,14 @@ static struct scsi_quirk_entry scsi_quirk_table[] =
CAM_QUIRK_NORPTLUNS, /*mintags*/2, /*maxtags*/255
},
{
+ { T_DIRECT, SIP_MEDIA_REMOVABLE, "Generic", "STORAGE DEVICE*", "120?" },
+ CAM_QUIRK_NORPTLUNS, /*mintags*/2, /*maxtags*/255
+ },
+ {
+ { T_DIRECT, SIP_MEDIA_REMOVABLE, "Generic", "MassStorageClass", "1533" },
+ CAM_QUIRK_NORPTLUNS, /*mintags*/2, /*maxtags*/255
+ },
+ {
/* Default tagged queuing parameters for all devices */
{
T_ANY, SIP_MEDIA_REMOVABLE|SIP_MEDIA_FIXED,
Modified: stable/11/sys/dev/bhnd/siba/siba_bhndb.c
==============================================================================
--- stable/11/sys/dev/bhnd/siba/siba_bhndb.c Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/dev/bhnd/siba/siba_bhndb.c Fri Mar 16 02:44:18 2018 (r331044)
@@ -71,10 +71,12 @@ enum {
static struct bhnd_device_quirk bridge_quirks[] = {
BHND_CHIP_QUIRK(4311, HWREV_EQ(2), SIBA_QUIRK_PCIE_D11_SB_TIMEOUT),
BHND_CHIP_QUIRK(4312, HWREV_EQ(0), SIBA_QUIRK_PCIE_D11_SB_TIMEOUT),
+ BHND_DEVICE_QUIRK_END
};
static struct bhnd_device bridge_devs[] = {
BHND_DEVICE(BCM, PCI, NULL, bridge_quirks),
+ BHND_DEVICE_END
};
static int
Modified: stable/11/sys/dev/sdhci/sdhci.c
==============================================================================
--- stable/11/sys/dev/sdhci/sdhci.c Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/dev/sdhci/sdhci.c Fri Mar 16 02:44:18 2018 (r331044)
@@ -1439,7 +1439,7 @@ sdhci_set_transfer_mode(struct sdhci_slot *slot, struc
mode |= SDHCI_TRNS_MULTI;
if (data->flags & MMC_DATA_READ)
mode |= SDHCI_TRNS_READ;
- if (slot->req->stop)
+ if (slot->req->stop && !(slot->quirks & SDHCI_QUIRK_BROKEN_AUTO_STOP))
mode |= SDHCI_TRNS_ACMD12;
if (slot->flags & SDHCI_USE_DMA)
mode |= SDHCI_TRNS_DMA;
@@ -1695,7 +1695,8 @@ sdhci_finish_data(struct sdhci_slot *slot)
slot->intmask |= SDHCI_INT_RESPONSE);
}
/* Unload rest of data from DMA buffer. */
- if (!slot->data_done && (slot->flags & SDHCI_USE_DMA)) {
+ if (!slot->data_done && (slot->flags & SDHCI_USE_DMA) &&
+ slot->curcmd->data != NULL) {
if (data->flags & MMC_DATA_READ) {
left = data->len - slot->offset;
bus_dmamap_sync(slot->dmatag, slot->dmamap,
@@ -1735,17 +1736,18 @@ sdhci_start(struct sdhci_slot *slot)
sdhci_start_command(slot, req->cmd);
return;
}
-/* We don't need this until using Auto-CMD12 feature
- if (!(slot->flags & STOP_STARTED) && req->stop) {
+ if ((slot->quirks & SDHCI_QUIRK_BROKEN_AUTO_STOP) &&
+ !(slot->flags & STOP_STARTED) && req->stop) {
slot->flags |= STOP_STARTED;
sdhci_start_command(slot, req->stop);
return;
}
-*/
if (__predict_false(sdhci_debug > 1))
slot_printf(slot, "result: %d\n", req->cmd->error);
if (!req->cmd->error &&
- (slot->quirks & SDHCI_QUIRK_RESET_AFTER_REQUEST)) {
+ ((slot->curcmd == req->stop &&
+ (slot->quirks & SDHCI_QUIRK_BROKEN_AUTO_STOP)) ||
+ (slot->quirks & SDHCI_QUIRK_RESET_AFTER_REQUEST))) {
sdhci_reset(slot, SDHCI_RESET_CMD);
sdhci_reset(slot, SDHCI_RESET_DATA);
}
Modified: stable/11/sys/dev/sdhci/sdhci.h
==============================================================================
--- stable/11/sys/dev/sdhci/sdhci.h Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/dev/sdhci/sdhci.h Fri Mar 16 02:44:18 2018 (r331044)
@@ -89,6 +89,8 @@
#define SDHCI_QUIRK_CAPS_BIT63_FOR_MMC_HS400 (1 << 26)
/* Controller support for SDHCI_CTRL2_PRESET_VALUE is broken. */
#define SDHCI_QUIRK_PRESET_VALUE_BROKEN (1 << 27)
+/* Controller does not support or the support for ACMD12 is broken. */
+#define SDHCI_QUIRK_BROKEN_AUTO_STOP (1 << 28)
/*
* Controller registers
Modified: stable/11/sys/dev/usb/quirk/usb_quirk.c
==============================================================================
--- stable/11/sys/dev/usb/quirk/usb_quirk.c Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/dev/usb/quirk/usb_quirk.c Fri Mar 16 02:44:18 2018 (r331044)
@@ -247,6 +247,7 @@ static struct usb_quirk_entry usb_quirks[USB_DEV_QUIRK
USB_QUIRK(IOMEGA, ZIP100, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
UQ_MSC_FORCE_PROTO_SCSI,
UQ_MSC_NO_TEST_UNIT_READY), /* XXX ZIP drives can also use ATAPI */
+ USB_QUIRK(JMICRON, JMS567, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN),
USB_QUIRK(JMICRON, JM20337, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
UQ_MSC_FORCE_PROTO_SCSI,
UQ_MSC_NO_SYNC_CACHE),
Modified: stable/11/sys/dev/usb/usbdevs
==============================================================================
--- stable/11/sys/dev/usb/usbdevs Fri Mar 16 01:03:10 2018 (r331043)
+++ stable/11/sys/dev/usb/usbdevs Fri Mar 16 02:44:18 2018 (r331044)
@@ -2548,6 +2548,7 @@ product JATON EDA 0x5704 Ethernet
product JETI SPC1201 0x04b2 FTDI compatible adapter
/* JMicron products */
+product JMICRON JMS567 0x0567 USB to SATA 6.0Gb/s bridge
product JMICRON JM20336 0x2336 USB to SATA Bridge
product JMICRON JM20337 0x2338 USB to ATA/ATAPI Bridge
More information about the svn-src-stable-11
mailing list