Commit fd899c0c authored by Michael Ellerman's avatar Michael Ellerman Committed by Linus Torvalds

[PATCH] ppc64: Make idle_loop a ppc_md function

This patch adds an idle member to the ppc_md structure and calls it from
cpu_idle().  If a platform leaves ppc_md.idle as null it will get the default
idle loop default_idle().
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 88de0be0
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <asm/iSeries/ItLpQueue.h> #include <asm/iSeries/ItLpQueue.h>
#include <asm/plpar_wrappers.h> #include <asm/plpar_wrappers.h>
#include <asm/systemcfg.h> #include <asm/systemcfg.h>
#include <asm/machdep.h>
extern void power4_idle(void); extern void power4_idle(void);
...@@ -122,7 +123,7 @@ static int iSeries_idle(void) ...@@ -122,7 +123,7 @@ static int iSeries_idle(void)
#else #else
static int default_idle(void) int default_idle(void)
{ {
long oldval; long oldval;
unsigned int cpu = smp_processor_id(); unsigned int cpu = smp_processor_id();
...@@ -288,7 +289,7 @@ static int shared_idle(void) ...@@ -288,7 +289,7 @@ static int shared_idle(void)
#endif /* CONFIG_PPC_PSERIES */ #endif /* CONFIG_PPC_PSERIES */
static int native_idle(void) int native_idle(void)
{ {
while(1) { while(1) {
/* check CPU type here */ /* check CPU type here */
...@@ -308,7 +309,8 @@ static int native_idle(void) ...@@ -308,7 +309,8 @@ static int native_idle(void)
void cpu_idle(void) void cpu_idle(void)
{ {
idle_loop(); BUG_ON(NULL == ppc_md.idle_loop);
ppc_md.idle_loop();
} }
int powersave_nap; int powersave_nap;
......
...@@ -96,7 +96,6 @@ extern void udbg_init_maple_realmode(void); ...@@ -96,7 +96,6 @@ extern void udbg_init_maple_realmode(void);
extern unsigned long klimit; extern unsigned long klimit;
extern void mm_init_ppc64(void); extern void mm_init_ppc64(void);
extern int idle_setup(void);
extern void stab_initialize(unsigned long stab); extern void stab_initialize(unsigned long stab);
extern void htab_initialize(void); extern void htab_initialize(void);
extern void early_init_devtree(void *flat_dt); extern void early_init_devtree(void *flat_dt);
...@@ -1081,8 +1080,9 @@ void __init setup_arch(char **cmdline_p) ...@@ -1081,8 +1080,9 @@ void __init setup_arch(char **cmdline_p)
ppc_md.setup_arch(); ppc_md.setup_arch();
/* Select the correct idle loop for the platform. */ /* Use the default idle loop if the platform hasn't provided one. */
idle_setup(); if (NULL == ppc_md.idle_loop)
ppc_md.idle_loop = default_idle;
paging_init(); paging_init();
ppc64_boot_msg(0x15, "Setup Done"); ppc64_boot_msg(0x15, "Setup Done");
......
...@@ -140,8 +140,13 @@ struct machdep_calls { ...@@ -140,8 +140,13 @@ struct machdep_calls {
unsigned long size, unsigned long size,
pgprot_t vma_prot); 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 struct machdep_calls ppc_md;
extern char cmd_line[COMMAND_LINE_SIZE]; extern char cmd_line[COMMAND_LINE_SIZE];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment