[PATCH] ppc64: Be consistent about printing which idle loop we're using
[linux-2.6.git] / arch / ppc64 / kernel / setup.c
index 8e439a8..d1b33f0 100644 (file)
@@ -96,7 +96,6 @@ extern void udbg_init_maple_realmode(void);
 extern unsigned long klimit;
 
 extern void mm_init_ppc64(void);
-extern int  idle_setup(void);
 extern void stab_initialize(unsigned long stab);
 extern void htab_initialize(void);
 extern void early_init_devtree(void *flat_dt);
@@ -344,6 +343,7 @@ static void __init setup_cpu_maps(void)
 extern struct machdep_calls pSeries_md;
 extern struct machdep_calls pmac_md;
 extern struct machdep_calls maple_md;
+extern struct machdep_calls bpa_md;
 
 /* Ultimately, stuff them in an elf section like initcalls... */
 static struct machdep_calls __initdata *machines[] = {
@@ -356,6 +356,9 @@ static struct machdep_calls __initdata *machines[] = {
 #ifdef CONFIG_PPC_MAPLE
        &maple_md,
 #endif /* CONFIG_PPC_MAPLE */
+#ifdef CONFIG_PPC_BPA
+       &bpa_md,
+#endif
        NULL
 };
 
@@ -673,37 +676,52 @@ void __init setup_system(void)
        DBG(" <- setup_system()\n");
 }
 
-
-void machine_restart(char *cmd)
+/* also used by kexec */
+void machine_shutdown(void)
 {
        if (ppc_md.nvram_sync)
                ppc_md.nvram_sync();
-       ppc_md.restart(cmd);
 }
 
+void machine_restart(char *cmd)
+{
+       machine_shutdown();
+       ppc_md.restart(cmd);
+#ifdef CONFIG_SMP
+       smp_send_stop();
+#endif
+       printk(KERN_EMERG "System Halted, OK to turn off power\n");
+       local_irq_disable();
+       while (1) ;
+}
 EXPORT_SYMBOL(machine_restart);
-  
+
 void machine_power_off(void)
 {
-       if (ppc_md.nvram_sync)
-               ppc_md.nvram_sync();
+       machine_shutdown();
        ppc_md.power_off();
+#ifdef CONFIG_SMP
+       smp_send_stop();
+#endif
+       printk(KERN_EMERG "System Halted, OK to turn off power\n");
+       local_irq_disable();
+       while (1) ;
 }
-
 EXPORT_SYMBOL(machine_power_off);
-  
+
 void machine_halt(void)
 {
-       if (ppc_md.nvram_sync)
-               ppc_md.nvram_sync();
+       machine_shutdown();
        ppc_md.halt();
+#ifdef CONFIG_SMP
+       smp_send_stop();
+#endif
+       printk(KERN_EMERG "System Halted, OK to turn off power\n");
+       local_irq_disable();
+       while (1) ;
 }
-
 EXPORT_SYMBOL(machine_halt);
 
-unsigned long ppc_proc_freq;
-unsigned long ppc_tb_freq;
-
 static int ppc64_panic_event(struct notifier_block *this,
                              unsigned long event, void *ptr)
 {
@@ -1055,14 +1073,18 @@ void __init setup_arch(char **cmdline_p)
 
        /* set up the bootmem stuff with available memory */
        do_init_bootmem();
+       sparse_init();
 
        /* initialize the syscall map in systemcfg */
        setup_syscall_map();
 
        ppc_md.setup_arch();
 
-       /* Select the correct idle loop for the platform. */
-       idle_setup();
+       /* Use the default idle loop if the platform hasn't provided one. */
+       if (NULL == ppc_md.idle_loop) {
+               ppc_md.idle_loop = default_idle;
+               printk(KERN_INFO "Using default idle loop\n");
+       }
 
        paging_init();
        ppc64_boot_msg(0x15, "Setup Done");
@@ -1079,11 +1101,11 @@ void __init setup_arch(char **cmdline_p)
 static void ppc64_do_msg(unsigned int src, const char *msg)
 {
        if (ppc_md.progress) {
-               char buf[32];
+               char buf[128];
 
-               sprintf(buf, "%08x        \n", src);
+               sprintf(buf, "%08X\n", src);
                ppc_md.progress(buf, 0);
-               sprintf(buf, "%-16s", msg);
+               snprintf(buf, 128, "%s", msg);
                ppc_md.progress(buf, 0);
        }
 }
@@ -1117,7 +1139,7 @@ void ppc64_dump_msg(unsigned int src, const char *msg)
 }
 
 /* This should only be called on processor 0 during calibrate decr */
-void setup_default_decr(void)
+void __init setup_default_decr(void)
 {
        struct paca_struct *lpaca = get_paca();