OSDN Git Service

Merge branch 'remotes/lorenzo/pci/vmd'
authorBjorn Helgaas <bhelgaas@google.com>
Thu, 28 Nov 2019 14:54:52 +0000 (08:54 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 28 Nov 2019 14:54:52 +0000 (08:54 -0600)
  - Add VMD bus 224-255 restriction decode (Jon Derrick)

  - Add VMD 8086:9A0B device ID (Jon Derrick)

  - Remove Keith from VMD maintainer list (Keith Busch)

* remotes/lorenzo/pci/vmd:
  MAINTAINERS: Remove Keith from VMD maintainer
  PCI: vmd: Add device id for VMD device 8086:9A0B
  PCI: vmd: Add bus 224-255 restriction decode

MAINTAINERS
drivers/pci/controller/vmd.c
include/linux/pci_ids.h

index e51a68b..165d9a2 100644 (file)
@@ -12447,7 +12447,6 @@ F:      Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
 F:     drivers/pci/controller/dwc/*imx6*
 
 PCI DRIVER FOR INTEL VOLUME MANAGEMENT DEVICE (VMD)
-M:     Keith Busch <keith.busch@intel.com>
 M:     Jonathan Derrick <jonathan.derrick@intel.com>
 L:     linux-pci@vger.kernel.org
 S:     Supported
index a35d3f3..6bff951 100644 (file)
@@ -602,16 +602,30 @@ static int vmd_enable_domain(struct vmd_dev *vmd, unsigned long features)
 
        /*
         * Certain VMD devices may have a root port configuration option which
-        * limits the bus range to between 0-127 or 128-255
+        * limits the bus range to between 0-127, 128-255, or 224-255
         */
        if (features & VMD_FEAT_HAS_BUS_RESTRICTIONS) {
-               u32 vmcap, vmconfig;
-
-               pci_read_config_dword(vmd->dev, PCI_REG_VMCAP, &vmcap);
-               pci_read_config_dword(vmd->dev, PCI_REG_VMCONFIG, &vmconfig);
-               if (BUS_RESTRICT_CAP(vmcap) &&
-                   (BUS_RESTRICT_CFG(vmconfig) == 0x1))
-                       vmd->busn_start = 128;
+               u16 reg16;
+
+               pci_read_config_word(vmd->dev, PCI_REG_VMCAP, &reg16);
+               if (BUS_RESTRICT_CAP(reg16)) {
+                       pci_read_config_word(vmd->dev, PCI_REG_VMCONFIG,
+                                            &reg16);
+
+                       switch (BUS_RESTRICT_CFG(reg16)) {
+                       case 1:
+                               vmd->busn_start = 128;
+                               break;
+                       case 2:
+                               vmd->busn_start = 224;
+                               break;
+                       case 3:
+                               pci_err(vmd->dev, "Unknown Bus Offset Setting\n");
+                               return -ENODEV;
+                       default:
+                               break;
+                       }
+               }
        }
 
        res = &vmd->dev->resource[VMD_CFGBAR];
@@ -854,6 +868,8 @@ static const struct pci_device_id vmd_ids[] = {
        {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_VMD_28C0),
                .driver_data = VMD_FEAT_HAS_MEMBAR_SHADOW |
                                VMD_FEAT_HAS_BUS_RESTRICTIONS,},
+       {PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_VMD_9A0B),
+               .driver_data = VMD_FEAT_HAS_BUS_RESTRICTIONS,},
        {0,}
 };
 MODULE_DEVICE_TABLE(pci, vmd_ids);
index 21a5724..2302d13 100644 (file)
 #define PCI_DEVICE_ID_INTEL_84460GX    0x84ea
 #define PCI_DEVICE_ID_INTEL_IXP4XX     0x8500
 #define PCI_DEVICE_ID_INTEL_IXP2800    0x9004
+#define PCI_DEVICE_ID_INTEL_VMD_9A0B   0x9a0b
 #define PCI_DEVICE_ID_INTEL_S21152BB   0xb152
 
 #define PCI_VENDOR_ID_SCALEMP          0x8686