powerpc64/powernv: Enable Partitionable Endpoint (PE) support
This is a fairly major rewrite of the IODA2/IODA3 codebase to enable
PE allocation on a per-bus basis, and to lay the groundwork required
to wire the IODA3 controller into the FreeBSD IOMMU framework.
While the 1:1 DMA mapping is still present, it is now enabled via
a proper TVT (TCE table) with associated setup functions. Likewise,
we no longer place all devices in PE#1, which (among other benefits)
prevents spurious MSI interrupts from interfering with unrelated
devices on the same PHB.
Because the segmented memory model is now in use for 64-bit BARs,
the PE allocation and DMA setup needs to run in a secondary pass
after PCI bus and device resource allocation. This mirrors the
Linux reference code for IODA2/IODA3, and allows further isolation
between PCI devices.
Tested to operate without regressions on an RCS Blackbird system.