diff options
Diffstat (limited to 'arch/powerpc/platforms/pseries/mobility.c')
| -rw-r--r-- | arch/powerpc/platforms/pseries/mobility.c | 26 | 
1 files changed, 10 insertions, 16 deletions
diff --git a/arch/powerpc/platforms/pseries/mobility.c b/arch/powerpc/platforms/pseries/mobility.c index cde4e0a095a..bde7ebad394 100644 --- a/arch/powerpc/platforms/pseries/mobility.c +++ b/arch/powerpc/platforms/pseries/mobility.c @@ -290,13 +290,6 @@ void post_mobility_fixup(void)  	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 " @@ -304,16 +297,17 @@ void post_mobility_fixup(void)  		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;  }  | 
