ahci_generic: add quirk for NXP0004 (NXP Layerscape LX2160A)

This fixes this error :
(aprobe3:ahcich3:0:15:0): NOP FLUSHQUEUE. ACB: 00 00 00 00 00 00 00 00 00 00 00 00
(aprobe3:ahcich3:0:15:0): CAM status: Command timeout
(aprobe3:ahcich3:0:15:0): Error 5, Retries exhausted

Submitted by:	Greg V <greg@unrelenting.technology>
Reviewed by:	imp, mav
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D25157
This commit is contained in:
Emmanuel Vadot 2020-09-30 17:10:49 +00:00
parent a52c8a6502
commit 6b74091dd5

View File

@ -86,11 +86,22 @@ ahci_fdt_probe(device_t dev)
#endif
#ifdef DEV_ACPI
static const struct ahci_acpi_quirk {
const char* hid;
u_int quirks;
} ahci_acpi_quirks[] = {
{ "NXP0004", AHCI_Q_NOPMP },
{ NULL, 0 }
};
static int
ahci_acpi_probe(device_t dev)
{
struct ahci_controller *ctlr = device_get_softc(dev);
ACPI_HANDLE h;
int i;
if ((h = acpi_get_handle(dev)) == NULL)
return (ENXIO);
@ -105,6 +116,12 @@ ahci_acpi_probe(device_t dev)
if (bootverbose)
device_printf(dev, "Bus is%s cache-coherent\n",
ctlr->dma_coherent ? "" : " not");
for (i = 0; ahci_acpi_quirks[i].hid != NULL; i++) {
if (acpi_MatchHid(h, ahci_acpi_quirks[i].hid) != ACPI_MATCHHID_NOMATCH) {
ctlr->quirks = ahci_acpi_quirks[i].quirks;
break;
}
}
return (BUS_PROBE_DEFAULT);
}