Chenging 2 bits in MSR in ppc6xx_idle() with 1 command?
Benjamin Herrenschmidt
benh at kernel.crashing.org
Wed Dec 27 10:48:54 EST 2006
On Mon, 2006-12-25 at 21:07 +0100, Guennadi Liakhovetski wrote:
> Hi
>
> Here's a code fragment from ppc6xx_idle(), which should send the CPU into
> a powersaving mode (DOZE or NAP) and re-enable interrupts after a
> local_irq_disable():
>
> mfmsr r7
> ori r7,r7,MSR_EE
> oris r7,r7,MSR_POW at h
> 1: sync
> mtmsr r7
> isync
> b 1b
>
> Whereas MPC8245's user manual says, that when setting the MSR_POW bit in
> the MSR one may not set any other bit in it with the same instruction.
> Does this mean that the above does not actually work on those (and
> similar) CPUs or does it work because of the loop?
That doc bit looks a bit strange. The kernel pretty much relies on
setting MSR:EE and MSR:POW atomicaly.
Ben.
More information about the Linuxppc-dev
mailing list