summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/aim
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2009-10-29 14:22:09 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2009-10-29 14:22:09 +0000
commit68bae1c5ee082ef2cc431bf4642b7345a670004e (patch)
treed112ef817cfb0a060901cc72b8741130e8ef07bd /sys/powerpc/aim
parent368da3e158b46586319aab357b72e1bd077caa57 (diff)
downloadFreeBSD-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.c24
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;
+ }
}
}
OpenPOWER on IntegriCloud