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>
This commit is contained in:
@@ -304,6 +304,26 @@ err:
|
|||||||
return ret;
|
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
|
* intel_vgpu_init_mmio - init MMIO space
|
||||||
* @vgpu: a vGPU
|
* @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;
|
const struct intel_gvt_device_info *info = &vgpu->gvt->device_info;
|
||||||
|
|
||||||
if (vgpu->mmio.vreg)
|
vgpu->mmio.vreg = vzalloc(info->mmio_size * 2);
|
||||||
memset(vgpu->mmio.vreg, 0, info->mmio_size * 2);
|
if (!vgpu->mmio.vreg)
|
||||||
else {
|
return -ENOMEM;
|
||||||
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.sreg = vgpu->mmio.vreg + info->mmio_size;
|
||||||
|
|
||||||
memcpy(vgpu->mmio.vreg, vgpu->gvt->firmware.mmio, info->mmio_size);
|
intel_vgpu_reset_mmio(vgpu);
|
||||||
memcpy(vgpu->mmio.sreg, vgpu->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;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
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);
|
void intel_vgpu_clean_mmio(struct intel_vgpu *vgpu);
|
||||||
|
|
||||||
int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa);
|
int intel_vgpu_gpa_to_mmio_offset(struct intel_vgpu *vgpu, u64 gpa);
|
||||||
|
|||||||
Reference in New Issue
Block a user