-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 46871 b: refs/heads/master c: 1199919 h: refs/heads/master i: 46869: e7f0186 46867: b395f23 46863: ee830e6 v: v3
- Loading branch information
Olof Johansson
authored and
Paul Mackerras
committed
Feb 7, 2007
1 parent
2516c26
commit 0cbaf34
Showing
10 changed files
with
229 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: bfed9d32d968b2054a036d419537e9e9909bb343 | ||
refs/heads/master: 1199919b69ff9559a3d3444fb5eb45b7cc48264d |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* Copyright (C) 2006-2007 PA Semi, Inc | ||
* | ||
* Maintained by: Olof Johansson <olof@lixom.net> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
* | ||
*/ | ||
|
||
#include <asm/processor.h> | ||
#include <asm/page.h> | ||
#include <asm/cputable.h> | ||
#include <asm/ppc_asm.h> | ||
#include <asm/asm-offsets.h> | ||
#include <asm/cache.h> | ||
|
||
/* Right now, restore and setup are the same thing */ | ||
_GLOBAL(__restore_cpu_pa6t) | ||
_GLOBAL(__setup_cpu_pa6t) | ||
/* Do nothing if not running in HV mode */ | ||
mfmsr r0 | ||
rldicl. r0,r0,4,63 | ||
beqlr | ||
|
||
mfspr r0,SPRN_HID5 | ||
ori r0,r0,0x30 | ||
mtspr SPRN_HID5,r0 | ||
|
||
mfspr r0,SPRN_LPCR | ||
ori r0,r0,0x7000 | ||
mtspr SPRN_LPCR,r0 | ||
|
||
blr |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
obj-y += setup.o pci.o time.o | ||
obj-y += setup.o pci.o time.o idle.o powersave.o | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
/* | ||
* Copyright (C) 2006-2007 PA Semi, Inc | ||
* | ||
* Maintained by: Olof Johansson <olof@lixom.net> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
* | ||
*/ | ||
|
||
#undef DEBUG | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/string.h> | ||
|
||
#include <asm/machdep.h> | ||
#include <asm/reg.h> | ||
|
||
#include "pasemi.h" | ||
|
||
struct sleep_mode { | ||
char *name; | ||
void (*entry)(void); | ||
}; | ||
|
||
static struct sleep_mode modes[] = { | ||
{ .name = "spin", .entry = &idle_spin }, | ||
{ .name = "doze", .entry = &idle_doze }, | ||
}; | ||
|
||
static int current_mode = 0; | ||
|
||
static int pasemi_system_reset_exception(struct pt_regs *regs) | ||
{ | ||
/* If we were woken up from power savings, we need to return | ||
* to the calling function, since nip is not saved across | ||
* all modes. | ||
*/ | ||
|
||
if (regs->msr & SRR1_WAKEMASK) | ||
regs->nip = regs->link; | ||
|
||
switch (regs->msr & SRR1_WAKEMASK) { | ||
case SRR1_WAKEEE: | ||
do_IRQ(regs); | ||
break; | ||
case SRR1_WAKEDEC: | ||
timer_interrupt(regs); | ||
break; | ||
default: | ||
/* do system reset */ | ||
return 0; | ||
} | ||
/* everything handled */ | ||
regs->msr |= MSR_RI; | ||
return 1; | ||
} | ||
|
||
void __init pasemi_idle_init(void) | ||
{ | ||
ppc_md.system_reset_exception = pasemi_system_reset_exception; | ||
ppc_md.power_save = modes[current_mode].entry; | ||
printk(KERN_INFO "Using PA6T idle loop (%s)\n", modes[current_mode].name); | ||
} | ||
|
||
static int __init idle_param(char *p) | ||
{ | ||
int i; | ||
for (i = 0; i < sizeof(modes)/sizeof(struct sleep_mode); i++) { | ||
if (!strcmp(modes[i].name, p)) { | ||
current_mode = i; | ||
break; | ||
} | ||
} | ||
return 0; | ||
} | ||
|
||
early_param("idle", idle_param); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* | ||
* Copyright (C) 2006-2007 PA Semi, Inc | ||
* | ||
* Maintained by: Olof Johansson <olof@lixom.net> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program; if not, write to the Free Software | ||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
* | ||
*/ | ||
|
||
#include <asm/processor.h> | ||
#include <asm/page.h> | ||
#include <asm/ppc_asm.h> | ||
#include <asm/cputable.h> | ||
#include <asm/cache.h> | ||
#include <asm/thread_info.h> | ||
#include <asm/asm-offsets.h> | ||
|
||
/* Power savings opcodes since not all binutils have them at this time */ | ||
#define DOZE .long 0x4c000324 | ||
#define NAP .long 0x4c000364 | ||
#define SLEEP .long 0x4c0003a4 | ||
#define RVW .long 0x4c0003e4 | ||
|
||
/* Common sequence to do before going to any of the | ||
* powersavings modes. | ||
*/ | ||
|
||
#define PRE_SLEEP_SEQUENCE \ | ||
std r3,8(r1); \ | ||
ptesync ; \ | ||
ld r3,8(r1); \ | ||
1: cmpd r3,r3; \ | ||
bne 1b | ||
|
||
_doze: | ||
PRE_SLEEP_SEQUENCE | ||
DOZE | ||
b . | ||
|
||
|
||
_GLOBAL(idle_spin) | ||
blr | ||
|
||
_GLOBAL(idle_doze) | ||
LOAD_REG_ADDR(r3, _doze) | ||
b sleep_common | ||
|
||
/* Add more modes here later */ | ||
|
||
sleep_common: | ||
mflr r0 | ||
std r0, 16(r1) | ||
stdu r1,-64(r1) | ||
|
||
LOAD_REG_IMMEDIATE(r6,MSR_DR|MSR_IR|MSR_ME|MSR_EE) | ||
mfmsr r4 | ||
andc r5,r4,r6 | ||
mtmsrd r5,0 | ||
|
||
mtctr r3 | ||
bctrl | ||
|
||
mtmsrd r4,0 | ||
|
||
addi r1,r1,64 | ||
ld r0,16(r1) | ||
mtlr r0 | ||
blr | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters