diff options
author | Oliver O'Halloran <oohall@gmail.com> | 2019-04-15 13:25:15 +1000 |
---|---|---|
committer | Stewart Smith <stewart@linux.ibm.com> | 2019-04-17 09:26:40 +1000 |
commit | ff960a77a192efd90d1be370c67c85cb82ce0e2e (patch) | |
tree | d4b4c1c3e928ffc9278b01570927cc378ae2e7ed | |
parent | ff79070d1c4cdc38f2ecb42e45b8322cb1efb819 (diff) | |
download | blackbird-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.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -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; |