Page MenuHomeFreeBSD

D38413.id116690.diff
No OneTemporary

D38413.id116690.diff

Index: sys/dev/ahci/ahci.h
===================================================================
--- sys/dev/ahci/ahci.h
+++ sys/dev/ahci/ahci.h
@@ -621,6 +621,7 @@
#define AHCI_Q_NOCCS 0x00400000
#define AHCI_Q_NOAUX 0x00800000
#define AHCI_Q_IOMMU_BUSWIDE 0x01000000
+#define AHCI_Q_SLOWDEV 0x02000000
#define AHCI_Q_BIT_STRING \
"\020" \
@@ -648,7 +649,8 @@
"\026MRVL_SR_DEL" \
"\027NOCCS" \
"\030NOAUX" \
- "\031IOMMU_BUSWIDE"
+ "\031IOMMU_BUSWIDE" \
+ "\032SLOWDEV"
int ahci_attach(device_t dev);
int ahci_detach(device_t dev);
Index: sys/dev/ahci/ahci.c
===================================================================
--- sys/dev/ahci/ahci.c
+++ sys/dev/ahci/ahci.c
@@ -2605,10 +2605,11 @@
ahci_sata_connect(struct ahci_channel *ch)
{
u_int32_t status;
- int timeout, found = 0;
+ int timeout, timeoutslot, found = 0;
- /* Wait up to 100ms for "connect well" */
- for (timeout = 0; timeout < 1000 ; timeout++) {
+ /* Wait up to 100ms for "connect well" or 500ms for slow devices */
+ timeoutslot = ((ch->quirks & AHCI_Q_SLOWDEV) ? 5000 : 1000);
+ for (timeout = 0; timeout < timeoutslot; timeout++) {
status = ATA_INL(ch->r_mem, AHCI_P_SSTS);
if ((status & ATA_SS_DET_MASK) != ATA_SS_DET_NO_DEVICE)
found = 1;
Index: sys/dev/ahci/ahci_pci.c
===================================================================
--- sys/dev/ahci/ahci_pci.c
+++ sys/dev/ahci/ahci_pci.c
@@ -293,7 +293,7 @@
{0x92201b4b, 0x00, "Marvell 88SE9220", AHCI_Q_ALTSIG |
AHCI_Q_IOMMU_BUSWIDE},
{0x92301b4b, 0x00, "Marvell 88SE9230", AHCI_Q_ALTSIG |
- AHCI_Q_IOMMU_BUSWIDE},
+ AHCI_Q_IOMMU_BUSWIDE | AHCI_Q_SLOWDEV},
{0x92351b4b, 0x00, "Marvell 88SE9235", 0},
{0x06201103, 0x00, "HighPoint RocketRAID 620", 0},
{0x06201b4b, 0x00, "HighPoint RocketRAID 620", 0},

File Metadata

Mime Type
text/plain
Expires
Thu, Feb 26, 7:50 PM (6 h, 23 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29007061
Default Alt Text
D38413.id116690.diff (1 KB)

Event Timeline