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

Commit a94cf2e0 authored by Colin Xu's avatar Colin Xu Committed by Zhenyu Wang
Browse files

drm/i915/gvt: Enable mmio context init and switch for BXT.



Handle pending tlb flush, mocs/mmio switch and context as KBL.

Signed-off-by: default avatarColin Xu <colin.xu@intel.com>
Signed-off-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
parent d0f827bb
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -364,7 +364,8 @@ static void handle_tlb_pending_event(struct intel_vgpu *vgpu, int ring_id)
	 */
	fw = intel_uncore_forcewake_for_reg(dev_priv, reg,
					    FW_REG_READ | FW_REG_WRITE);
	if (ring_id == RCS && (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv)))
	if (ring_id == RCS && (IS_SKYLAKE(dev_priv) ||
			IS_KABYLAKE(dev_priv) || IS_BROXTON(dev_priv)))
		fw |= FORCEWAKE_RENDER;

	intel_uncore_forcewake_get(dev_priv, fw);
@@ -401,7 +402,7 @@ static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
	if (WARN_ON(ring_id >= ARRAY_SIZE(regs)))
		return;

	if (IS_KABYLAKE(dev_priv) && ring_id == RCS)
	if ((IS_KABYLAKE(dev_priv) || IS_BROXTON(dev_priv)) && ring_id == RCS)
		return;

	if (!pre && !gen9_render_mocs.initialized)
@@ -467,7 +468,9 @@ static void switch_mmio(struct intel_vgpu *pre,
	u32 old_v, new_v;

	dev_priv = pre ? pre->gvt->dev_priv : next->gvt->dev_priv;
	if (IS_SKYLAKE(dev_priv) || IS_KABYLAKE(dev_priv))
	if (IS_SKYLAKE(dev_priv)
		|| IS_KABYLAKE(dev_priv)
		|| IS_BROXTON(dev_priv))
		switch_mocs(pre, next, ring_id);

	for (mmio = dev_priv->gvt->engine_mmio_list.mmio;
@@ -479,7 +482,8 @@ static void switch_mmio(struct intel_vgpu *pre,
		 * state image on kabylake, it's initialized by lri command and
		 * save or restore with context together.
		 */
		if (IS_KABYLAKE(dev_priv) && mmio->in_context)
		if ((IS_KABYLAKE(dev_priv) || IS_BROXTON(dev_priv))
			&& mmio->in_context)
			continue;

		// save
@@ -574,7 +578,9 @@ void intel_gvt_init_engine_mmio_context(struct intel_gvt *gvt)
{
	struct engine_mmio *mmio;

	if (IS_SKYLAKE(gvt->dev_priv) || IS_KABYLAKE(gvt->dev_priv))
	if (IS_SKYLAKE(gvt->dev_priv) ||
		IS_KABYLAKE(gvt->dev_priv) ||
		IS_BROXTON(gvt->dev_priv))
		gvt->engine_mmio_list.mmio = gen9_engine_mmio_list;
	else
		gvt->engine_mmio_list.mmio = gen8_engine_mmio_list;