Subject: Re: device tree traversal
To: Matthias Drochner <M.Drochner@fz-juelich.de>
From: Jachym Holecek <freza@dspfpga.com>
List: tech-kern
Date: 07/04/2006 13:59:24
# Matthias Drochner 2006-07-03:
> freza@dspfpga.com said:
> > This will be needed for proper powerhooks
>
> In the PCI case, I don't think traversing the (logical)
> device list is the right thing to to. What we need is
> to traverse the physical list. And this can only be done
> by the bus drivers theirselfes.
>
> Some reasons:
> -On a shared bus, all devices need to support a certain
> low-power state before the bus can be stopped, powered
> down or so. _All_ devices, not just these we have drivers
> attached for. The bus driver might also find out a
> common denominator at the beginning and handle individual
> devices later.
I suspect what we really want here is to have 'struct device'
for each _physical_ device -- some of them will ("optionally")
have a driver attached to them. This starts to make even more
sense when you consider loading drivers at runtime (lkm).
This idea is not mine and I believe it's on someone's TODO
list already ;-).
> -In PCI PM, most things can be done centrally. All the
> wakeup stuff and config register saving which is now
> in powerhooks shouldn't be there. So a call to the PCI
> device driver should be only done if the driver requests
> this. (There is a bit in the PCI PM capability which tells
> whether special driver assistance is needed. If this is
> set and the driver didn't register a hook, this would be
> an error.
I think that (assuming the above) this could be solved without
too much pain with device_iterator_*()-based powerhooks.
> -The namespace for PCI device power states is different
> from the PCI bus one, and that of ACPI. For sanity, I
> wouldn't try to hide this behind global names. The bus driver
> can well translate bus power states into device power
> states.
I was coming to the same conclusion. We can have two mandatory
power states ("fully on"/"fully off"), with bus/device/... specific
set of intermediate states. All we need then is the ability to
announce a list of supported states for given device to the user
(simple enough with proplib ;).
> (And as said, this is not just translation but rather
> negotiation.)
Yes -- the iterator API I'm proposing is supposed to be a tool for
PM hooks (and other purposes), rather then "the whole thing itself".
-- Jachym