[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>
This commit is contained in:
parent
88de0be0c7
commit
fd899c0cc7
|
@ -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)
|
||||||
|
|
||||||
#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)
|
||||||
|
|
||||||
#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)
|
||||||
|
|
||||||
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);
|
||||||
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)
|
||||||
|
|
||||||
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 {
|
||||||
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];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue