|
@@ -170,6 +170,9 @@ core_idle_lock_held:
|
|
|
bne- core_idle_lock_held
|
|
bne- core_idle_lock_held
|
|
|
blr
|
|
blr
|
|
|
|
|
|
|
|
|
|
+/* Reuse an unused pt_regs slot for IAMR */
|
|
|
|
|
+#define PNV_POWERSAVE_IAMR _DAR
|
|
|
|
|
+
|
|
|
/*
|
|
/*
|
|
|
* Pass requested state in r3:
|
|
* Pass requested state in r3:
|
|
|
* r3 - PNV_THREAD_NAP/SLEEP/WINKLE in POWER8
|
|
* r3 - PNV_THREAD_NAP/SLEEP/WINKLE in POWER8
|
|
@@ -200,6 +203,12 @@ pnv_powersave_common:
|
|
|
/* Continue saving state */
|
|
/* Continue saving state */
|
|
|
SAVE_GPR(2, r1)
|
|
SAVE_GPR(2, r1)
|
|
|
SAVE_NVGPRS(r1)
|
|
SAVE_NVGPRS(r1)
|
|
|
|
|
+
|
|
|
|
|
+BEGIN_FTR_SECTION
|
|
|
|
|
+ mfspr r5, SPRN_IAMR
|
|
|
|
|
+ std r5, PNV_POWERSAVE_IAMR(r1)
|
|
|
|
|
+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
|
|
|
|
|
+
|
|
|
mfcr r5
|
|
mfcr r5
|
|
|
std r5,_CCR(r1)
|
|
std r5,_CCR(r1)
|
|
|
std r1,PACAR1(r13)
|
|
std r1,PACAR1(r13)
|
|
@@ -924,6 +933,17 @@ BEGIN_FTR_SECTION
|
|
|
END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
|
|
END_FTR_SECTION_IFSET(CPU_FTR_HVMODE)
|
|
|
REST_NVGPRS(r1)
|
|
REST_NVGPRS(r1)
|
|
|
REST_GPR(2, r1)
|
|
REST_GPR(2, r1)
|
|
|
|
|
+
|
|
|
|
|
+BEGIN_FTR_SECTION
|
|
|
|
|
+ /* IAMR was saved in pnv_powersave_common() */
|
|
|
|
|
+ ld r5, PNV_POWERSAVE_IAMR(r1)
|
|
|
|
|
+ mtspr SPRN_IAMR, r5
|
|
|
|
|
+ /*
|
|
|
|
|
+ * We don't need an isync here because the upcoming mtmsrd is
|
|
|
|
|
+ * execution synchronizing.
|
|
|
|
|
+ */
|
|
|
|
|
+END_FTR_SECTION_IFSET(CPU_FTR_ARCH_207S)
|
|
|
|
|
+
|
|
|
ld r4,PACAKMSR(r13)
|
|
ld r4,PACAKMSR(r13)
|
|
|
ld r5,_LINK(r1)
|
|
ld r5,_LINK(r1)
|
|
|
ld r6,_CCR(r1)
|
|
ld r6,_CCR(r1)
|