Patch for kern/56737 - Remove AHCI_QUIRK_EXTRA_DELAY as issue appears to be drive and not controller related - Replace AHCISATA_EXTRA_DELAY with AHCISATA_NO_EXTRA_DELAY, defaulting to enabling the extra delay, as the downside of slower probing on systems which do not need it is less than having other systems intermittently fail to probe and attach drives - Also allow disabling extra delay by setting AHCISATA_EXTRA_DELAY_MS = 0 Index: sys/conf/files =================================================================== RCS file: /cvsroot/src/sys/conf/files,v retrieving revision 1.1308 diff -u -u -r1.1308 files --- sys/conf/files 3 Sep 2023 19:38:58 -0000 1.1308 +++ sys/conf/files 10 Sep 2023 12:58:03 -0000 @@ -1062,7 +1062,7 @@ file dev/ic/ninjaata32.c njata # AHCI-compatible SATA controllers -defflag opt_ahcisata.h AHCISATA_EXTRA_DELAY +defflag opt_ahcisata.h AHCISATA_NO_EXTRA_DELAY defparam opt_ahcisata.h AHCISATA_EXTRA_DELAY_MS define ahcisata_core file dev/ic/ahcisata_core.c ahcisata_core Index: sys/dev/ic/ahcisata_core.c =================================================================== RCS file: /cvsroot/src/sys/dev/ic/ahcisata_core.c,v retrieving revision 1.107 diff -u -u -r1.107 ahcisata_core.c --- sys/dev/ic/ahcisata_core.c 1 Aug 2022 07:37:18 -0000 1.107 +++ sys/dev/ic/ahcisata_core.c 10 Sep 2023 12:58:03 -0000 @@ -119,15 +119,11 @@ #define AHCISATA_EXTRA_DELAY_MS 500 /* XXX need to adjust */ #endif -#ifdef AHCISATA_EXTRA_DELAY +#if !defined(AHCISATA_NO_EXTRA_DELAY) && AHCISATA_EXTRA_DELAY_MS > 0 #define AHCISATA_DO_EXTRA_DELAY(sc, chp, msg, flags) \ ata_delay(chp, AHCISATA_EXTRA_DELAY_MS, msg, flags) #else -#define AHCISATA_DO_EXTRA_DELAY(sc, chp, msg, flags) \ - do { \ - if ((sc)->sc_ahci_quirks & AHCI_QUIRK_EXTRA_DELAY) \ - ata_delay(chp, AHCISATA_EXTRA_DELAY_MS, msg, flags); \ - } while (0) +#define AHCISATA_DO_EXTRA_DELAY(sc, chp, msg, flags) do { } while (0) #endif const struct ata_bustype ahci_ata_bustype = { Index: sys/dev/ic/ahcisatavar.h =================================================================== RCS file: /cvsroot/src/sys/dev/ic/ahcisatavar.h,v retrieving revision 1.27 diff -u -u -r1.27 ahcisatavar.h --- sys/dev/ic/ahcisatavar.h 19 Nov 2021 23:46:55 -0000 1.27 +++ sys/dev/ic/ahcisatavar.h 10 Sep 2023 12:58:03 -0000 @@ -59,7 +59,6 @@ #define AHCI_PCI_QUIRK_BAD64 __BIT(1) /* broken 64-bit DMA */ #define AHCI_QUIRK_BADPMP __BIT(2) /* broken PMP support, ignore */ #define AHCI_QUIRK_BADNCQ __BIT(3) /* possibly broken NCQ support, ignore */ -#define AHCI_QUIRK_EXTRA_DELAY __BIT(4) /* needs extra delay */ uint32_t sc_ahci_cap; /* copy of AHCI_CAP */ int sc_ncmds; /* number of command slots */ Index: sys/dev/pci/ahcisata_pci.c =================================================================== RCS file: /cvsroot/src/sys/dev/pci/ahcisata_pci.c,v retrieving revision 1.69 diff -u -u -r1.69 ahcisata_pci.c --- sys/dev/pci/ahcisata_pci.c 31 Jul 2023 11:24:32 -0000 1.69 +++ sys/dev/pci/ahcisata_pci.c 10 Sep 2023 12:58:03 -0000 @@ -197,46 +197,13 @@ { PCI_VENDOR_ASMEDIA, PCI_PRODUCT_ASMEDIA_ASM1061_11, AHCI_PCI_QUIRK_FORCE }, { PCI_VENDOR_ASMEDIA, PCI_PRODUCT_ASMEDIA_ASM1061_12, - AHCI_PCI_QUIRK_FORCE | AHCI_QUIRK_EXTRA_DELAY }, + AHCI_PCI_QUIRK_FORCE }, { PCI_VENDOR_AMD, PCI_PRODUCT_AMD_HUDSON_SATA, AHCI_PCI_QUIRK_FORCE }, { PCI_VENDOR_AMD, PCI_PRODUCT_AMD_HUDSON_SATA_AHCI, AHCI_QUIRK_BADPMP }, { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801JI_SATA_AHCI, AHCI_QUIRK_BADPMP }, - - /* extra delay */ - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_C600_AHCI, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_7SER_MO_SATA_AHCI, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_BSW_AHCI, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_8SER_DT_SATA_AHCI, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_9SERIES_SATA_AHCI, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_AMD, PCI_PRODUCT_AMD_FCH_SATA_D, AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_ASMEDIA, PCI_PRODUCT_ASMEDIA_ASM106X, - AHCI_QUIRK_EXTRA_DELAY }, - -#if 0 - /* - * XXX Non-reproducible failures reported. May need extra-delay quirk. - */ - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_BAYTRAIL_SATA_AHCI_0, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_BAYTRAIL_SATA_AHCI_1, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_SATA_4, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_SATA_5, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_SATA_6, - AHCI_QUIRK_EXTRA_DELAY }, - { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_82801I_SATA_7, - AHCI_QUIRK_EXTRA_DELAY }, -#endif }; struct ahci_pci_softc {