void __noreturn (*restart)(char *cmd);
        void __noreturn (*halt)(void);
-       void            (*panic)(char *str);
        void            (*cpu_die)(void);
 
        long            (*time_init)(void); /* Optional, may be NULL */
 
 
 void check_for_initrd(void);
 void initmem_init(void);
-void setup_panic(void);
 #define ARCH_PANIC_TIMEOUT 180
 
 #ifdef CONFIG_PPC_PSERIES
 
        return;
 }
 
+static int fadump_panic_event(struct notifier_block *this,
+                             unsigned long event, void *ptr)
+{
+       /*
+        * If firmware-assisted dump has been registered then trigger
+        * firmware-assisted dump and let firmware handle everything
+        * else. If this returns, then fadump was not registered, so
+        * go through the rest of the panic path.
+        */
+       crash_fadump(NULL, ptr);
+
+       return NOTIFY_DONE;
+}
+
+static struct notifier_block fadump_panic_block = {
+       .notifier_call = fadump_panic_event,
+       .priority = INT_MIN /* may not return; must be done last */
+};
+
 /*
  * Prepare for firmware-assisted dump.
  */
                init_fadump_mem_struct(&fdm, fw_dump.reserve_dump_area_start);
        fadump_init_files();
 
+       atomic_notifier_chain_register(&panic_notifier_list,
+                                       &fadump_panic_block);
+
        return 1;
 }
 subsys_initcall(setup_fadump);
 
 }
 EXPORT_SYMBOL(check_legacy_ioport);
 
-static int ppc_panic_event(struct notifier_block *this,
-                             unsigned long event, void *ptr)
-{
-       /*
-        * If firmware-assisted dump has been registered then trigger
-        * firmware-assisted dump and let firmware handle everything else.
-        */
-       crash_fadump(NULL, ptr);
-       ppc_md.panic(ptr);  /* May not return */
-       return NOTIFY_DONE;
-}
-
-static struct notifier_block ppc_panic_block = {
-       .notifier_call = ppc_panic_event,
-       .priority = INT_MIN /* may not return; must be done last */
-};
-
-void __init setup_panic(void)
-{
-       if (!ppc_md.panic)
-               return;
-       atomic_notifier_chain_register(&panic_notifier_list, &ppc_panic_block);
-}
-
 #ifdef CONFIG_CHECK_CACHE_COHERENCY
 /*
  * For platforms that have configurable cache-coherency.  This function
        /* Probe the machine type, establish ppc_md. */
        probe_machine();
 
-       /* Setup panic notifier if requested by the platform. */
-       setup_panic();
-
        /*
         * Configure ppc_md.power_save (ppc32 only, 64-bit machines do
         * it from their respective probe() function.
 
        ps3_sys_manager_halt(); /* never returns */
 }
 
-static void ps3_panic(char *str)
-{
-       DBG("%s:%d %s\n", __func__, __LINE__, str);
-
-       smp_send_stop();
-       printk("\n");
-       printk("   System does not reboot automatically.\n");
-       printk("   Please press POWER button.\n");
-       printk("\n");
-
-       while(1)
-               lv1_pause(1);
-}
-
 #if defined(CONFIG_FB_PS3) || defined(CONFIG_FB_PS3_MODULE) || \
     defined(CONFIG_PS3_FLASH) || defined(CONFIG_PS3_FLASH_MODULE)
 static void __init prealloc(struct ps3_prealloc *p)
        .probe                          = ps3_probe,
        .setup_arch                     = ps3_setup_arch,
        .init_IRQ                       = ps3_init_IRQ,
-       .panic                          = ps3_panic,
        .get_boot_time                  = ps3_get_boot_time,
        .set_dabr                       = ps3_set_dabr,
        .calibrate_decr                 = ps3_calibrate_decr,
 
        .pcibios_fixup          = pSeries_final_fixup,
        .restart                = rtas_restart,
        .halt                   = rtas_halt,
-       .panic                  = rtas_os_term,
        .get_boot_time          = rtas_get_boot_time,
        .get_rtc_time           = rtas_get_rtc_time,
        .set_rtc_time           = rtas_set_rtc_time,