|
@@ -758,6 +758,14 @@ static void eeh_add_device_early(struct device_node *dn)
|
|
|
{
|
|
|
struct pci_controller *phb;
|
|
|
|
|
|
+ /*
|
|
|
+ * If we're doing EEH probe based on PCI device, we
|
|
|
+ * would delay the probe until late stage because
|
|
|
+ * the PCI device isn't available this moment.
|
|
|
+ */
|
|
|
+ if (!eeh_probe_mode_devtree())
|
|
|
+ return;
|
|
|
+
|
|
|
if (!of_node_to_eeh_dev(dn))
|
|
|
return;
|
|
|
phb = of_node_to_eeh_dev(dn)->phb;
|
|
@@ -766,7 +774,6 @@ static void eeh_add_device_early(struct device_node *dn)
|
|
|
if (NULL == phb || 0 == phb->buid)
|
|
|
return;
|
|
|
|
|
|
- /* FIXME: hotplug support on POWERNV */
|
|
|
eeh_ops->of_probe(dn, NULL);
|
|
|
}
|
|
|
|
|
@@ -817,6 +824,13 @@ static void eeh_add_device_late(struct pci_dev *dev)
|
|
|
edev->pdev = dev;
|
|
|
dev->dev.archdata.edev = edev;
|
|
|
|
|
|
+ /*
|
|
|
+ * We have to do the EEH probe here because the PCI device
|
|
|
+ * hasn't been created yet in the early stage.
|
|
|
+ */
|
|
|
+ if (eeh_probe_mode_dev())
|
|
|
+ eeh_ops->dev_probe(dev, NULL);
|
|
|
+
|
|
|
eeh_addr_cache_insert_dev(dev);
|
|
|
}
|
|
|
|