From 5ccc0779d4dae840550bbea60eb0e95ce7597b43 Mon Sep 17 00:00:00 2001 From: Justin Hibbits Date: Fri, 25 Nov 2016 19:36:27 +0000 Subject: [PATCH] Add an isync to after mtsrin, required by the MPC750 errata MPC750 User Manual Errata (rev 1) adds a note to C.4.2.2 noting that mtsr, mtsrin, and mtmsr all require a isync after the instruction and before data address translation uses any of the segment registers. This should make FreeBSD run correctly on the G3 again. Reported by: Mark Millard MFC after: 1 week --- sys/powerpc/include/cpufunc.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/powerpc/include/cpufunc.h b/sys/powerpc/include/cpufunc.h index c949d53d048..378274b67e3 100644 --- a/sys/powerpc/include/cpufunc.h +++ b/sys/powerpc/include/cpufunc.h @@ -82,7 +82,7 @@ static __inline void mtsrin(vm_offset_t va, register_t value) { - __asm __volatile ("mtsrin %0,%1" :: "r"(value), "r"(va)); + __asm __volatile ("mtsrin %0,%1; isync" :: "r"(value), "r"(va)); } static __inline register_t