mapping a PCI bus
Mitch Bradley
wmb at firmworks.com
Fri Mar 13 05:20:56 EST 2009
> Hello!
> Thanks a lot for all these explanations! they are very helpful! I have
> understood the meaning of each fields of "ranges", but I don't know
> where find informations to fill it... I don't find any reference about
> memory space and iopace ranges in my datasheets.
The information should be in the documentation for the chip that
implements the host-to-PCI bridge function - a chip like Tundra Tsi110 .
The host bridge chip is probably programmable. If so you must choose a
range of system bus addresses to use for PCI. The firmware will need to
program the host bridge chip registers that control that address
assignment. The dts ranges property will then report that information.
> I have read in the PCI specification that the base address register
> (BAR) permit to get the memory range needed by each device on the PCI
> bus. Have I to get the memory range of every device in order to fill
> the range property ? I feel that I missed something...
No, the ranges property is independent of BAR assignments on PCI devices.
The value of the ranges property is established once, as part of the
system design process. The values of individual device BARs can change
from boot to boot, depending on which cards are plugged in.
>
> To finish, I have a question about the "reg" field. I have read in
> documentations that it must contain the address of the PCI bridge's
> configuration space: am I wrong?
For a PCI host bridge (the "/pci" node itself): the "reg" property
contains the address of the bridge's register bank *in the system bus
address space*. In general, that is not a configuration space address,
because the main system bus is usually not a PCI bus. For PPC 74xx
processors, the main system bus is the "60x bus" that comes out of the
CPU chip.
For a PCI device (something that plugs into a PCI bus, with a name like
/pci/ethernet): the reg property includes the device's PCI configuration
address. That configuration address depends on the PCI slot, so for
plug-in cards, the reg property must be created dynamically during the
probing process.
For a PCI-to-PCI bridge (a node like /pci/pci): the reg property of the
lower bridge contains its configuration address in the upper PCI address
space.
As you can see, the general rule is that the "reg" property specifies an
address in the "parent" address space, whatever that is. So a PCI host
bridge's "reg" property does not have a PCI configuration address,
because its parent is not a PCI bus, but rather the main system bus.
> Thanks for Your attention !
>
> Nicolas Lavocat
>
More information about the devicetree-discuss
mailing list