drm/i915/gvt: refine pcode write emulation
authorWeinan Li <weinan.z.li@intel.com>
Wed, 22 Feb 2017 03:03:24 +0000 (11:03 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Thu, 23 Feb 2017 09:33:15 +0000 (17:33 +0800)
In GVT-g we always emulate as pcode read/write success and ready for access
anytime, since we don't touch real physical registers here.

Add 'SKL_PCODE_CDCLK_CONTROL' write emulation, without it will cause
skl_set_cdclk fail in guest.

Signed-off-by: Weinan Li <weinan.z.li@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/handlers.c

index bfe12ddb02107dec7f344d23039ee5bb82ed72c7..f89b183488e98eb7eb561c7e7d957c6a08a8070f 100644 (file)
@@ -1315,6 +1315,9 @@ static int mailbox_write(struct intel_vgpu *vgpu, unsigned int offset,
                else
                        *data0 = 0x61514b3d;
                break;
+       case SKL_PCODE_CDCLK_CONTROL:
+               *data0 = SKL_CDCLK_READY_FOR_CHANGE;
+               break;
        case 0x5:
                *data0 |= 0x1;
                break;
@@ -1322,8 +1325,13 @@ static int mailbox_write(struct intel_vgpu *vgpu, unsigned int offset,
 
        gvt_dbg_core("VM(%d) write %x to mailbox, return data0 %x\n",
                     vgpu->id, value, *data0);
-
-       value &= ~(1 << 31);
+       /**
+        * PCODE_READY clear means ready for pcode read/write,
+        * PCODE_ERROR_MASK clear means no error happened. In GVT-g we
+        * always emulate as pcode read/write success and ready for access
+        * anytime, since we don't touch real physical registers here.
+        */
+       value &= ~(GEN6_PCODE_READY | GEN6_PCODE_ERROR_MASK);
        return intel_vgpu_default_mmio_write(vgpu, offset, &value, bytes);
 }