From 76ead70e001fd87084ad2749bc453c5e5fa4db14 Mon Sep 17 00:00:00 2001 From: dlg Date: Mon, 3 Jul 2017 23:27:53 +0000 Subject: [PATCH] blacklist MSI on intel m.2 optane parts. it just doesnt work there. discovered by jmatthew@ tweaks and ok jsg@ kettenis@ --- sys/dev/pci/nvme_pci.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sys/dev/pci/nvme_pci.c b/sys/dev/pci/nvme_pci.c index 7778cd6f235..01d78839823 100644 --- a/sys/dev/pci/nvme_pci.c +++ b/sys/dev/pci/nvme_pci.c @@ -1,4 +1,4 @@ -/* $OpenBSD: nvme_pci.c,v 1.5 2016/11/10 11:56:41 mpi Exp $ */ +/* $OpenBSD: nvme_pci.c,v 1.6 2017/07/03 23:27:53 dlg Exp $ */ /* * Copyright (c) 2014 David Gwynne @@ -77,6 +77,10 @@ nvme_pci_match(struct device *parent, void *match, void *aux) return (0); } +static const struct pci_matchid nvme_msi_blacklist[] = { + { PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_OPTANE }, +}; + void nvme_pci_attach(struct device *parent, struct device *self, void *aux) { @@ -90,6 +94,9 @@ nvme_pci_attach(struct device *parent, struct device *self, void *aux) psc->psc_pc = pa->pa_pc; sc->sc_dmat = pa->pa_dmat; + if (pci_matchbyid(pa, nvme_msi_blacklist, nitems(nvme_msi_blacklist))) + CLR(pa->pa_flags, PCI_FLAGS_MSI_ENABLED); + maptype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, NVME_PCI_BAR); if (pci_mapreg_map(pa, NVME_PCI_BAR, maptype, 0, &sc->sc_iot, &sc->sc_ioh, NULL, &sc->sc_ios, 0) != 0) { -- 2.20.1