summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2019-04-15 13:25:15 +1000
committerStewart Smith <stewart@linux.ibm.com>2019-04-17 09:26:40 +1000
commitff960a77a192efd90d1be370c67c85cb82ce0e2e (patch)
treed4b4c1c3e928ffc9278b01570927cc378ae2e7ed
parentff79070d1c4cdc38f2ecb42e45b8322cb1efb819 (diff)
downloadblackbird-skiboot-ff960a77a192efd90d1be370c67c85cb82ce0e2e.tar.gz
blackbird-skiboot-ff960a77a192efd90d1be370c67c85cb82ce0e2e.zip
core/pci: Prefer ibm, slot-label when finding loc codes
On OpenPower systems the ibm,slot-label property is used to identify slots rather than the more verbose ibm,slot-location-code. The slot-label lookup is currently broken since it assumes that the ibm,slot-label is in the PCI device node rather than in the node of the device that provides the slot (e.g. root port or switch downstream port). This patch corrects the lookup code to search the parent node (and possibly it's grandparents), similar to how we search for ibm,slot-location-code. Fixes: 1c3baae4f2b3 ("hdata/iohub: Look for IOVPD on P9") Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r--core/pci.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/core/pci.c b/core/pci.c
index 57154b07..ee563c2f 100644
--- a/core/pci.c
+++ b/core/pci.c
@@ -1423,15 +1423,20 @@ static void pci_add_loc_code(struct dt_node *np, struct pci_device *pd)
uint8_t class, sub;
uint8_t pos, len;
- /* If there is a label assigned to the function, use it on openpower machines */
- if (pd->slot)
- blcode = dt_prop_get_def(np, "ibm,slot-label", NULL);
+ while (p) {
+ /* if we have a slot label (i.e. openpower) use that */
+ blcode = dt_prop_get_def(p, "ibm,slot-label", NULL);
+ if (blcode)
+ break;
- /* Look for a parent with a slot-location-code */
- while (!blcode && p) {
+ /* otherwise use the fully qualified location code */
blcode = dt_prop_get_def(p, "ibm,slot-location-code", NULL);
+ if (blcode)
+ break;
+
p = p->parent;
}
+
if (!blcode)
return;
OpenPOWER on IntegriCloud