Skip to content

Commit

Permalink
core/pci: Ignore PCI slot capability on root port
Browse files Browse the repository at this point in the history
We are creating PCI slot on root port, where the PCI slot isn't
supported from hardware. For this case, we shouldn't read the PCI
slot capability from hardware. When bogus data returned from the
hardware, we will attempt to the PCI slot's power state or enable
surprise hotplug functionality. All of them can't be accomplished
without hardware support.

This leaves the PCI slot's capability list 0 if PCICAP_EXP_CAP_SLOT
isn't set in hardware (pcie_cap + 0x2). Otherwise, the PCI slot's
capability list is retrieved from hardware (pcie_cap + 0x14).

Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
  • Loading branch information
Gavin Shan authored and stewartsmith committed Mar 31, 2017
1 parent 03f9702 commit 07f17c3
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions core/pcie-slot.c
Expand Up @@ -461,8 +461,13 @@ struct pci_slot *pcie_slot_create(struct phb *phb, struct pci_device *pd)
&slot->pcie_cap);
pci_cfg_read32(phb, pd->bdfn, ecap + PCICAP_EXP_LCAP,
&slot->link_cap);
pci_cfg_read32(phb, pd->bdfn, ecap + PCICAP_EXP_SLOTCAP,
&slot->slot_cap);

/* Leave PCI slot capability blank if PCI slot isn't supported */
if (slot->pcie_cap & PCICAP_EXP_CAP_SLOT)
pci_cfg_read32(phb, pd->bdfn, ecap + PCICAP_EXP_SLOTCAP,
&slot->slot_cap);
else
slot->slot_cap = 0;

if (slot->slot_cap & PCICAP_EXP_SLOTCAP_HPLUG_CAP)
slot->pluggable = 1;
Expand Down

0 comments on commit 07f17c3

Please sign in to comment.