From: Zhao Yan Date: Tue, 8 May 2018 06:52:50 +0000 (+0800) Subject: drm/i915/gvt: let force_to_nonpriv cmd handler only valid for LRI cmd X-Git-Tag: v4.18-rc1~128^2~13^2~3^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb8ba171ae6c1e4f5fa027162c06d50fc2b43055;p=thirdparty%2Fkernel%2Flinux.git drm/i915/gvt: let force_to_nonpriv cmd handler only valid for LRI cmd the cmd_reg_handler() is called by cmds LRM, PIPE_CTRL, SRM... for LRM, SRM, we cannot get write data in a simple way. On other side, the force_to_nonpriv reigsters will only be written in LRI in current drivers. so we don't want to bother the handler to handle those memory access cmds, just leave a print message here. Signed-off-by: Zhao Yan Signed-off-by: Zhenyu Wang --- diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c index 536cb691a543b..36c6180e57693 100644 --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c @@ -813,14 +813,22 @@ static inline bool is_force_nonpriv_mmio(unsigned int offset) } static int force_nonpriv_reg_handler(struct parser_exec_state *s, - unsigned int offset, unsigned int index) + unsigned int offset, unsigned int index, char *cmd) { struct intel_gvt *gvt = s->vgpu->gvt; - unsigned int data = cmd_val(s, index + 1); + unsigned int data; u32 ring_base; u32 nopid; struct drm_i915_private *dev_priv = s->vgpu->gvt->dev_priv; + if (!strcmp(cmd, "lri")) + data = cmd_val(s, index + 1); + else { + gvt_err("Unexpected forcenonpriv 0x%x write from cmd %s\n", + offset, cmd); + return -EINVAL; + } + ring_base = dev_priv->engine[s->ring_id]->mmio_base; nopid = i915_mmio_reg_offset(RING_NOPID(ring_base)); @@ -877,7 +885,7 @@ static int cmd_reg_handler(struct parser_exec_state *s, return -EINVAL; if (is_force_nonpriv_mmio(offset) && - force_nonpriv_reg_handler(s, offset, index)) + force_nonpriv_reg_handler(s, offset, index, cmd)) return -EPERM; if (offset == i915_mmio_reg_offset(DERRMR) ||