drm/i915/gvt: introduce intel_vgpu_reset_mmio() to reset mmio space
authorChangbin Du <changbin.du@intel.com>
Fri, 13 Jan 2017 03:16:01 +0000 (11:16 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Fri, 13 Jan 2017 07:05:38 +0000 (15:05 +0800)
This patch introduces a new function intel_vgpu_reset_mmio() to
reset vGPU MMIO space (virtual registers of the vGPU). The default
values are loaded as firmware during gvt inititiation.

Signed-off-by: Changbin Du <changbin.du@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/mmio.c
drivers/gpu/drm/i915/gvt/mmio.h

index f7da735b79190a651d5794b841037757b8073df7..4df078bc5d042b1f4fc411fbb0f98c83a3cba729 100644 (file)
@@ -304,6 +304,26 @@ err:
        return ret;
 }
 
+
+/**
+ * intel_vgpu_reset_mmio - reset virtual MMIO space
+ * @vgpu: a vGPU
+ *
+ */
+void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu)
+{
+       struct intel_gvt *gvt = vgpu->gvt;
+       const struct intel_gvt_device_info *info = &gvt->device_info;
+
+       memcpy(vgpu->mmio.vreg, gvt->firmware.mmio, info->mmio_size);
+       memcpy(vgpu->mmio.sreg, gvt->firmware.mmio, info->mmio_size);
+
+       vgpu_vreg(vgpu, GEN6_GT_THREAD_STATUS_REG) = 0;
+
+       /* set the bit 0:2(Core C-State ) to C0 */
+       vgpu_vreg(vgpu, GEN6_GT_CORE_STATUS) = 0;
+}
+
 /**
  * intel_vgpu_init_mmio - init MMIO  space
  * @vgpu: a vGPU
@@ -315,22 +335,13 @@ int intel_vgpu_init_mmio(struct intel_vgpu *vgpu)
 {
        const struct intel_gvt_device_info *info = &vgpu->gvt->device_info;
 
-       if (vgpu->mmio.vreg)
-               memset(vgpu->mmio.vreg, 0, info->mmio_size * 2);
-       else {
-               vgpu->mmio.vreg = vzalloc(info->mmio_size * 2);
-               if (!vgpu->mmio.vreg)
-                       return -ENOMEM;
-       }
-       vgpu->mmio.sreg = vgpu->mmio.vreg + info->mmio_size;
+       vgpu->mmio.vreg = vzalloc(info->mmio_size * 2);
+       if (!vgpu->mmio.vreg)
+               return -ENOMEM;
 
-       memcpy(vgpu->mmio.vreg, vgpu->gvt->firmware.mmio, info->mmio_size);
-       memcpy(vgpu->mmio.sreg, vgpu->gvt->firmware.mmio, info->mmio_size);
-
-       vgpu_vreg(vgpu, GEN6_GT_THREAD_STATUS_REG) = 0;
+       vgpu->mmio.sreg = vgpu->mmio.vreg + info->mmio_size;
 
-       /* set the bit 0:2(Core C-State ) to C0 */
-       vgpu_vreg(vgpu, GEN6_GT_CORE_STATUS) = 0;
+       intel_vgpu_reset_mmio(vgpu);
 
        return 0;
 }
index 1b74ac9650d50a43af87d1e021ab2e2845b5d603..3bc620f56f351e774dc8658c9f06c79d0b24446b 100644 (file)
@@ -87,6 +87,7 @@ struct intel_gvt_mmio_info *intel_gvt_find_mmio_info(struct intel_gvt *gvt,
 })
 
 int intel_vgpu_init_mmio(struct intel_vgpu *vgpu);
+void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu);
 void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu);
 
 int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa);