svn commit: r271163 - head/sys/dev/ahci
Alexander Motin
mav at FreeBSD.org
Fri Sep 5 13:45:15 UTC 2014
Author: mav
Date: Fri Sep 5 13:45:14 2014
New Revision: 271163
URL: http://svnweb.freebsd.org/changeset/base/271163
Log:
Invert AHCI_Q_NOBSYRES quirk meaning, waiting for readiness by default.
I gave up to update list of Marvell chips that require this quirk.
The final nail was growing number of PCIe/M.2 SSDs where Marvell chips
have PCI IDs of different vendors.
MFC after: 1 week
H/W donated by: I/O Switch
Modified:
head/sys/dev/ahci/ahci.c
head/sys/dev/ahci/ahci_pci.c
Modified: head/sys/dev/ahci/ahci.c
==============================================================================
--- head/sys/dev/ahci/ahci.c Fri Sep 5 13:25:27 2014 (r271162)
+++ head/sys/dev/ahci/ahci.c Fri Sep 5 13:45:14 2014 (r271163)
@@ -187,10 +187,9 @@ ahci_attach(device_t dev)
ctlr->ichannels = ATA_INL(ctlr->r_mem, AHCI_PI);
/* Identify and set separate quirks for HBA and RAID f/w Marvells. */
- if ((ctlr->quirks & AHCI_Q_NOBSYRES) &&
- (ctlr->quirks & AHCI_Q_ALTSIG) &&
+ if ((ctlr->quirks & AHCI_Q_ALTSIG) &&
(ctlr->caps & AHCI_CAP_SPM) == 0)
- ctlr->quirks &= ~AHCI_Q_NOBSYRES;
+ ctlr->quirks |= AHCI_Q_NOBSYRES;
if (ctlr->quirks & AHCI_Q_1CH) {
ctlr->caps &= ~AHCI_CAP_NPMASK;
@@ -1533,9 +1532,15 @@ ahci_execute_transaction(struct ahci_slo
}
}
- /* Marvell controllers do not wait for readyness. */
- if ((ch->quirks & AHCI_Q_NOBSYRES) && softreset == 2 &&
- et == AHCI_ERR_NONE) {
+ /*
+ * Marvell HBAs with non-RAID firmware do not wait for
+ * readiness after soft reset, so we have to wait here.
+ * Marvell RAIDs have no this problem, but instead sometimes
+ * forget to update FIS receive area, breaking this wait.
+ */
+ if ((ch->quirks & AHCI_Q_NOBSYRES) == 0 &&
+ (ch->quirks & AHCI_Q_ATI_PMP_BUG) == 0 &&
+ softreset == 2 && et == AHCI_ERR_NONE) {
while ((val = fis[2]) & ATA_S_BUSY) {
DELAY(10);
if (count++ >= timeout)
Modified: head/sys/dev/ahci/ahci_pci.c
==============================================================================
--- head/sys/dev/ahci/ahci_pci.c Fri Sep 5 13:25:27 2014 (r271162)
+++ head/sys/dev/ahci/ahci_pci.c Fri Sep 5 13:45:14 2014 (r271163)
@@ -179,31 +179,31 @@ static struct {
AHCI_Q_EDGEIS | AHCI_Q_NONCQ | AHCI_Q_NOCOUNT},
{0x614511ab, 0x00, "Marvell 88SE6145", AHCI_Q_NOFORCE | AHCI_Q_4CH |
AHCI_Q_EDGEIS | AHCI_Q_NONCQ | AHCI_Q_NOCOUNT},
- {0x91201b4b, 0x00, "Marvell 88SE912x", AHCI_Q_EDGEIS|AHCI_Q_NOBSYRES},
- {0x91231b4b, 0x11, "Marvell 88SE912x", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
- {0x91231b4b, 0x00, "Marvell 88SE912x", AHCI_Q_EDGEIS|AHCI_Q_SATA2|AHCI_Q_NOBSYRES},
- {0x91251b4b, 0x00, "Marvell 88SE9125", AHCI_Q_NOBSYRES},
- {0x91281b4b, 0x00, "Marvell 88SE9128", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
- {0x91301b4b, 0x00, "Marvell 88SE9130", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
- {0x91721b4b, 0x00, "Marvell 88SE9172", AHCI_Q_NOBSYRES},
- {0x91821b4b, 0x00, "Marvell 88SE9182", AHCI_Q_NOBSYRES},
- {0x91831b4b, 0x00, "Marvell 88SS9183", AHCI_Q_NOBSYRES},
- {0x91a01b4b, 0x00, "Marvell 88SE91Ax", AHCI_Q_NOBSYRES},
- {0x92151b4b, 0x00, "Marvell 88SE9215", AHCI_Q_NOBSYRES},
- {0x92201b4b, 0x00, "Marvell 88SE9220", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
- {0x92301b4b, 0x00, "Marvell 88SE9230", AHCI_Q_NOBSYRES|AHCI_Q_ALTSIG},
- {0x92351b4b, 0x00, "Marvell 88SE9235", AHCI_Q_NOBSYRES},
- {0x06201103, 0x00, "HighPoint RocketRAID 620", AHCI_Q_NOBSYRES},
- {0x06201b4b, 0x00, "HighPoint RocketRAID 620", AHCI_Q_NOBSYRES},
- {0x06221103, 0x00, "HighPoint RocketRAID 622", AHCI_Q_NOBSYRES},
- {0x06221b4b, 0x00, "HighPoint RocketRAID 622", AHCI_Q_NOBSYRES},
- {0x06401103, 0x00, "HighPoint RocketRAID 640", AHCI_Q_NOBSYRES},
- {0x06401b4b, 0x00, "HighPoint RocketRAID 640", AHCI_Q_NOBSYRES},
- {0x06441103, 0x00, "HighPoint RocketRAID 644", AHCI_Q_NOBSYRES},
- {0x06441b4b, 0x00, "HighPoint RocketRAID 644", AHCI_Q_NOBSYRES},
- {0x06411103, 0x00, "HighPoint RocketRAID 640L", AHCI_Q_NOBSYRES},
- {0x06421103, 0x00, "HighPoint RocketRAID 642L", AHCI_Q_NOBSYRES},
- {0x06451103, 0x00, "HighPoint RocketRAID 644L", AHCI_Q_NOBSYRES},
+ {0x91201b4b, 0x00, "Marvell 88SE912x", AHCI_Q_EDGEIS},
+ {0x91231b4b, 0x11, "Marvell 88SE912x", AHCI_Q_ALTSIG},
+ {0x91231b4b, 0x00, "Marvell 88SE912x", AHCI_Q_EDGEIS|AHCI_Q_SATA2},
+ {0x91251b4b, 0x00, "Marvell 88SE9125", 0},
+ {0x91281b4b, 0x00, "Marvell 88SE9128", AHCI_Q_ALTSIG},
+ {0x91301b4b, 0x00, "Marvell 88SE9130", AHCI_Q_ALTSIG},
+ {0x91721b4b, 0x00, "Marvell 88SE9172", 0},
+ {0x91821b4b, 0x00, "Marvell 88SE9182", 0},
+ {0x91831b4b, 0x00, "Marvell 88SS9183", 0},
+ {0x91a01b4b, 0x00, "Marvell 88SE91Ax", 0},
+ {0x92151b4b, 0x00, "Marvell 88SE9215", 0},
+ {0x92201b4b, 0x00, "Marvell 88SE9220", AHCI_Q_ALTSIG},
+ {0x92301b4b, 0x00, "Marvell 88SE9230", AHCI_Q_ALTSIG},
+ {0x92351b4b, 0x00, "Marvell 88SE9235", 0},
+ {0x06201103, 0x00, "HighPoint RocketRAID 620", 0},
+ {0x06201b4b, 0x00, "HighPoint RocketRAID 620", 0},
+ {0x06221103, 0x00, "HighPoint RocketRAID 622", 0},
+ {0x06221b4b, 0x00, "HighPoint RocketRAID 622", 0},
+ {0x06401103, 0x00, "HighPoint RocketRAID 640", 0},
+ {0x06401b4b, 0x00, "HighPoint RocketRAID 640", 0},
+ {0x06441103, 0x00, "HighPoint RocketRAID 644", 0},
+ {0x06441b4b, 0x00, "HighPoint RocketRAID 644", 0},
+ {0x06411103, 0x00, "HighPoint RocketRAID 640L", 0},
+ {0x06421103, 0x00, "HighPoint RocketRAID 642L", 0},
+ {0x06451103, 0x00, "HighPoint RocketRAID 644L", 0},
{0x044c10de, 0x00, "NVIDIA MCP65", AHCI_Q_NOAA},
{0x044d10de, 0x00, "NVIDIA MCP65", AHCI_Q_NOAA},
{0x044e10de, 0x00, "NVIDIA MCP65", AHCI_Q_NOAA},
More information about the svn-src-all
mailing list