diff options
| author | Colin Xu <Colin.Xu@intel.com> | 2019-05-27 23:27:18 -0400 |
|---|---|---|
| committer | Zhenyu Wang <zhenyuw@linux.intel.com> | 2019-05-29 23:31:43 -0400 |
| commit | cb2808da74f07c0763edfa63f8e397f97c7a87a3 (patch) | |
| tree | f05f48dafe5ce58a3e13d0a6698dde565088d8a7 | |
| parent | 888c0094b2e2892b5916475d6f53356a7b53732b (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.c | 20 |
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 | ||
| 1792 | static 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, |
