Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powerpc/8xx: mfspr SPRN_TBRx in lieu of mftb/mftbu is not supported

Commit beb2dc0a7a84be003ce54e98b95d65cc66e6e536 breaks the MPC8xx which
seems to not support using mfspr SPRN_TBRx instead of mftb/mftbu
despite what is written in the reference manual.

This patch reverts to the use of mftb/mftbu when CONFIG_8xx is
selected.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Scott Wood <scottwood@freescale.com>

authored by

LEROY Christophe and committed by
Scott Wood
ae2163be cbf8a358

+37
+14
arch/powerpc/boot/util.S
··· 71 71 add r4,r4,r5 72 72 addi r4,r4,-1 73 73 divw r4,r4,r5 /* BUS ticks */ 74 + #ifdef CONFIG_8xx 75 + 1: mftbu r5 76 + mftb r6 77 + mftbu r7 78 + #else 74 79 1: mfspr r5, SPRN_TBRU 75 80 mfspr r6, SPRN_TBRL 76 81 mfspr r7, SPRN_TBRU 82 + #endif 77 83 cmpw 0,r5,r7 78 84 bne 1b /* Get [synced] base time */ 79 85 addc r9,r6,r4 /* Compute end time */ 80 86 addze r8,r5 87 + #ifdef CONFIG_8xx 88 + 2: mftbu r5 89 + #else 81 90 2: mfspr r5, SPRN_TBRU 91 + #endif 82 92 cmpw 0,r5,r8 83 93 blt 2b 84 94 bgt 3f 95 + #ifdef CONFIG_8xx 96 + mftb r6 97 + #else 85 98 mfspr r6, SPRN_TBRL 99 + #endif 86 100 cmpw 0,r6,r9 87 101 blt 2b 88 102 3: blr
+2
arch/powerpc/include/asm/ppc_asm.h
··· 366 366 cmpwi dest,0; \ 367 367 beq- 90b; \ 368 368 END_FTR_SECTION_NESTED(CPU_FTR_CELL_TB_BUG, CPU_FTR_CELL_TB_BUG, 96) 369 + #elif defined(CONFIG_8xx) 370 + #define MFTB(dest) mftb dest 369 371 #else 370 372 #define MFTB(dest) mfspr dest, SPRN_TBRL 371 373 #endif
+7
arch/powerpc/include/asm/reg.h
··· 1174 1174 1175 1175 #else /* __powerpc64__ */ 1176 1176 1177 + #if defined(CONFIG_8xx) 1178 + #define mftbl() ({unsigned long rval; \ 1179 + asm volatile("mftbl %0" : "=r" (rval)); rval;}) 1180 + #define mftbu() ({unsigned long rval; \ 1181 + asm volatile("mftbu %0" : "=r" (rval)); rval;}) 1182 + #else 1177 1183 #define mftbl() ({unsigned long rval; \ 1178 1184 asm volatile("mfspr %0, %1" : "=r" (rval) : \ 1179 1185 "i" (SPRN_TBRL)); rval;}) 1180 1186 #define mftbu() ({unsigned long rval; \ 1181 1187 asm volatile("mfspr %0, %1" : "=r" (rval) : \ 1182 1188 "i" (SPRN_TBRU)); rval;}) 1189 + #endif 1183 1190 #endif /* !__powerpc64__ */ 1184 1191 1185 1192 #define mttbl(v) asm volatile("mttbl %0":: "r"(v))
+8
arch/powerpc/include/asm/timex.h
··· 29 29 ret = 0; 30 30 31 31 __asm__ __volatile__( 32 + #ifdef CONFIG_8xx 33 + "97: mftb %0\n" 34 + #else 32 35 "97: mfspr %0, %2\n" 36 + #endif 33 37 "99:\n" 34 38 ".section __ftr_fixup,\"a\"\n" 35 39 ".align 2\n" ··· 45 41 " .long 0\n" 46 42 " .long 0\n" 47 43 ".previous" 44 + #ifdef CONFIG_8xx 45 + : "=r" (ret) : "i" (CPU_FTR_601)); 46 + #else 48 47 : "=r" (ret) : "i" (CPU_FTR_601), "i" (SPRN_TBRL)); 48 + #endif 49 49 return ret; 50 50 #endif 51 51 }
+6
arch/powerpc/kernel/vdso32/gettimeofday.S
··· 232 232 lwz r6,(CFG_TB_ORIG_STAMP+4)(r9) 233 233 234 234 /* Get a stable TB value */ 235 + #ifdef CONFIG_8xx 236 + 2: mftbu r3 237 + mftbl r4 238 + mftbu r0 239 + #else 235 240 2: mfspr r3, SPRN_TBRU 236 241 mfspr r4, SPRN_TBRL 237 242 mfspr r0, SPRN_TBRU 243 + #endif 238 244 cmplw cr0,r3,r0 239 245 bne- 2b 240 246