summaryrefslogtreecommitdiff
path: root/arch/powerpc/platforms/85xx
diff options
context:
space:
mode:
authorScott Wood <scottwood@freescale.com>2013-08-21 00:33:12 (GMT)
committerScott Wood <scottwood@freescale.com>2013-08-21 00:33:12 (GMT)
commitbeb2dc0a7a84be003ce54e98b95d65cc66e6e536 (patch)
treea30c97effb8f723cccbc343306df4c7b6ab0047b /arch/powerpc/platforms/85xx
parentd52459ca3047435aa5d7957e50857fc7ba193411 (diff)
downloadlinux-beb2dc0a7a84be003ce54e98b95d65cc66e6e536.tar.xz
powerpc: Convert some mftb/mftbu into mfspr
Some CPUs (such as e500v1/v2) don't implement mftb and will take a trap. mfspr should work on everything that has a timebase, and is the preferred instruction according to ISA v2.06. Currently we get away with mftb on 85xx because the assembler converts it to mfspr due to -Wa,-me500. However, that flag has other effects that are undesireable for certain targets (e.g. lwsync is converted to sync), and is hostile to multiplatform kernels. Thus we would like to stop setting it for all e500-family builds. mftb/mftbu instances which are in 85xx code or common code are converted. Instances which will never run on 85xx are left alone. Signed-off-by: Scott Wood <scottwood@freescale.com>
Diffstat (limited to 'arch/powerpc/platforms/85xx')
-rw-r--r--arch/powerpc/platforms/85xx/smp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/powerpc/platforms/85xx/smp.c b/arch/powerpc/platforms/85xx/smp.c
index ea7e629..281b7f0 100644
--- a/arch/powerpc/platforms/85xx/smp.c
+++ b/arch/powerpc/platforms/85xx/smp.c
@@ -83,11 +83,13 @@ static void mpc85xx_give_timebase(void)
{
u64 prev;
- asm volatile("mftb %0" : "=r" (timebase));
+ asm volatile("mfspr %0, %1" : "=r" (timebase) :
+ "i" (SPRN_TBRL));
do {
prev = timebase;
- asm volatile("mftb %0" : "=r" (timebase));
+ asm volatile("mfspr %0, %1" : "=r" (timebase) :
+ "i" (SPRN_TBRL));
} while (prev != timebase);
}
#else