• Changbin Du's avatar
    drm/i915/gvt: protect RO and Rsvd bits of virtual vgpu configuration space · c2e04fda
    Changbin Du authored
    Per PCI specification, Configuration Register has different types (RO,
    RW, RW1C, Rsvd). For RO Register bits are read-only and cannot be
    altered by software. For RW1C Register bits indicate status when read.
    A Set bit indicates a status event which is Cleared by writing a 1b.
    Writing a 0b to RW1C bits has no effect. Reserved Register is for future
    implementations, and they are read-only and must return zero when read.
    
    Current vGPU configuration write emulation just copy the value as it is.
    So we haven't emulated RO, RW1C and Rsvd Registers correctly. This patch
    is following the Spec to correct emulation logic. We add a function
    vgpu_cfg_mem_write to wrap the access to vGPU configuration memory.
    The write function uses a RW Register bitmap to avoid RO bits be
    overwritten, and emulate RW1C behavior for the particular status Register.
    
    v2:
      new = src[i] --> new = src[i] & mask (zhenyu)
    Signed-off-by: default avatarChangbin Du <changbin.du@intel.com>
    Cc: Xiaoguang Chen <xiaoguang.chen@intel.com>
    Cc: Zhiyuan Lv <zhiyuan.lv@intel.com>
    Cc: Min He <min.he@intel.com>
    Reviewed-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
    Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
    c2e04fda
cfg_space.c 10.8 KB