|
@@ -113,7 +113,8 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
|
|
|
{
|
|
|
struct device_node *dn, *pdn;
|
|
|
struct pci_bus *bus;
|
|
|
- const __be32 *pcie_link_speed_stats;
|
|
|
+ u32 pcie_link_speed_stats[2];
|
|
|
+ int rc;
|
|
|
|
|
|
bus = bridge->bus;
|
|
|
|
|
@@ -122,20 +123,21 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
|
|
|
return 0;
|
|
|
|
|
|
for (pdn = dn; pdn != NULL; pdn = of_get_next_parent(pdn)) {
|
|
|
- pcie_link_speed_stats = of_get_property(pdn,
|
|
|
- "ibm,pcie-link-speed-stats", NULL);
|
|
|
- if (pcie_link_speed_stats)
|
|
|
+ rc = of_property_read_u32_array(pdn,
|
|
|
+ "ibm,pcie-link-speed-stats",
|
|
|
+ &pcie_link_speed_stats[0], 2);
|
|
|
+ if (!rc)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
of_node_put(pdn);
|
|
|
|
|
|
- if (!pcie_link_speed_stats) {
|
|
|
+ if (rc) {
|
|
|
pr_err("no ibm,pcie-link-speed-stats property\n");
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- switch (be32_to_cpup(pcie_link_speed_stats)) {
|
|
|
+ switch (pcie_link_speed_stats[0]) {
|
|
|
case 0x01:
|
|
|
bus->max_bus_speed = PCIE_SPEED_2_5GT;
|
|
|
break;
|
|
@@ -147,7 +149,7 @@ int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- switch (be32_to_cpup(pcie_link_speed_stats)) {
|
|
|
+ switch (pcie_link_speed_stats[1]) {
|
|
|
case 0x01:
|
|
|
bus->cur_bus_speed = PCIE_SPEED_2_5GT;
|
|
|
break;
|