diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 90ad161616043086ef5efc71a9d1fa81338bfae7..ffa7f962ac85647625f23f68f5d4c87e150ec8b5 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -155,23 +155,19 @@ EXPORT_SYMBOL(get_baudrate);
 #if defined(CONFIG_FSL_SOC_BOOKE) || defined(CONFIG_PPC_86xx)
 static __be32 __iomem *rstcr;
 
-static int fsl_rstcr_restart(struct notifier_block *this,
-			     unsigned long mode, void *cmd)
+static void fsl_rstcr_restart(struct restart_data *data)
 {
 	local_irq_disable();
 	/* set reset control register */
 	out_be32(rstcr, 0x2);	/* HRESET_REQ */
-
-	return NOTIFY_DONE;
 }
 
 static int __init setup_rstcr(void)
 {
 	struct device_node *np;
 
-	static struct notifier_block restart_handler = {
-		.notifier_call = fsl_rstcr_restart,
-		.priority = 128,
+	static struct sys_off_handler restart_handler = {
+		.restart_cb = fsl_rstcr_restart,
 	};
 
 	for_each_node_by_name(np, "global-utilities") {
@@ -181,7 +177,7 @@ static int __init setup_rstcr(void)
 				printk (KERN_ERR "Error: reset control "
 						"register not mapped!\n");
 			} else {
-				register_restart_handler(&restart_handler);
+				register_sys_off_handler(&restart_handler);
 			}
 			break;
 		}