aboutsummaryrefslogtreecommitdiff
path: root/core/pci.c
diff options
context:
space:
mode:
authorGavin Shan <gwshan@linux.vnet.ibm.com>2015-10-16 16:08:16 +1100
committerStewart Smith <stewart@linux.vnet.ibm.com>2015-10-26 14:12:31 +1100
commit75e9440124d554fedb1816c518d5dad6e832728f (patch)
treef207fbc5c78c28e3d9f6af3c5d58c17a5362722b /core/pci.c
parentb939be22dfab6aedd95ae4142793cbbe634227aa (diff)
downloadskiboot-75e9440124d554fedb1816c518d5dad6e832728f.zip
skiboot-75e9440124d554fedb1816c518d5dad6e832728f.tar.gz
skiboot-75e9440124d554fedb1816c518d5dad6e832728f.tar.bz2
PCI: Trace device node from PCI device
When nvLink and nVida's GPU included in PCI topology, we have the emulated PCI devices to represent nvLinks, which is associated with the real GPU PCI device with help of device-tree. The patch introduces one more field "dn" to "struct pci_device" to make the job easier. The patch also adds one more PHB operations "device_node_fixup", which is to be called when populating PCI device node so that we have chance to link the emulated PCI device and the real GPU device through device tree. Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'core/pci.c')
-rw-r--r--core/pci.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/core/pci.c b/core/pci.c
index a8015cb..22d38b5 100644
--- a/core/pci.c
+++ b/core/pci.c
@@ -1342,7 +1342,7 @@ static void pci_add_one_node(struct phb *phb, struct pci_device *pd,
else
snprintf(name, MAX_NAME - 1, "%s@%x",
cname, (pd->bdfn >> 3) & 0x1f);
- np = dt_new(parent_node, name);
+ pd->dn = np = dt_new(parent_node, name);
/* XXX FIXME: make proper "compatible" properties */
if (pci_has_cap(pd, PCI_CFG_CAP_ID_EXP, false)) {
@@ -1386,9 +1386,12 @@ static void pci_add_one_node(struct phb *phb, struct pci_device *pd,
reg[1] = reg[2] = reg[3] = reg[4] = 0;
dt_add_property(np, "reg", reg, sizeof(reg));
+ /* Device node fixup */
+ if (phb->ops->device_node_fixup)
+ phb->ops->device_node_fixup(phb, pd);
+
/* Print summary info about the device */
pci_print_summary_line(phb, pd, np, rev_class, cname);
-
if (!pd->is_bridge)
return;