svn commit: r271525 - in stable/9/sys/dev: ahci usb/wlan
Alexander Motin
mav at FreeBSD.org
Sat Sep 13 16:07:44 UTC 2014
Author: mav
Date: Sat Sep 13 16:07:43 2014
New Revision: 271525
URL: http://svnweb.freebsd.org/changeset/base/271525
Log:
MFC r271163, r271196:
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.
Modified:
stable/9/sys/dev/ahci/ahci.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/amd64/include/xen/ (props changed)
stable/9/sys/boot/ (props changed)
stable/9/sys/boot/forth/ (props changed)
stable/9/sys/boot/i386/efi/ (props changed)
stable/9/sys/boot/i386/gptboot/ (props changed)
stable/9/sys/boot/ia64/efi/ (props changed)
stable/9/sys/boot/ia64/ski/ (props changed)
stable/9/sys/boot/powerpc/boot1.chrp/ (props changed)
stable/9/sys/boot/powerpc/ofw/ (props changed)
stable/9/sys/cddl/contrib/opensolaris/ (props changed)
stable/9/sys/conf/ (props changed)
stable/9/sys/contrib/dev/acpica/ (props changed)
stable/9/sys/contrib/dev/run/ (props changed)
stable/9/sys/contrib/octeon-sdk/ (props changed)
stable/9/sys/contrib/pf/ (props changed)
stable/9/sys/contrib/x86emu/ (props changed)
stable/9/sys/dev/ (props changed)
stable/9/sys/dev/e1000/ (props changed)
stable/9/sys/dev/isp/ (props changed)
stable/9/sys/dev/ixgbe/ (props changed)
stable/9/sys/dev/puc/ (props changed)
stable/9/sys/dev/usb/wlan/if_run.c (props changed)
stable/9/sys/dev/usb/wlan/if_runreg.h (props changed)
stable/9/sys/fs/ (props changed)
stable/9/sys/fs/ntfs/ (props changed)
stable/9/sys/modules/ (props changed)
stable/9/sys/modules/ixgbe/ (props changed)
stable/9/sys/modules/svr4/ (props changed)
stable/9/sys/net/ (props changed)
stable/9/sys/netpfil/ (props changed)
stable/9/sys/sys/ (props changed)
Modified: stable/9/sys/dev/ahci/ahci.c
==============================================================================
--- stable/9/sys/dev/ahci/ahci.c Sat Sep 13 16:04:55 2014 (r271524)
+++ stable/9/sys/dev/ahci/ahci.c Sat Sep 13 16:07:43 2014 (r271525)
@@ -261,31 +261,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},
@@ -487,10 +487,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;
@@ -1972,9 +1971,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 do not have this problem, but instead
+ * sometimes forget to update FIS receive area, breaking
+ * this wait.
+ */
+ if ((ch->quirks & AHCI_Q_NOBSYRES) == 0 &&
+ softreset == 2 && et == AHCI_ERR_NONE) {
while ((val = fis[2]) & ATA_S_BUSY) {
DELAY(10);
if (count++ >= timeout)
More information about the svn-src-stable-9
mailing list