#include <asm/iSeries/ItLpQueue.h>
 #include <asm/plpar_wrappers.h>
 #include <asm/systemcfg.h>
+#include <asm/machdep.h>
 
 extern void power4_idle(void);
 
 
 #else
 
-static int default_idle(void)
+int default_idle(void)
 {
        long oldval;
        unsigned int cpu = smp_processor_id();
 
 #endif /* CONFIG_PPC_PSERIES */
 
-static int native_idle(void)
+int native_idle(void)
 {
        while(1) {
                /* check CPU type here */
 
 void cpu_idle(void)
 {
-       idle_loop();
+       BUG_ON(NULL == ppc_md.idle_loop);
+       ppc_md.idle_loop();
 }
 
 int powersave_nap;
 
 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);
 
        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;
 
        paging_init();
        ppc64_boot_msg(0x15, "Setup Done");
 
                                                unsigned long size,
                                                pgprot_t vma_prot);
 
+       /* Idle loop for this platform, leave empty for default idle loop */
+       int             (*idle_loop)(void);
 };
 
+extern int default_idle(void);
+extern int native_idle(void);
+
 extern struct machdep_calls ppc_md;
 extern char cmd_line[COMMAND_LINE_SIZE];