|
@@ -883,32 +883,29 @@ void eeh_pe_restore_bars(struct eeh_pe *pe)
|
|
|
const char *eeh_pe_loc_get(struct eeh_pe *pe)
|
|
|
{
|
|
|
struct pci_bus *bus = eeh_pe_bus_get(pe);
|
|
|
- struct device_node *dn = pci_bus_to_OF_node(bus);
|
|
|
+ struct device_node *dn;
|
|
|
const char *loc = NULL;
|
|
|
|
|
|
- if (!dn)
|
|
|
- goto out;
|
|
|
+ while (bus) {
|
|
|
+ dn = pci_bus_to_OF_node(bus);
|
|
|
+ if (!dn) {
|
|
|
+ bus = bus->parent;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- /* PHB PE or root PE ? */
|
|
|
- if (pci_is_root_bus(bus)) {
|
|
|
- loc = of_get_property(dn, "ibm,loc-code", NULL);
|
|
|
- if (!loc)
|
|
|
+ if (pci_is_root_bus(bus))
|
|
|
loc = of_get_property(dn, "ibm,io-base-loc-code", NULL);
|
|
|
+ else
|
|
|
+ loc = of_get_property(dn, "ibm,slot-location-code",
|
|
|
+ NULL);
|
|
|
+
|
|
|
if (loc)
|
|
|
- goto out;
|
|
|
+ return loc;
|
|
|
|
|
|
- /* Check the root port */
|
|
|
- dn = dn->child;
|
|
|
- if (!dn)
|
|
|
- goto out;
|
|
|
+ bus = bus->parent;
|
|
|
}
|
|
|
|
|
|
- loc = of_get_property(dn, "ibm,loc-code", NULL);
|
|
|
- if (!loc)
|
|
|
- loc = of_get_property(dn, "ibm,slot-location-code", NULL);
|
|
|
-
|
|
|
-out:
|
|
|
- return loc ? loc : "N/A";
|
|
|
+ return "N/A";
|
|
|
}
|
|
|
|
|
|
/**
|