Finally bit the bullet and learned how all the MMIO->PE mapping setup actually works. As a side effect I found a bunch of oddities in how PowerNV SR-IOV support is implemented. This series mostly sorts that out with a few more generic cleanups along the way.
This is largely prep work for supporting VFs in the 32bit MMIO window. This is an unfortunate necessity due to how the Linux BAR allocator handles BARs marked as non-prefetchable. The distinction between prefetch and non-prefetchable BARs was made largely irrelevant with the introduction of PCIe, but the BAR allocator is overly conservative. It will always place non-pref bars in the prefetchable window, which is 32bit only. This results in us being unable to use VFs from NVMe drives and a few different RAID cards. This series is based on top of these two: https://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=187630 https://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=187688 Rebases cleanly on top of the first, but I haven't tested that one plus this extensively. Oliver