diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2009-10-29 14:22:09 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2009-10-29 14:22:09 +0000 |
commit | 68bae1c5ee082ef2cc431bf4642b7345a670004e (patch) | |
tree | d112ef817cfb0a060901cc72b8741130e8ef07bd /sys/powerpc/aim | |
parent | 368da3e158b46586319aab357b72e1bd077caa57 (diff) | |
download | FreeBSD-src-68bae1c5ee082ef2cc431bf4642b7345a670004e.zip FreeBSD-src-68bae1c5ee082ef2cc431bf4642b7345a670004e.tar.gz |
Turn off Altivec data-stream prefetching before going into power-save
mode on those CPUs that need it.
Diffstat (limited to 'sys/powerpc/aim')
-rw-r--r-- | sys/powerpc/aim/machdep.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/sys/powerpc/aim/machdep.c b/sys/powerpc/aim/machdep.c index 713402e..01272b4 100644 --- a/sys/powerpc/aim/machdep.c +++ b/sys/powerpc/aim/machdep.c @@ -897,8 +897,10 @@ void cpu_idle(int busy) { uint32_t msr; + uint16_t vers; msr = mfmsr(); + vers = mfpvr() >> 16; #ifdef INVARIANTS if ((msr & PSL_EE) != PSL_EE) { @@ -908,9 +910,25 @@ cpu_idle(int busy) } #endif if (powerpc_pow_enabled) { - powerpc_sync(); - mtmsr(msr | PSL_POW); - isync(); + switch (vers) { + case IBM970: + case IBM970FX: + case IBM970MP: + case MPC7447A: + case MPC7448: + case MPC7450: + case MPC7455: + case MPC7457: + __asm __volatile("\ + dssall; sync; mtmsr %0; isync" + :: "r"(msr | PSL_POW)); + break; + default: + powerpc_sync(); + mtmsr(msr | PSL_POW); + isync(); + break; + } } } |