3a9ad0b4fd
David Ahern reported thatd63e2e1f3d
("sparc/PCI: Clip bridge windows to fit in upstream windows") fails to boot on sparc/T5-8: pci 0000:06:00.0: reg 0x184: can't handle BAR above 4GB (bus address 0x110204000) The problem is that sparc64 assumed that dma_addr_t only needed to hold DMA addresses, i.e., bus addresses returned via the DMA API (dma_map_single(), etc.), while the PCI core assumed dma_addr_t could hold *any* bus address, including raw BAR values. On sparc64, all DMA addresses fit in 32 bits, so dma_addr_t is a 32-bit type. However, BAR values can be 64 bits wide, so they don't fit in a dma_addr_t.d63e2e1f3d
added new checking that tripped over this mismatch. Add pci_bus_addr_t, which is wide enough to hold any PCI bus address, including both raw BAR values and DMA addresses. This will be 64 bits on 64-bit platforms and on platforms with a 64-bit dma_addr_t. Then dma_addr_t only needs to be wide enough to hold addresses from the DMA API. [bhelgaas: changelog, bugzilla, Kconfig to ensure pci_bus_addr_t is at least as wide as dma_addr_t, documentation] Fixes:d63e2e1f3d
("sparc/PCI: Clip bridge windows to fit in upstream windows") Fixes:23b13bc76f
("PCI: Fail safely if we can't handle BARs larger than 4GB") Link: http://lkml.kernel.org/r/CAE9FiQU1gJY1LYrxs+ma5LCTEEe4xmtjRG0aXJ9K_Tsu+m9Wuw@mail.gmail.com Link: http://lkml.kernel.org/r/1427857069-6789-1-git-send-email-yinghai@kernel.org Link: https://bugzilla.kernel.org/show_bug.cgi?id=96231 Reported-by: David Ahern <david.ahern@oracle.com> Tested-by: David Ahern <david.ahern@oracle.com> Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: David S. Miller <davem@davemloft.net> CC: stable@vger.kernel.org # v3.19+
122 lines
3.3 KiB
Plaintext
122 lines
3.3 KiB
Plaintext
#
|
|
# PCI configuration
|
|
#
|
|
config PCI_BUS_ADDR_T_64BIT
|
|
def_bool y if (ARCH_DMA_ADDR_T_64BIT || 64BIT)
|
|
depends on PCI
|
|
|
|
config PCI_MSI
|
|
bool "Message Signaled Interrupts (MSI and MSI-X)"
|
|
depends on PCI
|
|
select GENERIC_MSI_IRQ
|
|
help
|
|
This allows device drivers to enable MSI (Message Signaled
|
|
Interrupts). Message Signaled Interrupts enable a device to
|
|
generate an interrupt using an inbound Memory Write on its
|
|
PCI bus instead of asserting a device IRQ pin.
|
|
|
|
Use of PCI MSI interrupts can be disabled at kernel boot time
|
|
by using the 'pci=nomsi' option. This disables MSI for the
|
|
entire system.
|
|
|
|
If you don't know what to do here, say Y.
|
|
|
|
config PCI_MSI_IRQ_DOMAIN
|
|
bool
|
|
depends on PCI_MSI
|
|
select GENERIC_MSI_IRQ_DOMAIN
|
|
|
|
config PCI_DEBUG
|
|
bool "PCI Debugging"
|
|
depends on PCI && DEBUG_KERNEL
|
|
help
|
|
Say Y here if you want the PCI core to produce a bunch of debug
|
|
messages to the system log. Select this if you are having a
|
|
problem with PCI support and want to see more of what is going on.
|
|
|
|
When in doubt, say N.
|
|
|
|
config PCI_REALLOC_ENABLE_AUTO
|
|
bool "Enable PCI resource re-allocation detection"
|
|
depends on PCI
|
|
help
|
|
Say Y here if you want the PCI core to detect if PCI resource
|
|
re-allocation needs to be enabled. You can always use pci=realloc=on
|
|
or pci=realloc=off to override it. Note this feature is a no-op
|
|
unless PCI_IOV support is also enabled; in that case it will
|
|
automatically re-allocate PCI resources if SR-IOV BARs have not
|
|
been allocated by the BIOS.
|
|
|
|
When in doubt, say N.
|
|
|
|
config PCI_STUB
|
|
tristate "PCI Stub driver"
|
|
depends on PCI
|
|
help
|
|
Say Y or M here if you want be able to reserve a PCI device
|
|
when it is going to be assigned to a guest operating system.
|
|
|
|
When in doubt, say N.
|
|
|
|
config XEN_PCIDEV_FRONTEND
|
|
tristate "Xen PCI Frontend"
|
|
depends on PCI && X86 && XEN
|
|
select PCI_XEN
|
|
select XEN_XENBUS_FRONTEND
|
|
default y
|
|
help
|
|
The PCI device frontend driver allows the kernel to import arbitrary
|
|
PCI devices from a PCI backend to support PCI driver domains.
|
|
|
|
config HT_IRQ
|
|
bool "Interrupts on hypertransport devices"
|
|
default y
|
|
depends on PCI && X86_LOCAL_APIC
|
|
help
|
|
This allows native hypertransport devices to use interrupts.
|
|
|
|
If unsure say Y.
|
|
|
|
config PCI_ATS
|
|
bool
|
|
|
|
config PCI_IOV
|
|
bool "PCI IOV support"
|
|
depends on PCI
|
|
select PCI_ATS
|
|
help
|
|
I/O Virtualization is a PCI feature supported by some devices
|
|
which allows them to create virtual devices which share their
|
|
physical resources.
|
|
|
|
If unsure, say N.
|
|
|
|
config PCI_PRI
|
|
bool "PCI PRI support"
|
|
depends on PCI
|
|
select PCI_ATS
|
|
help
|
|
PRI is the PCI Page Request Interface. It allows PCI devices that are
|
|
behind an IOMMU to recover from page faults.
|
|
|
|
If unsure, say N.
|
|
|
|
config PCI_PASID
|
|
bool "PCI PASID support"
|
|
depends on PCI
|
|
select PCI_ATS
|
|
help
|
|
Process Address Space Identifiers (PASIDs) can be used by PCI devices
|
|
to access more than one IO address space at the same time. To make
|
|
use of this feature an IOMMU is required which also supports PASIDs.
|
|
Select this option if you have such an IOMMU and want to compile the
|
|
driver for it into your kernel.
|
|
|
|
If unsure, say N.
|
|
|
|
config PCI_LABEL
|
|
def_bool y if (DMI || ACPI)
|
|
select NLS
|
|
|
|
source "drivers/pci/host/Kconfig"
|