Thread (1 message) 1 message, 1 author, 2012-07-02

Re: [PATCH] of: support an enumerated-bus compatible value

From: Mitch Bradley <hidden>
Date: 2012-07-02 18:36:10

On 7/2/2012 7:43 AM, Stephen Warren wrote:
On 07/02/2012 11:23 AM, Mitch Bradley wrote:
quoted
On 7/2/2012 5:59 AM, Stephen Warren wrote:
quoted
On 07/01/2012 01:36 PM, Rob Herring wrote:
quoted
On 06/28/2012 06:05 PM, Stephen Warren wrote:
quoted
From: Stephen Warren <redacted>

An "enumerated" bus is one that is not memory-mapped, hence hence
typically has #address-cells=1, and #size-cells=0. Such buses would be
used to group related non-memory-mapped nodes together, often just
under
the top-level of the device tree. The ability to group nodes into a
non-
memory-mapped subnode of the root is important, since if nodes exist to
describe multiple entities of the same type, the nodes will have the
same name, and hence require a unit address to differentiate them. It
doesn't make sense to assign bogus unit addresses from the CPU's own
address space for this purpose. An example:

     regulators {
         compatible = "enumerated-bus";
         #address-cells = <1>;
         #size-cells = <0>;

         regulator@0 {
             compatible = "regulator-fixed";
             reg = <0>;
         };

         regulator@1 {
             compatible = "regulator-fixed";
             reg = <1>;
         };
     };

Finally, because such buses are not memory-mapped, we avoid creating
any IO/memory resources for the device.
This seems like a work-around to use reg instead of using cell-index
(which is discouraged). reg in this case is really not a hardware
description. Do you have an intended use or just trying to fix the error
messages?
I'm not familiar with cell-index; can you please describe it some more.
Looking at some existing files in arch/powerpc/boot/dts, it looks like
something that exists alongside reg rather than replacing it, so I don't
see how it'd solve the problem.

The portion of .dts file quoted above is the use-case. In more general
terms, I need to add a bunch of non-memory-mapped devices to DT. There
are multiple devices of a given type. The DT node names should be named
after the class of device not the instance, and hence all get named the
same. Hence, I need a unit address to differentiate the node names.
Hence I need to use the reg property in order that the unit address
matches the reg property. Is there some other way of solving these
requirements other than using a unit address to make the node names
unique?
One of Rob's objections was that, in this case, the reg property is not
a hardware description.  That's an interesting point.  If in fact
numerous such devices exist, there must be some mechanism for software
to choose which device to talk to, typically a number.  Is that the case
for these devices?  If so, that number is a perfectly valid "reg"
property value.  If not, how does software choose to talk to a specific
device?
Yes, the reg value is purely a unique ID that exists to satisfy DT
semantics.

These regulators will eventually be referenced by phandles from the
drivers that use them, just like interrupts/GPIOs/... I just haven't
hooked up any clients that do so yet.
I'm still confused.  Are you saying that the regulators cannot be 
controlled by software?

Personally, I don't have a problem with "inventing" unique IDs and using 
the reg property to convey them.  I'm just wondering about how this 
system works.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help