aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZhao Yan <yan.y.zhao@intel.com>2018-05-08 02:52:50 -0400
committerZhi Wang <zhi.a.wang@intel.com>2018-05-13 17:18:56 -0400
commitcb8ba171ae6c1e4f5fa027162c06d50fc2b43055 (patch)
tree4504f349a0e528bdd2c5e56600dba2953cbf7f15
parent0438a1059877396319b90da289f1473c9c973cd8 (diff)
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 <yan.y.zhao@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
-rw-r--r--drivers/gpu/drm/i915/gvt/cmd_parser.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
index 536cb691a543..36c6180e5769 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)
813} 813}
814 814
815static int force_nonpriv_reg_handler(struct parser_exec_state *s, 815static int force_nonpriv_reg_handler(struct parser_exec_state *s,
816 unsigned int offset, unsigned int index) 816 unsigned int offset, unsigned int index, char *cmd)
817{ 817{
818 struct intel_gvt *gvt = s->vgpu->gvt; 818 struct intel_gvt *gvt = s->vgpu->gvt;
819 unsigned int data = cmd_val(s, index + 1); 819 unsigned int data;
820 u32 ring_base; 820 u32 ring_base;
821 u32 nopid; 821 u32 nopid;
822 struct drm_i915_private *dev_priv = s->vgpu->gvt->dev_priv; 822 struct drm_i915_private *dev_priv = s->vgpu->gvt->dev_priv;
823 823
824 if (!strcmp(cmd, "lri"))
825 data = cmd_val(s, index + 1);
826 else {
827 gvt_err("Unexpected forcenonpriv 0x%x write from cmd %s\n",
828 offset, cmd);
829 return -EINVAL;
830 }
831
824 ring_base = dev_priv->engine[s->ring_id]->mmio_base; 832 ring_base = dev_priv->engine[s->ring_id]->mmio_base;
825 nopid = i915_mmio_reg_offset(RING_NOPID(ring_base)); 833 nopid = i915_mmio_reg_offset(RING_NOPID(ring_base));
826 834
@@ -877,7 +885,7 @@ static int cmd_reg_handler(struct parser_exec_state *s,
877 return -EINVAL; 885 return -EINVAL;
878 886
879 if (is_force_nonpriv_mmio(offset) && 887 if (is_force_nonpriv_mmio(offset) &&
880 force_nonpriv_reg_handler(s, offset, index)) 888 force_nonpriv_reg_handler(s, offset, index, cmd))
881 return -EPERM; 889 return -EPERM;
882 890
883 if (offset == i915_mmio_reg_offset(DERRMR) || 891 if (offset == i915_mmio_reg_offset(DERRMR) ||