int rc;
        int activate_fw_token;
 
-       rc = pseries_devicetree_update(MIGRATION_SCOPE);
-       if (rc) {
-               printk(KERN_ERR "Initial post-mobility device tree update "
-                      "failed: %d\n", rc);
-               return;
-       }
-
        activate_fw_token = rtas_token("ibm,activate-firmware");
        if (activate_fw_token == RTAS_UNKNOWN_SERVICE) {
                printk(KERN_ERR "Could not make post-mobility "
                return;
        }
 
-       rc = rtas_call(activate_fw_token, 0, 1, NULL);
-       if (!rc) {
-               rc = pseries_devicetree_update(MIGRATION_SCOPE);
-               if (rc)
-                       printk(KERN_ERR "Secondary post-mobility device tree "
-                              "update failed: %d\n", rc);
-       } else {
+       do {
+               rc = rtas_call(activate_fw_token, 0, 1, NULL);
+       } while (rtas_busy_delay(rc));
+
+       if (rc)
                printk(KERN_ERR "Post-mobility activate-fw failed: %d\n", rc);
-               return;
-       }
+
+       rc = pseries_devicetree_update(MIGRATION_SCOPE);
+       if (rc)
+               printk(KERN_ERR "Post-mobility device tree update "
+                       "failed: %d\n", rc);
 
        return;
 }