aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2005-07-07 20:56:28 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2005-07-07 21:23:40 -0400
commitfd899c0cc725387992ccfc83fb6f70505c36cbeb (patch)
tree0de5d3960c7e7247638c962d7913acec1ce2e9fe
parent88de0be0c7335650326a1236bf6ca1ed265c0a1c (diff)
[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: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--arch/ppc64/kernel/idle.c8
-rw-r--r--arch/ppc64/kernel/setup.c6
-rw-r--r--include/asm-ppc64/machdep.h5
3 files changed, 13 insertions, 6 deletions
diff --git a/arch/ppc64/kernel/idle.c b/arch/ppc64/kernel/idle.c
index 08952c7e6216..e270055e73e2 100644
--- a/arch/ppc64/kernel/idle.c
+++ b/arch/ppc64/kernel/idle.c
@@ -33,6 +33,7 @@
33#include <asm/iSeries/ItLpQueue.h> 33#include <asm/iSeries/ItLpQueue.h>
34#include <asm/plpar_wrappers.h> 34#include <asm/plpar_wrappers.h>
35#include <asm/systemcfg.h> 35#include <asm/systemcfg.h>
36#include <asm/machdep.h>
36 37
37extern void power4_idle(void); 38extern void power4_idle(void);
38 39
@@ -122,7 +123,7 @@ static int iSeries_idle(void)
122 123
123#else 124#else
124 125
125static int default_idle(void) 126int default_idle(void)
126{ 127{
127 long oldval; 128 long oldval;
128 unsigned int cpu = smp_processor_id(); 129 unsigned int cpu = smp_processor_id();
@@ -288,7 +289,7 @@ static int shared_idle(void)
288 289
289#endif /* CONFIG_PPC_PSERIES */ 290#endif /* CONFIG_PPC_PSERIES */
290 291
291static int native_idle(void) 292int native_idle(void)
292{ 293{
293 while(1) { 294 while(1) {
294 /* check CPU type here */ 295 /* check CPU type here */
@@ -308,7 +309,8 @@ static int native_idle(void)
308 309
309void cpu_idle(void) 310void cpu_idle(void)
310{ 311{
311 idle_loop(); 312 BUG_ON(NULL == ppc_md.idle_loop);
313 ppc_md.idle_loop();
312} 314}
313 315
314int powersave_nap; 316int powersave_nap;
diff --git a/arch/ppc64/kernel/setup.c b/arch/ppc64/kernel/setup.c
index d5e4866e9ac2..a278998ecb44 100644
--- a/arch/ppc64/kernel/setup.c
+++ b/arch/ppc64/kernel/setup.c
@@ -96,7 +96,6 @@ extern void udbg_init_maple_realmode(void);
96extern unsigned long klimit; 96extern unsigned long klimit;
97 97
98extern void mm_init_ppc64(void); 98extern void mm_init_ppc64(void);
99extern int idle_setup(void);
100extern void stab_initialize(unsigned long stab); 99extern void stab_initialize(unsigned long stab);
101extern void htab_initialize(void); 100extern void htab_initialize(void);
102extern void early_init_devtree(void *flat_dt); 101extern void early_init_devtree(void *flat_dt);
@@ -1081,8 +1080,9 @@ void __init setup_arch(char **cmdline_p)
1081 1080
1082 ppc_md.setup_arch(); 1081 ppc_md.setup_arch();
1083 1082
1084 /* Select the correct idle loop for the platform. */ 1083 /* Use the default idle loop if the platform hasn't provided one. */
1085 idle_setup(); 1084 if (NULL == ppc_md.idle_loop)
1085 ppc_md.idle_loop = default_idle;
1086 1086
1087 paging_init(); 1087 paging_init();
1088 ppc64_boot_msg(0x15, "Setup Done"); 1088 ppc64_boot_msg(0x15, "Setup Done");
diff --git a/include/asm-ppc64/machdep.h b/include/asm-ppc64/machdep.h
index 9cdad3ed1526..1e6ad4824132 100644
--- a/include/asm-ppc64/machdep.h
+++ b/include/asm-ppc64/machdep.h
@@ -140,8 +140,13 @@ struct machdep_calls {
140 unsigned long size, 140 unsigned long size,
141 pgprot_t vma_prot); 141 pgprot_t vma_prot);
142 142
143 /* Idle loop for this platform, leave empty for default idle loop */
144 int (*idle_loop)(void);
143}; 145};
144 146
147extern int default_idle(void);
148extern int native_idle(void);
149
145extern struct machdep_calls ppc_md; 150extern struct machdep_calls ppc_md;
146extern char cmd_line[COMMAND_LINE_SIZE]; 151extern char cmd_line[COMMAND_LINE_SIZE];
147 152