summaryrefslogtreecommitdiffstats
path: root/drivers/pci/pci-bridge-emul.c
diff options
context:
space:
mode:
authorPali Rohár <pali@kernel.org>2021-11-24 16:59:43 +0100
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>2021-12-06 14:12:57 +0000
commit1f1050c5e1fefb34ac90a506b43e9da803b5f8f7 (patch)
tree5b1c1a455a14b35e766e37b34acbc25ee045b728 /drivers/pci/pci-bridge-emul.c
parent12998087d9f48b66965b97412069c7826502cd7e (diff)
downloadlinux-stable-1f1050c5e1fefb34ac90a506b43e9da803b5f8f7.tar.gz
linux-stable-1f1050c5e1fefb34ac90a506b43e9da803b5f8f7.tar.bz2
linux-stable-1f1050c5e1fefb34ac90a506b43e9da803b5f8f7.zip
PCI: pci-bridge-emul: Correctly set PCIe capabilities
Older mvebu hardware provides PCIe Capability structure only in version 1. New mvebu and aardvark hardware provides it in version 2. So do not force version to 2 in pci_bridge_emul_init() and rather allow drivers to set correct version. Drivers need to set version in pcie_conf.cap field without overwriting PCI_CAP_LIST_ID register. Both drivers (mvebu and aardvark) do not provide slot support yet, so do not set PCI_EXP_FLAGS_SLOT flag. Link: https://lore.kernel.org/r/20211124155944.1290-6-pali@kernel.org Fixes: 23a5fba4d941 ("PCI: Introduce PCI bridge emulated config space common logic") Signed-off-by: Pali Rohár <pali@kernel.org> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/pci/pci-bridge-emul.c')
-rw-r--r--drivers/pci/pci-bridge-emul.c5
1 files changed, 1 insertions, 4 deletions
diff --git a/drivers/pci/pci-bridge-emul.c b/drivers/pci/pci-bridge-emul.c
index 2c7e04fb2685..867159562d07 100644
--- a/drivers/pci/pci-bridge-emul.c
+++ b/drivers/pci/pci-bridge-emul.c
@@ -297,10 +297,7 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge,
if (bridge->has_pcie) {
bridge->conf.capabilities_pointer = PCI_CAP_PCIE_START;
bridge->pcie_conf.cap_id = PCI_CAP_ID_EXP;
- /* Set PCIe v2, root port, slot support */
- bridge->pcie_conf.cap =
- cpu_to_le16(PCI_EXP_TYPE_ROOT_PORT << 4 | 2 |
- PCI_EXP_FLAGS_SLOT);
+ bridge->pcie_conf.cap |= cpu_to_le16(PCI_EXP_TYPE_ROOT_PORT << 4);
bridge->pcie_cap_regs_behavior =
kmemdup(pcie_cap_regs_behavior,
sizeof(pcie_cap_regs_behavior),