aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Xu <Colin.Xu@intel.com>2019-05-27 23:27:18 -0400
committerZhenyu Wang <zhenyuw@linux.intel.com>2019-05-29 23:31:43 -0400
commitcb2808da74f07c0763edfa63f8e397f97c7a87a3 (patch)
treef05f48dafe5ce58a3e13d0a6698dde565088d8a7
parent888c0094b2e2892b5916475d6f53356a7b53732b (diff)
drm/i915/gvt: Fix vGPU CSFE_CHICKEN1_REG mmio handler
Enter failsafe if vgpu tries to change CSFE_CHICKEN1_REG setting which is controlled by host. Reviewed-by: Zhenyu Wang <zhenyuw@linux.intel.com> Signed-off-by: Colin Xu <colin.xu@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
-rw-r--r--drivers/gpu/drm/i915/gvt/handlers.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
index edb1416585f5..7732caa1a546 100644
--- a/drivers/gpu/drm/i915/gvt/handlers.c
+++ b/drivers/gpu/drm/i915/gvt/handlers.c
@@ -1789,6 +1789,21 @@ static int ring_reset_ctl_write(struct intel_vgpu *vgpu,
1789 return 0; 1789 return 0;
1790} 1790}
1791 1791
1792static int csfe_chicken1_mmio_write(struct intel_vgpu *vgpu,
1793 unsigned int offset, void *p_data,
1794 unsigned int bytes)
1795{
1796 u32 data = *(u32 *)p_data;
1797
1798 (*(u32 *)p_data) &= ~_MASKED_BIT_ENABLE(0x18);
1799 write_vreg(vgpu, offset, p_data, bytes);
1800
1801 if (data & _MASKED_BIT_ENABLE(0x10) || data & _MASKED_BIT_ENABLE(0x8))
1802 enter_failsafe_mode(vgpu, GVT_FAILSAFE_UNSUPPORTED_GUEST);
1803
1804 return 0;
1805}
1806
1792#define MMIO_F(reg, s, f, am, rm, d, r, w) do { \ 1807#define MMIO_F(reg, s, f, am, rm, d, r, w) do { \
1793 ret = new_mmio_info(gvt, i915_mmio_reg_offset(reg), \ 1808 ret = new_mmio_info(gvt, i915_mmio_reg_offset(reg), \
1794 f, s, am, rm, d, r, w); \ 1809 f, s, am, rm, d, r, w); \
@@ -3075,7 +3090,10 @@ static int init_skl_mmio_info(struct intel_gvt *gvt)
3075 MMIO_D(_MMIO(_PLANE_KEYMSK_1(PIPE_C)), D_SKL_PLUS); 3090 MMIO_D(_MMIO(_PLANE_KEYMSK_1(PIPE_C)), D_SKL_PLUS);
3076 3091
3077 MMIO_D(_MMIO(0x44500), D_SKL_PLUS); 3092 MMIO_D(_MMIO(0x44500), D_SKL_PLUS);
3078 MMIO_DFH(GEN9_CSFE_CHICKEN1_RCS, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL); 3093#define CSFE_CHICKEN1_REG(base) _MMIO((base) + 0xD4)
3094 MMIO_RING_DFH(CSFE_CHICKEN1_REG, D_SKL_PLUS, F_MODE_MASK | F_CMD_ACCESS,
3095 NULL, csfe_chicken1_mmio_write);
3096#undef CSFE_CHICKEN1_REG
3079 MMIO_DFH(GEN8_HDC_CHICKEN1, D_SKL_PLUS, F_MODE_MASK | F_CMD_ACCESS, 3097 MMIO_DFH(GEN8_HDC_CHICKEN1, D_SKL_PLUS, F_MODE_MASK | F_CMD_ACCESS,
3080 NULL, NULL); 3098 NULL, NULL);
3081 MMIO_DFH(GEN9_WM_CHICKEN3, D_SKL_PLUS, F_MODE_MASK | F_CMD_ACCESS, 3099 MMIO_DFH(GEN9_WM_CHICKEN3, D_SKL_PLUS, F_MODE_MASK | F_CMD_ACCESS,