Re: C states on AMD SMP

Erik Slagter
2005-09-10T10:46:35Z

[-- Attachment #1: Type: text/plain, Size: 2163 bytes --]

On Sat, 2005-09-10 at 12:01 +0200, Pavel Troller wrote:

> > > > Is there a way to patch the FADT or to fool linux-acpi into it does
> > > > actually work (to at least be able to test the thing)?
> > > Shure, patch the verify functions in processor_idle.c ...
> > > But actually I think this is no good idea...
> >
> > Testing purposes ;-)
> >
> > BTW amd76x_pm does work, so you never know... I'd really be happy if I
> > could get something off the 190 Watts the machine now dissipates
> > constantly!

> AFAIK, the Cx state transition mechanism described in the ACPI spec is
> designed just very simply: CPU accesses the "sleep register" stated in the
> FACP for the particular sleep level, does the dummy operation, and hardware
> puts CPU to the desired sleep level.

Yeah, that's right. The amd 768 chipset does it exactly this way. I have
the documentation here because I fiddled a lot with amd768 and didn't
manage to do it the right thing (which means: full power when needed
(+bus mastering), minimum power when idle).

I do know C2/C3 works, because if you call it from the idle loop, about
20 times in a row, your computer will become dead slow ;-)

> But, what to do, if the chipset is
> designed that it requires more than a single access ? I'm afraid that it will
> then require a specialized driver for that purpose.

In that case it's not acpi compliant. IMHO it shouldn't be mentioned in
the acpi tables anyway...

> Did You look at the amd76x_pm sources?

Yes ;-)

> I did, just to see what it
> does. There is a plenty of registers accessed, bits set/cleared from them,
> simply something, which is not present in plain processor_idle.c.

a) mostly for the amd760 chipset (as opposed to amd768)
b) some registers are already set by default or by bios
c) some registers enable some extra savings

> I'm also using amd76x_pm and it's really wonderful, the CPUs cool down to 45C
> from 75C, I can even stop the fans and the temp doesn't go above 60C if the
> CPUs are idling.

See above. It doesn't do the right thing, especially not using bus
mastering (like video capturing cards).