Subject: Re: I don't understand #size-cells = <0>

From: David Gibson <[email-masked]>
Date: Thu, 1 Feb 2007 11:25:34 +1100

On Wed, Jan 31, 2007 at 04:22:12PM -0800, Andrew Klossner wrote:
> I'm porting the kernel to an 8548-based board whose boot loader does
> not provide a device tree, so I'm rolling my own.
> 
> Rev 0.5 of booting-without-of.txt says:
> 
> 	"reg" properties are always a tuple of the type "address size"
> 	where the number of cells of address and size is specified by
> 	the bus #address-cells and #size-cells.
> 
> but in the examples, we see
> 
> 		reg = <22000 1000>;
> 		#address-cells = <1>;
> 		#size-cells = <0>;
> 
> The number of cells of address is 1.  The number of cells of size is 0.
> 1+0=1, so how can the reg property have a tuple of size 2?

The #address-cells and #size-cells properties apply to children of the
node they appear in, but not in the node itself.  So the "reg" here
uses the #address-cells and #size-cells values from its parent.

This is so that a bridge to a different bus (say, PCI<->USB) can have
a reg property in the format of its parent bus for the control
registers, but define a new address format for things on the
subordinate bus.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson