drm/i915/gvt: let force_to_nonpriv cmd handler only valid for LRI cmd
authorZhao Yan <yan.y.zhao@intel.com>
Tue, 8 May 2018 06:52:50 +0000 (14:52 +0800)
committerZhi Wang <zhi.a.wang@intel.com>
Sun, 13 May 2018 21:18:56 +0000 (05:18 +0800)
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 <yan.y.zhao@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/cmd_parser.c

index 536cb691a543b8ea7db59731c0eaa88e02f63e07..36c6180e57693d79c0edb39fa1a243d13d9e8912 100644 (file)
@@ -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) ||