Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/powerpc/platforms/44x/idle.c
26481 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Copyright 2008 IBM Corp.
4
*
5
* Based on arch/powerpc/platforms/pasemi/idle.c:
6
* Copyright (C) 2006-2007 PA Semi, Inc
7
*
8
* Added by: Jerone Young <[email protected]>
9
*/
10
11
#include <linux/of.h>
12
#include <linux/kernel.h>
13
#include <asm/machdep.h>
14
15
static int mode_spin;
16
17
static void ppc44x_idle(void)
18
{
19
unsigned long msr_save;
20
21
msr_save = mfmsr();
22
/* set wait state MSR */
23
mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE);
24
isync();
25
/* return to initial state */
26
mtmsr(msr_save);
27
isync();
28
}
29
30
static int __init ppc44x_idle_init(void)
31
{
32
if (!mode_spin) {
33
/* If we are not setting spin mode
34
then we set to wait mode */
35
ppc_md.power_save = &ppc44x_idle;
36
}
37
38
return 0;
39
}
40
41
arch_initcall(ppc44x_idle_init);
42
43
static int __init idle_param(char *p)
44
{
45
46
if (!strcmp("spin", p)) {
47
mode_spin = 1;
48
ppc_md.power_save = NULL;
49
}
50
51
return 0;
52
}
53
54
early_param("idle", idle_param);
55
56