Re: PCI PM: Restore standard config registers of all devices early

Rafael J. Wysocki
2009-02-02T21:33:24Z

On Monday 02 February 2009, Benjamin Herrenschmidt wrote:
> On Mon, 2009-02-02 at 12:41 -0800, Linus Torvalds wrote:
> >
> > On Tue, 3 Feb 2009, Benjamin Herrenschmidt wrote:
> > >
> > > I'd rather hook it up inside pci_set_power_state()...
> >
> > Umm. But you already _have_ that. Look at platform_pci_set_power_state().
> > It gets called before turning the device on (pci_raw_set_power_state(D0))
> > and after turning the device off (pci_raw_set_power_state(D1+))
> >
> > Maybe you missed it? It's how ACPI does things.
>
> I may well have, it didn't exist when my stuff was written.
>
> > However, the issue you see is that pci_restore_standard_config() doesn't
> > call it, because at least with ACPI, the ACPI code simply isn't ready to
> > be called with interrupts off. So it looks like you may be looking at the
> > wrong thing, hmm?
>
> Well.. yes and no... I still don't see how it can be sane to whack config
> space back before the device has been turned back on. I wouldn't be surprised
> if some devices don't grok well their BARs being written while not in D0.
>
> I suppose I can always add another hook inside pci_restore_blah for my specific
> case but I can also very easily see that can of worms hitting even more badly
> in tight embedded environments such as handhelds, who use things like fine clock
> control a lot more extensively.
>
> In fact, even on x86, I'm not sure it's kosher to restore the config space
> before you called ACPI...

It need not be in theory, but I haven't seen any real life example of that.

I think devices without the PM capability are suspicious, so to speak.

Thanks,
Rafael