All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] powerpc: Add an inline function to update HID0
@ 2015-08-04  8:30 Gautham R. Shenoy
  2015-08-04 10:08 ` Michael Ellerman
  0 siblings, 1 reply; 13+ messages in thread
From: Gautham R. Shenoy @ 2015-08-04  8:30 UTC (permalink / raw)
  To: Paul Mackerras, Michael Ellerman, linux-kernel, linuxppc-dev,
	mikey
  Cc: Gautham R. Shenoy

Section 3.7 of Version 1.2 of the Power8 Processor User's Manual
prescribes that updates to HID0 be preceded by a SYNC instruction and
followed by an ISYNC instruction (Page 91).

Create a function name update_hid0() which follows this recipe and
invoke it from the static split core path.

Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
---
 arch/powerpc/include/asm/kvm_ppc.h       | 11 +++++++++++
 arch/powerpc/platforms/powernv/subcore.c |  4 ++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/arch/powerpc/include/asm/kvm_ppc.h b/arch/powerpc/include/asm/kvm_ppc.h
index c6ef05b..325f1d6 100644
--- a/arch/powerpc/include/asm/kvm_ppc.h
+++ b/arch/powerpc/include/asm/kvm_ppc.h
@@ -685,4 +685,15 @@ static inline ulong kvmppc_get_ea_indexed(struct kvm_vcpu *vcpu, int ra, int rb)
 
 extern void xics_wake_cpu(int cpu);
 
+static inline void update_hid0(unsigned long hid0)
+{
+	/*
+	 *  The HID0 update should at the very least be preceded by a
+	 *  a SYNC instruction followed by an ISYNC instruction
+	 */
+	mb();
+	mtspr(SPRN_HID0, hid0);
+	isync();
+}
+
 #endif /* __POWERPC_KVM_PPC_H__ */
diff --git a/arch/powerpc/platforms/powernv/subcore.c b/arch/powerpc/platforms/powernv/subcore.c
index f60f80a..37e77bf 100644
--- a/arch/powerpc/platforms/powernv/subcore.c
+++ b/arch/powerpc/platforms/powernv/subcore.c
@@ -190,7 +190,7 @@ static void unsplit_core(void)
 
 	hid0 = mfspr(SPRN_HID0);
 	hid0 &= ~HID0_POWER8_DYNLPARDIS;
-	mtspr(SPRN_HID0, hid0);
+	update_hid0(hid0);
 	update_hid_in_slw(hid0);
 
 	while (mfspr(SPRN_HID0) & mask)
@@ -227,7 +227,7 @@ static void split_core(int new_mode)
 	/* Write new mode */
 	hid0  = mfspr(SPRN_HID0);
 	hid0 |= HID0_POWER8_DYNLPARDIS | split_parms[i].value;
-	mtspr(SPRN_HID0, hid0);
+	update_hid0(hid0);
 	update_hid_in_slw(hid0);
 
 	/* Wait for it to happen */
-- 
1.9.3

^ permalink raw reply related	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2015-08-17  8:03 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-08-04  8:30 [PATCH] powerpc: Add an inline function to update HID0 Gautham R. Shenoy
2015-08-04 10:08 ` Michael Ellerman
2015-08-04 10:57   ` Gautham R Shenoy
2015-08-04 11:06     ` [PATCH v2] " Gautham R. Shenoy
2015-08-04 14:06   ` Madhavan Srinivasan
2015-08-05  2:00     ` Michael Ellerman
2015-08-05  2:30   ` Segher Boessenkool
2015-08-05  6:54     ` Gautham R Shenoy
2015-08-05  7:08       ` [PATCH v3] powerpc: Add an inline function to update POWER8 HID0 Gautham R. Shenoy
2015-08-14  4:54         ` Sam Bobroff
2015-08-14  8:59         ` Shreyas B Prabhu
2015-08-17  8:03         ` [v3] " Michael Ellerman
2015-08-09  2:29   ` powerpc: Add an inline function to update HID0 Benjamin Herrenschmidt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.