int rpaphp_register_slot(struct slot *slot)
 {
        struct hotplug_slot *php_slot = slot->hotplug_slot;
+       struct device_node *child;
+       u32 my_index;
        int retval;
-       int slotno;
+       int slotno = -1;
 
        dbg("%s registering slot:path[%s] index[%x], name[%s] pdomain[%x] type[%d]\n",
                __func__, slot->dn->full_name, slot->index, slot->name,
                return -EAGAIN;
        }
 
-       if (slot->dn->child)
-               slotno = PCI_SLOT(PCI_DN(slot->dn->child)->devfn);
-       else
-               slotno = -1;
+       for_each_child_of_node(slot->dn, child) {
+               retval = of_property_read_u32(child, "ibm,my-drc-index", &my_index);
+               if (my_index == slot->index) {
+                       slotno = PCI_SLOT(PCI_DN(child)->devfn);
+                       of_node_put(child);
+                       break;
+               }
+       }
+
        retval = pci_hp_register(php_slot, slot->bus, slotno, slot->name);
        if (retval) {
                err("pci_hp_register failed with error %d\n", retval);