Commit ae2163be10ac6090e7aeed72591e2d7fabb1cdda
Committed by
Scott Wood
1 parent
cbf8a358be
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
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>
Showing 5 changed files with 37 additions and 0 deletions Side-by-side Diff
arch/powerpc/boot/util.S
... | ... | @@ -71,18 +71,32 @@ |
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 |
arch/powerpc/include/asm/ppc_asm.h
arch/powerpc/include/asm/reg.h
... | ... | @@ -1174,12 +1174,19 @@ |
1174 | 1174 | |
1175 | 1175 | #else /* __powerpc64__ */ |
1176 | 1176 | |
1177 | +#if defined(CONFIG_8xx) | |
1177 | 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 | |
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)) |
arch/powerpc/include/asm/timex.h
... | ... | @@ -29,7 +29,11 @@ |
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" |
36 | 40 | |
... | ... | @@ -41,7 +45,11 @@ |
41 | 45 | " .long 0\n" |
42 | 46 | " .long 0\n" |
43 | 47 | ".previous" |
48 | +#ifdef CONFIG_8xx | |
49 | + : "=r" (ret) : "i" (CPU_FTR_601)); | |
50 | +#else | |
44 | 51 | : "=r" (ret) : "i" (CPU_FTR_601), "i" (SPRN_TBRL)); |
52 | +#endif | |
45 | 53 | return ret; |
46 | 54 | #endif |
47 | 55 | } |
arch/powerpc/kernel/vdso32/gettimeofday.S
... | ... | @@ -232,9 +232,15 @@ |
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 |