• Colin Xu's avatar
    vfio/pci: Add OpRegion 2.0+ Extended VBT support. · 49ba1a29
    Colin Xu authored
    Due to historical reason, some legacy shipped system doesn't follow
    OpRegion 2.1 spec but still stick to OpRegion 2.0, in which the extended
    VBT is not contiguous after OpRegion in physical address, but any
    location pointed by RVDA via absolute address. Also although current
    OpRegion 2.1+ systems appears that the extended VBT follows OpRegion,
    RVDA is the relative address to OpRegion head, the extended VBT location
    may change to non-contiguous to OpRegion. In both cases, it's impossible
    to map a contiguous range to hold both OpRegion and the extended VBT and
    expose via one vfio region.
    
    The only difference between OpRegion 2.0 and 2.1 is where extended
    VBT is stored: For 2.0, RVDA is the absolute address of extended VBT
    while for 2.1, RVDA is the relative address of extended VBT to OpRegion
    baes, and there is no other difference between OpRegion 2.0 and 2.1.
    To support the non-contiguous region case as described, the updated read
    op will patch OpRegion version and RVDA on-the-fly accordingly. So that
    from vfio igd OpRegion view, only 2.1+ with contiguous extended VBT
    after OpRegion is exposed, regardless the underneath host OpRegion is
    2.0 or 2.1+. The mechanism makes it possible to support legacy OpRegion
    2.0 extended VBT systems with on the market, and support OpRegion 2.1+
    where the extended VBT isn't contiguous after OpRegion.
    
    Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
    Cc: Hang Yuan <hang.yuan@linux.intel.com>
    Cc: Swee Yee Fonn <swee.yee.fonn@intel.com>
    Cc: Fred Gao <fred.gao@intel.com>
    Signed-off-by: default avatarColin Xu <colin.xu@intel.com>
    Link: https://lore.kernel.org/r/20211012124855.52463-1-colin.xu@gmail.comSigned-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
    49ba1a29
vfio_pci_igd.c 11.1 KB