Re: [PATCH v2 2/3] powerpc/powernv/idle: save-restore DAWR0,DAWRX0 for P10
From: Michael Neuling <hidden>
Date: 2020-07-24 01:25:28
Also in:
lkml
On Fri, 2020-07-10 at 10:52 +0530, Pratik Rajesh Sampat wrote:
quoted hunk ↗ jump to hunk
Additional registers DAWR0, DAWRX0 may be lost on Power 10 for stop levels < 4. Therefore save the values of these SPRs before entering a "stop" state and restore their values on wakeup. Signed-off-by: Pratik Rajesh Sampat <redacted> --- arch/powerpc/platforms/powernv/idle.c | 10 ++++++++++ 1 file changed, 10 insertions(+)diff --git a/arch/powerpc/platforms/powernv/idle.cb/arch/powerpc/platforms/powernv/idle.c index 19d94d021357..f2e2a6a4c274 100644--- a/arch/powerpc/platforms/powernv/idle.c +++ b/arch/powerpc/platforms/powernv/idle.c@@ -600,6 +600,8 @@ struct p9_sprs { u64 iamr; u64 amor; u64 uamor; + u64 dawr0; + u64 dawrx0; }; static unsigned long power9_idle_stop(unsigned long psscr, bool mmu_on)@@ -687,6 +689,10 @@ static unsigned long power9_idle_stop(unsigned longpsscr, bool mmu_on) sprs.iamr = mfspr(SPRN_IAMR); sprs.amor = mfspr(SPRN_AMOR); sprs.uamor = mfspr(SPRN_UAMOR); + if (cpu_has_feature(CPU_FTR_ARCH_31)) {
Can you add a comment here saying even though DAWR0 is ARCH_30, it's only required to be saved on 31. Otherwise this looks pretty odd.
quoted hunk ↗ jump to hunk
+ sprs.dawr0 = mfspr(SPRN_DAWR0); + sprs.dawrx0 = mfspr(SPRN_DAWRX0); + } srr1 = isa300_idle_stop_mayloss(psscr); /* go idle */@@ -710,6 +716,10 @@ static unsigned long power9_idle_stop(unsigned longpsscr, bool mmu_on) mtspr(SPRN_IAMR, sprs.iamr); mtspr(SPRN_AMOR, sprs.amor); mtspr(SPRN_UAMOR, sprs.uamor); + if (cpu_has_feature(CPU_FTR_ARCH_31)) { + mtspr(SPRN_DAWR0, sprs.dawr0); + mtspr(SPRN_DAWRX0, sprs.dawrx0); + } /* * Workaround for POWER9 DD2.0, if we lost resources, the ERAT