• D
    spapr_pci: Add a 64-bit MMIO window · daa23699
    David Gibson 提交于
    On real hardware, and under pHyp, the PCI host bridges on Power machines
    typically advertise two outbound MMIO windows from the guest's physical
    memory space to PCI memory space:
      - A 32-bit window which maps onto 2GiB..4GiB in the PCI address space
      - A 64-bit window which maps onto a large region somewhere high in PCI
        address space (traditionally this used an identity mapping from guest
        physical address to PCI address, but that's not always the case)
    
    The qemu implementation in spapr-pci-host-bridge, however, only supports a
    single outbound MMIO window, however.  At least some Linux versions expect
    the two windows however, so we arranged this window to map onto the PCI
    memory space from 2 GiB..~64 GiB, then advertised it as two contiguous
    windows, the "32-bit" window from 2G..4G and the "64-bit" window from
    4G..~64G.
    
    This approach means, however, that the 64G window is not naturally aligned.
    In turn this limits the size of the largest BAR we can map (which does have
    to be naturally aligned) to roughly half of the total window.  With some
    large nVidia GPGPU cards which have huge memory BARs, this is starting to
    be a problem.
    
    This patch adds true support for separate 32-bit and 64-bit outbound MMIO
    windows to the spapr-pci-host-bridge implementation, each of which can
    be independently configured.  The 32-bit window always maps to 2G.. in PCI
    space, but the PCI address of the 64-bit window can be configured (it
    defaults to the same as the guest physical address).
    
    So as not to break possible existing configurations, as long as a 64-bit
    window is not specified, a large single window can be specified.  This
    will appear the same way to the guest as the old approach, although it's
    now implemented by two contiguous memory regions rather than a single one.
    
    For now, this only adds the possibility of 64-bit windows.  The default
    configuration still uses the legacy mode.
    Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: NLaurent Vivier <lvivier@redhat.com>
    daa23699
spapr.h 25.0 KB