On 2010-9-30 6:25 PM, Alexander Graf wrote:
So how does the firmware tell the OS that a device is on a 64 bit physical address if it only knows about 32 bit wide cells?
In general, the /memory node's "reg" and "available" properties tell you how big your physical memory addressing is. The root node's ("/") #address-cells and #size-cells tells you how to read those two properties.
If you have a 32-bit virtual addressing range, you'll obviously need some kind of MMU/IOMMU to address anything above ffff.ffff .
For IO, in particular PCI/PCIX/PCIE, you'll see that the root IO node has a ranges property indicating where the physical addressing of the IO chunks are (IO, mem32, mem64).
Oh, and one confusion I occasionally hear about - "cells" strictly speaking refers to the native size of values on the stack (and thus the size operated on with ! and @). The same term "cell" is used for items in a property, but 1275 defines that property cells are explicitly 32-bits. A 64-bit address in a property is by definition two property-cells long.