aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/nvme
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2021-12-06 17:23:06 +0000
committerWarner Losh <imp@FreeBSD.org>2021-12-06 17:23:40 +0000
commit7cf8d63c884c484fee9b287f792549ee15270ae7 (patch)
treee13e839deb40e2a8120399e3a9a52d6b403d91eb /sys/dev/nvme
parent053f8ed6ebf2355a92cb1798a9701f701610771c (diff)
Diffstat (limited to 'sys/dev/nvme')
-rw-r--r--sys/dev/nvme/nvme_ahci.c9
-rw-r--r--sys/dev/nvme/nvme_private.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/sys/dev/nvme/nvme_ahci.c b/sys/dev/nvme/nvme_ahci.c
index 8542f6f55246..b2d5813537c3 100644
--- a/sys/dev/nvme/nvme_ahci.c
+++ b/sys/dev/nvme/nvme_ahci.c
@@ -104,7 +104,14 @@ nvme_ahci_attach(device_t dev)
}
ctrlr->tag = (void *)0x1;
- return nvme_attach(dev);
+ /*
+ * We're attached via this funky mechanism. Flag the controller so that
+ * it avoids things that can't work when we do that, like asking for
+ * PCI config space entries.
+ */
+ ctrlr->quirks |= QUIRK_AHCI;
+
+ return (nvme_attach(dev)); /* Note: failure frees resources */
bad:
if (ctrlr->resource != NULL) {
bus_release_resource(dev, SYS_RES_MEMORY,
diff --git a/sys/dev/nvme/nvme_private.h b/sys/dev/nvme/nvme_private.h
index 3f89f12cf8fd..c889246f9350 100644
--- a/sys/dev/nvme/nvme_private.h
+++ b/sys/dev/nvme/nvme_private.h
@@ -241,6 +241,7 @@ struct nvme_controller {
#define QUIRK_DELAY_B4_CHK_RDY 1 /* Can't touch MMIO on disable */
#define QUIRK_DISABLE_TIMEOUT 2 /* Disable broken completion timeout feature */
#define QUIRK_INTEL_ALIGNMENT 4 /* Pre NVMe 1.3 performance alignment */
+#define QUIRK_AHCI 8 /* Attached via AHCI redirect */
bus_space_tag_t bus_tag;
bus_space_handle_t bus_handle;