[Skiboot] [PATCH 05/16] core/pci: Fix scan of devices for opencapi slots
Frederic Barrat
fbarrat at linux.ibm.com
Mon Sep 9 22:31:40 AEST 2019
Opencapi devices are found directly under the PHB and the PHB slot
doesn't have an associated PCI device (root complex). So when scanning
a PHB, devices are added directly under the PHB, like it's done at
boot time.
Signed-off-by: Frederic Barrat <fbarrat at linux.ibm.com>
---
core/pci-opal.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/core/pci-opal.c b/core/pci-opal.c
index 6c070030..23aac84e 100644
--- a/core/pci-opal.c
+++ b/core/pci-opal.c
@@ -664,10 +664,17 @@ static void rescan_slot_devices(struct pci_slot *slot)
struct pci_device *pd = slot->pd;
slot->ops.prepare_link_change(slot, true);
- pci_scan_bus(phb, pd->secondary_bus,
- pd->subordinate_bus, &pd->children, pd, true);
- pci_add_device_nodes(phb, &pd->children, pd->dn,
- &phb->lstate, 0);
+ if (phb->phb_type != phb_type_npu_v2_opencapi) {
+ pci_scan_bus(phb, pd->secondary_bus,
+ pd->subordinate_bus, &pd->children, pd, true);
+ pci_add_device_nodes(phb, &pd->children, pd->dn,
+ &phb->lstate, 0);
+ } else {
+ pci_scan_bus(phb, 0, 0xff, &phb->devices, NULL, true);
+ pci_add_device_nodes(phb, &phb->devices,
+ phb->dt_node, &phb->lstate, 0);
+ phb->ops->phb_final_fixup(phb);
+ }
}
static void remove_slot_devices(struct pci_slot *slot)
@@ -675,7 +682,10 @@ static void remove_slot_devices(struct pci_slot *slot)
struct phb *phb = slot->phb;
struct pci_device *pd = slot->pd;
- pci_remove_bus(phb, &pd->children);
+ if (phb->phb_type != phb_type_npu_v2_opencapi)
+ pci_remove_bus(phb, &pd->children);
+ else
+ pci_remove_bus(phb, &phb->devices);
}
static void link_training_timer(struct timer *t, void *data,
--
2.21.0
More information about the Skiboot
mailing list