• A
    vfio/pci: Intel graphics legacy mode assignment · c4c45e94
    Alex Williamson 提交于
    Enable quirks to support SandyBridge and newer IGD devices as primary
    VM graphics.  This requires new vfio-pci device specific regions added
    in kernel v4.6 to expose the IGD OpRegion, the shadow ROM, and config
    space access to the PCI host bridge and LPC/ISA bridge.  VM firmware
    support, SeaBIOS only so far, is also required for reserving memory
    regions for IGD specific use.  In order to enable this mode, IGD must
    be assigned to the VM at PCI bus address 00:02.0, it must have a ROM,
    it must be able to enable VGA, it must have or be able to create on
    its own an LPC/ISA bridge of the proper type at PCI bus address
    00:1f.0 (sorry, not compatible with Q35 yet), and it must have the
    above noted vfio-pci kernel features and BIOS.  The intention is that
    to enable this mode, a user simply needs to assign 00:02.0 from the
    host to 00:02.0 in the VM:
    
      -device vfio-pci,host=0000:00:02.0,bus=pci.0,addr=02.0
    
    and everything either happens automatically or it doesn't.  In the
    case that it doesn't, we leave error reports, but assume the device
    will operate in universal passthrough mode (UPT), which doesn't
    require any of this, but has a much more narrow window of supported
    devices, supported use cases, and supported guest drivers.
    
    When using IGD in this mode, the VM firmware is required to reserve
    some VM RAM for the OpRegion (on the order or several 4k pages) and
    stolen memory for the GTT (up to 8MB for the latest GPUs).  An
    additional option, x-igd-gms allows the user to specify some amount
    of additional memory (value is number of 32MB chunks up to 512MB) that
    is pre-allocated for graphics use.  TBH, I don't know of anything that
    requires this or makes use of this memory, which is why we don't
    allocate any by default, but the specification suggests this is not
    actually a valid combination, so the option exists as a workaround.
    Please report if it's actually necessary in some environment.
    
    See code comments for further discussion about the actual operation
    of the quirks necessary to assign these devices.
    Signed-off-by: NAlex Williamson <alex.williamson@redhat.com>
    Reviewed-by: NGerd Hoffmann <kraxel@redhat.com>
    Tested-by: NGerd Hoffmann <kraxel@redhat.com>
    c4c45e94
pci-quirks.c 64.2 KB