Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bdf53098 authored by Bjorn Helgaas's avatar Bjorn Helgaas
Browse files

Merge branch 'pci/host-vmd' into next

* pci/host-vmd:
  x86/PCI: VMD: Move VMD driver to drivers/pci/host
  x86/PCI: VMD: Synchronize with RCU freeing MSI IRQ descs
  x86/PCI: VMD: Eliminate index member from IRQ list
  x86/PCI: VMD: Eliminate vmd_vector member from list type
  x86/PCI: VMD: Convert to use pci_alloc_irq_vectors() API
  x86/PCI: VMD: Allocate IRQ lists with correct MSI-X count
  PCI: Use positive flags in pci_alloc_irq_vectors()
  PCI: Update "pci=resource_alignment" documentation

Conflicts:
	drivers/pci/host/Kconfig
	drivers/pci/host/Makefile
parents 69a06e49 181ffd19
Loading
Loading
Loading
Loading
+10 −14
Original line number Diff line number Diff line
@@ -94,14 +94,11 @@ has a requirements for a minimum number of vectors the driver can pass a
min_vecs argument set to this limit, and the PCI core will return -ENOSPC
if it can't meet the minimum number of vectors.

The flags argument should normally be set to 0, but can be used to pass the
PCI_IRQ_NOMSI and PCI_IRQ_NOMSIX flag in case a device claims to support
MSI or MSI-X, but the support is broken, or to pass PCI_IRQ_NOLEGACY in
case the device does not support legacy interrupt lines.

By default this function will spread the interrupts around the available
CPUs, but this feature can be disabled by passing the PCI_IRQ_NOAFFINITY
flag.
The flags argument is used to specify which type of interrupt can be used
by the device and the driver (PCI_IRQ_LEGACY, PCI_IRQ_MSI, PCI_IRQ_MSIX).
A convenient short-hand (PCI_IRQ_ALL_TYPES) is also available to ask for
any possible kind of interrupt.  If the PCI_IRQ_AFFINITY flag is set,
pci_alloc_irq_vectors() will spread the interrupts around the available CPUs.

To get the Linux IRQ numbers passed to request_irq() and free_irq() and the
vectors, use the following function:
@@ -131,7 +128,7 @@ larger than the number supported by the device it will automatically be
capped to the supported limit, so there is no need to query the number of
vectors supported beforehand:

	nvec = pci_alloc_irq_vectors(pdev, 1, nvec, 0);
	nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_ALL_TYPES)
	if (nvec < 0)
		goto out_err;

@@ -140,7 +137,7 @@ interrupts it can request a particular number of interrupts by passing that
number to pci_alloc_irq_vectors() function as both 'min_vecs' and
'max_vecs' parameters:

	ret = pci_alloc_irq_vectors(pdev, nvec, nvec, 0);
	ret = pci_alloc_irq_vectors(pdev, nvec, nvec, PCI_IRQ_ALL_TYPES);
	if (ret < 0)
		goto out_err;

@@ -148,15 +145,14 @@ The most notorious example of the request type described above is enabling
the single MSI mode for a device.  It could be done by passing two 1s as
'min_vecs' and 'max_vecs':

	ret = pci_alloc_irq_vectors(pdev, 1, 1, 0);
	ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
	if (ret < 0)
		goto out_err;

Some devices might not support using legacy line interrupts, in which case
the PCI_IRQ_NOLEGACY flag can be used to fail the request if the platform
can't provide MSI or MSI-X interrupts:
the driver can specify that only MSI or MSI-X is acceptable:

	nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_NOLEGACY);
	nvec = pci_alloc_irq_vectors(pdev, 1, nvec, PCI_IRQ_MSI | PCI_IRQ_MSIX);
	if (nvec < 0)
		goto out_err;

+4 −0
Original line number Diff line number Diff line
@@ -3032,6 +3032,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
				PAGE_SIZE is used as alignment.
				PCI-PCI bridge can be specified, if resource
				windows need to be expanded.
				To specify the alignment for several
				instances of a device, the PCI vendor,
				device, subvendor, and subdevice may be
				specified, e.g., 4096@pci:8086:9c22:103c:198f
		ecrc=		Enable/disable PCIe ECRC (transaction layer
				end-to-end CRC checking).
				bios: Use BIOS/firmware settings. This is the
+0 −13
Original line number Diff line number Diff line
@@ -2744,19 +2744,6 @@ config PMC_ATOM
	def_bool y
        depends on PCI

config VMD
	depends on PCI_MSI
	tristate "Volume Management Device Driver"
	default N
	---help---
	  Adds support for the Intel Volume Management Device (VMD). VMD is a
	  secondary PCI host bridge that allows PCI Express root ports,
	  and devices attached to them, to be removed from the default
	  PCI domain and placed within the VMD domain. This provides
	  more bus resources than are otherwise possible with a
	  single domain. If you know your system provides one of these and
	  has devices attached to it, say Y; if you are not sure, say N.

source "net/Kconfig"

source "drivers/Kconfig"
+0 −2
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@ obj-y += bus_numa.o
obj-$(CONFIG_AMD_NB)		+= amd_bus.o
obj-$(CONFIG_PCI_CNB20LE_QUIRK)	+= broadcom_bus.o

obj-$(CONFIG_VMD) += vmd.o

ifeq ($(CONFIG_PCI_DEBUG),y)
EXTRA_CFLAGS += -DDEBUG
endif
+16 −0
Original line number Diff line number Diff line
@@ -285,4 +285,20 @@ config PCIE_ROCKCHIP
	  There is 1 internal PCIe port available to support GEN2 with
	  4 slots.

config VMD
	depends on PCI_MSI && X86_64
	tristate "Intel Volume Management Device Driver"
	default N
	---help---
	  Adds support for the Intel Volume Management Device (VMD). VMD is a
	  secondary PCI host bridge that allows PCI Express root ports,
	  and devices attached to them, to be removed from the default
	  PCI domain and placed within the VMD domain. This provides
	  more bus resources than are otherwise possible with a
	  single domain. If you know your system provides one of these and
	  has devices attached to it, say Y; if you are not sure, say N.

	  To compile this driver as a module, choose M here: the
	  module will be called vmd.

endmenu
Loading