On 3/11/2013 8:23 AM, Jason Gunthorpe wrote:
quoted
(b) The discovery/enumeration code needs to access config space via
pci_ops. The root complex driver implements pci_ops based on a trivial
parsing of ranges (omitting irrelevant details):
pci_op_read(devfn, pos) {
loop_over_ranges_entries {
if (to_devfn(ranges_entry.child) == devfn) {
return mmio_read(ranges_entry.parent + pos);
^^^^^^^^^^^^^^^^^^^
This has to be converted through all enclosing node's ranges prior to
being used as a CPU address - the OF core has all the code to do this,
but a new entry point would be needed for this specific application...
Agreed. But I was considering that detail to be outside the scope of
this discussion because the same thing must happen for any physical
address at this level of the tree.
Cheers,
Jason