Thread (1 message) 1 message, 1 author, 2014-12-03

Re: [PATCH RFC 0/3] Add "Simple" / Renesas Bus State Controller Driver

From: Kevin Hilman <khilman@kernel.org>
Date: 2014-12-03 19:31:03
Also in: linux-pm, linux-sh, lkml

Geert Uytterhoeven [off-list ref] writes:
Hi Kevin, Arnd,

I've been giving this some more thoughts...

On Wed, Nov 26, 2014 at 9:11 PM, Kevin Hilman [off-list ref] wrote:
quoted
Geert Uytterhoeven [off-list ref] writes:
quoted
On Mon, Nov 24, 2014 at 9:15 PM, Arnd Bergmann [off-list ref] wrote:
quoted
On Monday 24 November 2014 21:10:05 Geert Uytterhoeven wrote:
quoted
As this minimal BSC driver isn't hardware-specific at all, I'm wondering
if there's a simpler way to do this?
  - Should the driver be renamed to "simple-bus", and match "simple-bus"?
  - Should this be moved to core code, without an explicit driver for
    "simple-bus"? I.e. should the driver core just enable runtime PM for
    all devices not bound to a driver, as they may represent buses with
    child devices that do rely on runtime PM?

Thanks for your comments and suggestions!
My understanding of simple-bus is that it's something that does
not have any power-management capabilities, and I'd rather not
add clocks or interrupts to it.
Should I not add the interrupt to the device node, even though I do
know the hardware block has an interrupt?
Of course, to make use of the interrupt, you do need a hardware-specific
driver that binds to the specific compatible name. But for now such a
driver is overkill, as I do not need to use the interrupt.

Power domains (and clocks used for power management) are different,
as they are platform features: they may appear in any device node, even if
the bindings for the device node don't mention them.
Else I cannot add them to a node that's compatible with e.g. "arm,cortex-a15"
or "arm,pl310-cache", without adding (or completely replacing them with)
compatible names like "renesas,r8a73a4-cortex-a15" resp.
"renesas,sh73a0-pl310-cache"?
Hence I think they should be allowed in "simple-bus" nodes, too.
quoted
quoted
quoted
What I think makes more sense is to have a bus driver for it
in drivers/bus, remove the "simple-bus" compatibility value
and have the driver take care of registering the power domain
and probing the child devices using of_platform_populate on
itself.
Registering power domains is already handled by the core code.

So compared to my RFC code, I only have to
  1. Drop "simple-bus" from the compatible property in the .dtsi,
  2. Call of_platform_populate() from renesas_bsc_probe(), to
     register the child devices, now the core code no longer does that.

I find it a bit strange having to add _more_ code, as the core code handles
registering child devices fine. Doing it from my bus driver only protects
against people trying to run a kernel without my bus driver included
(which currently works fine, as long as no PM domain or clock is involved,
 e.g. if the clock is forgotten in the SoC's .dtsi :-).
I actually rather like the simple bus driver in it's current form, where
the device and pm-domain registration is taken care of by the
core. Since it's really not HW specific at all, maybe just rename it
simple-pm-bus or something like that?
That means writing bindings for a new bus type "simple-pm-bus"?
Well, I'm OK with adding common properties to simple-bus also, but
presuably you'll want to document those as well in a binding doc for
simple-bus.

Kevin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help