Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23736d1b authored by Ping Gao's avatar Ping Gao Committed by Zhenyu Wang
Browse files

drm/i915/gvt: add full vGPU reset support



Full vGPU reset need to release all the shadow PPGGT pages to avoid
unnecessary write-protect and also should re-initialize pvinfo after
resetting vregs to keep pvinfo correct.

Signed-off-by: default avatarPing Gao <ping.a.gao@intel.com>
Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
parent 0a8b66e3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -382,6 +382,8 @@ void intel_vgpu_clean_opregion(struct intel_vgpu *vgpu);
int intel_vgpu_init_opregion(struct intel_vgpu *vgpu, u32 gpa);

int intel_vgpu_emulate_opregion_request(struct intel_vgpu *vgpu, u32 swsci);
int setup_vgpu_mmio(struct intel_vgpu *vgpu);
void populate_pvinfo_page(struct intel_vgpu *vgpu);

#include "mpt.h"

+10 −0
Original line number Diff line number Diff line
@@ -251,6 +251,16 @@ static int handle_device_reset(struct intel_vgpu *vgpu, unsigned int offset,

	intel_vgpu_reset_execlist(vgpu, bitmap);

	/* full GPU reset */
	if (bitmap == 0xff) {
		mutex_unlock(&vgpu->gvt->lock);
		intel_vgpu_clean_gtt(vgpu);
		mutex_lock(&vgpu->gvt->lock);
		setup_vgpu_mmio(vgpu);
		populate_pvinfo_page(vgpu);
		intel_vgpu_init_gtt(vgpu);
	}

	vgpu->resetting = false;

	return 0;
+2 −2
Original line number Diff line number Diff line
@@ -41,7 +41,7 @@ static void clean_vgpu_mmio(struct intel_vgpu *vgpu)
	vgpu->mmio.vreg = vgpu->mmio.sreg = NULL;
}

static int setup_vgpu_mmio(struct intel_vgpu *vgpu)
int setup_vgpu_mmio(struct intel_vgpu *vgpu)
{
	struct intel_gvt *gvt = vgpu->gvt;
	const struct intel_gvt_device_info *info = &gvt->device_info;
@@ -103,7 +103,7 @@ static void setup_vgpu_cfg_space(struct intel_vgpu *vgpu,
	}
}

static void populate_pvinfo_page(struct intel_vgpu *vgpu)
void populate_pvinfo_page(struct intel_vgpu *vgpu)
{
	/* setup the ballooning information */
	vgpu_vreg64(vgpu, vgtif_reg(magic)) = VGT_MAGIC;