aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChangbin Du <changbin.du@intel.com>2017-01-12 22:16:01 -0500
committerZhenyu Wang <zhenyuw@linux.intel.com>2017-01-13 02:05:38 -0500
commit97d58f7dd0ff12e5fddeffb40aed845daa628149 (patch)
treea24bebdbe0347fa05edbbc9994f38d71fb8e3164
parentcdcc43479c9b929940a1955d2e7bae696d2b9496 (diff)
drm/i915/gvt: introduce intel_vgpu_reset_mmio() to reset mmio space
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>
-rw-r--r--drivers/gpu/drm/i915/gvt/mmio.c39
-rw-r--r--drivers/gpu/drm/i915/gvt/mmio.h1
2 files changed, 26 insertions, 14 deletions
diff --git a/drivers/gpu/drm/i915/gvt/mmio.c b/drivers/gpu/drm/i915/gvt/mmio.c
index f7da735b7919..4df078bc5d04 100644
--- a/drivers/gpu/drm/i915/gvt/mmio.c
+++ b/drivers/gpu/drm/i915/gvt/mmio.c
@@ -304,6 +304,26 @@ err:
304 return ret; 304 return ret;
305} 305}
306 306
307
308/**
309 * intel_vgpu_reset_mmio - reset virtual MMIO space
310 * @vgpu: a vGPU
311 *
312 */
313void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu)
314{
315 struct intel_gvt *gvt = vgpu->gvt;
316 const struct intel_gvt_device_info *info = &gvt->device_info;
317
318 memcpy(vgpu->mmio.vreg, gvt->firmware.mmio, info->mmio_size);
319 memcpy(vgpu->mmio.sreg, gvt->firmware.mmio, info->mmio_size);
320
321 vgpu_vreg(vgpu, GEN6_GT_THREAD_STATUS_REG) = 0;
322
323 /* set the bit 0:2(Core C-State ) to C0 */
324 vgpu_vreg(vgpu, GEN6_GT_CORE_STATUS) = 0;
325}
326
307/** 327/**
308 * intel_vgpu_init_mmio - init MMIO space 328 * intel_vgpu_init_mmio - init MMIO space
309 * @vgpu: a vGPU 329 * @vgpu: a vGPU
@@ -315,22 +335,13 @@ int intel_vgpu_init_mmio(struct intel_vgpu *vgpu)
315{ 335{
316 const struct intel_gvt_device_info *info = &vgpu->gvt->device_info; 336 const struct intel_gvt_device_info *info = &vgpu->gvt->device_info;
317 337
318 if (vgpu->mmio.vreg) 338 vgpu->mmio.vreg = vzalloc(info->mmio_size * 2);
319 memset(vgpu->mmio.vreg, 0, info->mmio_size * 2); 339 if (!vgpu->mmio.vreg)
320 else { 340 return -ENOMEM;
321 vgpu->mmio.vreg = vzalloc(info->mmio_size * 2);
322 if (!vgpu->mmio.vreg)
323 return -ENOMEM;
324 }
325 vgpu->mmio.sreg = vgpu->mmio.vreg + info->mmio_size;
326 341
327 memcpy(vgpu->mmio.vreg, vgpu->gvt->firmware.mmio, info->mmio_size); 342 vgpu->mmio.sreg = vgpu->mmio.vreg + info->mmio_size;
328 memcpy(vgpu->mmio.sreg, vgpu->gvt->firmware.mmio, info->mmio_size);
329
330 vgpu_vreg(vgpu, GEN6_GT_THREAD_STATUS_REG) = 0;
331 343
332 /* set the bit 0:2(Core C-State ) to C0 */ 344 intel_vgpu_reset_mmio(vgpu);
333 vgpu_vreg(vgpu, GEN6_GT_CORE_STATUS) = 0;
334 345
335 return 0; 346 return 0;
336} 347}
diff --git a/drivers/gpu/drm/i915/gvt/mmio.h b/drivers/gpu/drm/i915/gvt/mmio.h
index 1b74ac9650d5..3bc620f56f35 100644
--- a/drivers/gpu/drm/i915/gvt/mmio.h
+++ b/drivers/gpu/drm/i915/gvt/mmio.h
@@ -87,6 +87,7 @@ struct intel_gvt_mmio_info *intel_gvt_find_mmio_info(struct intel_gvt *gvt,
87}) 87})
88 88
89int intel_vgpu_init_mmio(struct intel_vgpu *vgpu); 89int intel_vgpu_init_mmio(struct intel_vgpu *vgpu);
90void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu);
90void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu); 91void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu);
91 92
92int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa); 93int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa);