Message ID | 20170720015322.24307-1-npiggin@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 09539f9b123652e969894d6299ae0df2fe12cb5d |
Headers | show |
On Thursday 20 July 2017 07:23 AM, Nicholas Piggin wrote: > POWER9 DD2 PMU can stop after a state-loss idle in some conditions. > > A solution is to set then clear MMCRA[60] after wake from state-loss > idle. Acked-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > --- > arch/powerpc/kernel/idle_book3s.S | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S > index 516ebef905c0..e6252c5a57a4 100644 > --- a/arch/powerpc/kernel/idle_book3s.S > +++ b/arch/powerpc/kernel/idle_book3s.S > @@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300: > /* > * Workaround for POWER9, if we lost resources, the ERAT > * might have been mixed up and needs flushing. We also need > - * to reload MMCR0 (see comment above). > + * to reload MMCR0 (see comment above). We also need to set > + * then clear bit 60 in MMCRA to ensure the PMU starts running. > */ > blt cr3,1f > PPC_INVALIDATE_ERAT > ld r1,PACAR1(r13) > + mfspr r4,SPRN_MMCRA > + ori r4,r4,(1 << (63-60)) > + mtspr SPRN_MMCRA,r4 > + xori r4,r4,(1 << (63-60)) > + mtspr SPRN_MMCRA,r4 > ld r4,_MMCR0(r1) > mtspr SPRN_MMCR0,r4 > 1:
* Nicholas Piggin <npiggin@gmail.com> [2017-07-20 11:53:22]: > POWER9 DD2 PMU can stop after a state-loss idle in some conditions. > > A solution is to set then clear MMCRA[60] after wake from state-loss > idle. > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> > --- > arch/powerpc/kernel/idle_book3s.S | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S > index 516ebef905c0..e6252c5a57a4 100644 > --- a/arch/powerpc/kernel/idle_book3s.S > +++ b/arch/powerpc/kernel/idle_book3s.S > @@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300: > /* > * Workaround for POWER9, if we lost resources, the ERAT > * might have been mixed up and needs flushing. We also need > - * to reload MMCR0 (see comment above). > + * to reload MMCR0 (see comment above). We also need to set > + * then clear bit 60 in MMCRA to ensure the PMU starts running. > */ > blt cr3,1f > PPC_INVALIDATE_ERAT > ld r1,PACAR1(r13) > + mfspr r4,SPRN_MMCRA > + ori r4,r4,(1 << (63-60)) > + mtspr SPRN_MMCRA,r4 > + xori r4,r4,(1 << (63-60)) > + mtspr SPRN_MMCRA,r4 Timing is ok to resolve the issue? Does back-to-back bit flip of MMCRA[60] gets the job done for all cases? Just asking since this issue in itself is a corner case ;) --Vaidy
Hi Nick, > POWER9 DD2 PMU can stop after a state-loss idle in some conditions. > > A solution is to set then clear MMCRA[60] after wake from state-loss > idle. Looks good. Acked-by: Anton Blanchard <anton@samba.org> Anton > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > --- > arch/powerpc/kernel/idle_book3s.S | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/powerpc/kernel/idle_book3s.S > b/arch/powerpc/kernel/idle_book3s.S index 516ebef905c0..e6252c5a57a4 > 100644 --- a/arch/powerpc/kernel/idle_book3s.S > +++ b/arch/powerpc/kernel/idle_book3s.S > @@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300: > /* > * Workaround for POWER9, if we lost resources, the ERAT > * might have been mixed up and needs flushing. We also need > - * to reload MMCR0 (see comment above). > + * to reload MMCR0 (see comment above). We also need to set > + * then clear bit 60 in MMCRA to ensure the PMU starts > running. */ > blt cr3,1f > PPC_INVALIDATE_ERAT > ld r1,PACAR1(r13) > + mfspr r4,SPRN_MMCRA > + ori r4,r4,(1 << (63-60)) > + mtspr SPRN_MMCRA,r4 > + xori r4,r4,(1 << (63-60)) > + mtspr SPRN_MMCRA,r4 > ld r4,_MMCR0(r1) > mtspr SPRN_MMCR0,r4 > 1:
On Thu, 2017-07-20 at 01:53:22 UTC, Nicholas Piggin wrote: > POWER9 DD2 PMU can stop after a state-loss idle in some conditions. > > A solution is to set then clear MMCRA[60] after wake from state-loss > idle. > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > Acked-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> > Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> > Acked-by: Anton Blanchard <anton@samba.org> Applied to powerpc fixes, thanks. https://git.kernel.org/powerpc/c/bdd21ddb919d28f9c62cdc6286cac9 cheers
On Thu, 3 Aug 2017 20:19:38 +1000 (AEST) Michael Ellerman <patch-notifications@ellerman.id.au> wrote: > On Thu, 2017-07-20 at 01:53:22 UTC, Nicholas Piggin wrote: > > POWER9 DD2 PMU can stop after a state-loss idle in some conditions. > > > > A solution is to set then clear MMCRA[60] after wake from state-loss > > idle. > > > > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > > Acked-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> > > Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> > > Acked-by: Anton Blanchard <anton@samba.org> > > Applied to powerpc fixes, thanks. > > https://git.kernel.org/powerpc/c/bdd21ddb919d28f9c62cdc6286cac9 > > cheers Not there anymore. I see this only in the merge branch. Thanks Michal
Yeah I messed up the subject when comitting, from memory, so I had to rebase and force push. I think this is it: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id=09539f9b123652e969894d6299ae0df2fe12cb5d cheers On 14 September 2017 2:11:16 am AEST, "Michal Suchánek" <msuchanek@suse.de> wrote: >On Thu, 3 Aug 2017 20:19:38 +1000 (AEST) >Michael Ellerman <patch-notifications@ellerman.id.au> wrote: > >> On Thu, 2017-07-20 at 01:53:22 UTC, Nicholas Piggin wrote: >> > POWER9 DD2 PMU can stop after a state-loss idle in some conditions. >> > >> > A solution is to set then clear MMCRA[60] after wake from >state-loss >> > idle. >> > >> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> >> > Acked-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> >> > Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> >> > Acked-by: Anton Blanchard <anton@samba.org> >> >> Applied to powerpc fixes, thanks. >> >> https://git.kernel.org/powerpc/c/bdd21ddb919d28f9c62cdc6286cac9 >> >> cheers > >Not there anymore. I see this only in the merge branch. > >Thanks > >Michal
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S index 516ebef905c0..e6252c5a57a4 100644 --- a/arch/powerpc/kernel/idle_book3s.S +++ b/arch/powerpc/kernel/idle_book3s.S @@ -460,11 +460,17 @@ pnv_restore_hyp_resource_arch300: /* * Workaround for POWER9, if we lost resources, the ERAT * might have been mixed up and needs flushing. We also need - * to reload MMCR0 (see comment above). + * to reload MMCR0 (see comment above). We also need to set + * then clear bit 60 in MMCRA to ensure the PMU starts running. */ blt cr3,1f PPC_INVALIDATE_ERAT ld r1,PACAR1(r13) + mfspr r4,SPRN_MMCRA + ori r4,r4,(1 << (63-60)) + mtspr SPRN_MMCRA,r4 + xori r4,r4,(1 << (63-60)) + mtspr SPRN_MMCRA,r4 ld r4,_MMCR0(r1) mtspr SPRN_MMCR0,r4 1:
POWER9 DD2 PMU can stop after a state-loss idle in some conditions. A solution is to set then clear MMCRA[60] after wake from state-loss idle. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- arch/powerpc/kernel/idle_book3s.S | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)