#ifdef CONFIG_EEH
 
 /* EEH subsystem flags */
-#define EEH_ENABLED            0x01    /* EEH enabled          */
-#define EEH_FORCE_DISABLED     0x02    /* EEH disabled         */
-#define EEH_PROBE_MODE_DEV     0x04    /* From PCI device      */
-#define EEH_PROBE_MODE_DEVTREE 0x08    /* From device tree     */
-#define EEH_VALID_PE_ZERO      0x10    /* PE#0 is valid        */
-#define EEH_ENABLE_IO_FOR_LOG  0x20    /* Enable IO for log    */
-#define EEH_EARLY_DUMP_LOG     0x40    /* Dump log immediately */
+#define EEH_ENABLED            0x01    /* EEH enabled                       */
+#define EEH_FORCE_DISABLED     0x02    /* EEH disabled                      */
+#define EEH_PROBE_MODE_DEV     0x04    /* From PCI device                   */
+#define EEH_PROBE_MODE_DEVTREE 0x08    /* From device tree                  */
+#define EEH_VALID_PE_ZERO      0x10    /* PE#0 is valid                     */
+#define EEH_ENABLE_IO_FOR_LOG  0x20    /* Enable IO for log                 */
+#define EEH_EARLY_DUMP_LOG     0x40    /* Dump log immediately              */
+#define EEH_POSTPONED_PROBE    0x80    /* Powernv may postpone device probe */
 
 /*
  * Delay for PE reset, all in ms
 
 
        if (eeh_enabled())
                pr_info("EEH: PCI Enhanced I/O Error Handling Enabled\n");
-       else
+       else if (!eeh_has_flag(EEH_POSTPONED_PROBE))
                pr_info("EEH: No capable adapters found\n");
 
        return ret;
 
        eeh_probe_devices();
        eeh_addr_cache_build();
 
+       if (eeh_has_flag(EEH_POSTPONED_PROBE)) {
+               eeh_clear_flag(EEH_POSTPONED_PROBE);
+               if (eeh_enabled())
+                       pr_info("EEH: PCI Enhanced I/O Error Handling Enabled\n");
+               else
+                       pr_info("EEH: No capable adapters found\n");
+       }
+
        /* Register OPAL event notifier */
        eeh_event_irq = opal_event_request(ilog2(OPAL_EVENT_PCI_ERROR));
        if (eeh_event_irq < 0) {
                return NULL;
 
        /* Skip if we haven't probed yet */
-       if (phb->ioda.pe_rmap[config_addr] == IODA_INVALID_PE)
+       if (phb->ioda.pe_rmap[config_addr] == IODA_INVALID_PE) {
+               eeh_add_flag(EEH_POSTPONED_PROBE);
                return NULL;
+       }
 
        /* Initialize eeh device */
        edev->class_code = pdn->class_code;