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)
_______________________________________________
svn-src-stable-9@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"

Reply via email to