|
@@ -39,6 +39,10 @@
|
|
* Pass requested state in r3:
|
|
* Pass requested state in r3:
|
|
* 0 - nap
|
|
* 0 - nap
|
|
* 1 - sleep
|
|
* 1 - sleep
|
|
|
|
+ *
|
|
|
|
+ * To check IRQ_HAPPENED in r4
|
|
|
|
+ * 0 - don't check
|
|
|
|
+ * 1 - check
|
|
*/
|
|
*/
|
|
_GLOBAL(power7_powersave_common)
|
|
_GLOBAL(power7_powersave_common)
|
|
/* Use r3 to pass state nap/sleep/winkle */
|
|
/* Use r3 to pass state nap/sleep/winkle */
|
|
@@ -71,6 +75,8 @@ _GLOBAL(power7_powersave_common)
|
|
lbz r0,PACAIRQHAPPENED(r13)
|
|
lbz r0,PACAIRQHAPPENED(r13)
|
|
cmpwi cr0,r0,0
|
|
cmpwi cr0,r0,0
|
|
beq 1f
|
|
beq 1f
|
|
|
|
+ cmpwi cr0,r4,0
|
|
|
|
+ beq 1f
|
|
addi r1,r1,INT_FRAME_SIZE
|
|
addi r1,r1,INT_FRAME_SIZE
|
|
ld r0,16(r1)
|
|
ld r0,16(r1)
|
|
mtlr r0
|
|
mtlr r0
|
|
@@ -114,15 +120,18 @@ _GLOBAL(power7_idle)
|
|
lwz r4,ADDROFF(powersave_nap)(r3)
|
|
lwz r4,ADDROFF(powersave_nap)(r3)
|
|
cmpwi 0,r4,0
|
|
cmpwi 0,r4,0
|
|
beqlr
|
|
beqlr
|
|
|
|
+ li r3, 1
|
|
/* fall through */
|
|
/* fall through */
|
|
|
|
|
|
_GLOBAL(power7_nap)
|
|
_GLOBAL(power7_nap)
|
|
|
|
+ mr r4,r3
|
|
li r3,0
|
|
li r3,0
|
|
b power7_powersave_common
|
|
b power7_powersave_common
|
|
/* No return */
|
|
/* No return */
|
|
|
|
|
|
_GLOBAL(power7_sleep)
|
|
_GLOBAL(power7_sleep)
|
|
li r3,1
|
|
li r3,1
|
|
|
|
+ li r4,0
|
|
b power7_powersave_common
|
|
b power7_powersave_common
|
|
/* No return */
|
|
/* No return */
|
|
|
|
|