diff options
author | Changbin Du <changbin.du@intel.com> | 2017-01-12 22:16:01 -0500 |
---|---|---|
committer | Zhenyu Wang <zhenyuw@linux.intel.com> | 2017-01-13 02:05:38 -0500 |
commit | 97d58f7dd0ff12e5fddeffb40aed845daa628149 (patch) | |
tree | a24bebdbe0347fa05edbbc9994f38d71fb8e3164 | |
parent | cdcc43479c9b929940a1955d2e7bae696d2b9496 (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.c | 39 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/gvt/mmio.h | 1 |
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 | */ | ||
313 | void 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 | ||
89 | int intel_vgpu_init_mmio(struct intel_vgpu *vgpu); | 89 | int intel_vgpu_init_mmio(struct intel_vgpu *vgpu); |
90 | void intel_vgpu_reset_mmio(struct intel_vgpu *vgpu); | ||
90 | void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu); | 91 | void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu); |
91 | 92 | ||
92 | int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa); | 93 | int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa); |