drm/i915/gvt: correct the emulation in TLB control handler
authorPing Gao <ping.a.gao@intel.com>
Thu, 27 Oct 2016 06:37:41 +0000 (14:37 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Mon, 7 Nov 2016 06:16:59 +0000 (14:16 +0800)
Need a explicit write_vreg in TLB MMIO write handler, beside that
TLB vreg should update correspondingly following HW status to do
correct emulation.

Signed-off-by: Ping Gao <ping.a.gao@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/handlers.c
drivers/gpu/drm/i915/gvt/render.c

index 0b62f4621a854bfbaeaf395db0585197ac35ece3..2d97fb78343edd676520916f0b3e7b0c3bbf9d7b 100644 (file)
@@ -1370,6 +1370,8 @@ static int gvt_reg_tlb_control_handler(struct intel_vgpu *vgpu,
        int rc = 0;
        unsigned int id = 0;
 
+       write_vreg(vgpu, offset, p_data, bytes);
+
        switch (offset) {
        case 0x4260:
                id = RCS;
index 3af894b3d257c9012682912437b105512680cf83..44136b1f3aabc78697d6c885a8b9c67a74ebe003 100644 (file)
@@ -152,6 +152,8 @@ static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
 
        if (wait_for_atomic((I915_READ_FW(reg) == 0), 50))
                gvt_err("timeout in invalidate ring (%d) tlb\n", ring_id);
+       else
+               vgpu_vreg(vgpu, regs[ring_id]) = 0;
 
        intel_uncore_forcewake_put(dev_priv, fw);