diff options
author | Zhao Yan <yan.y.zhao@intel.com> | 2018-05-08 02:52:50 -0400 |
---|---|---|
committer | Zhi Wang <zhi.a.wang@intel.com> | 2018-05-13 17:18:56 -0400 |
commit | cb8ba171ae6c1e4f5fa027162c06d50fc2b43055 (patch) | |
tree | 4504f349a0e528bdd2c5e56600dba2953cbf7f15 | |
parent | 0438a1059877396319b90da289f1473c9c973cd8 (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.c | 14 |
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 | ||
815 | static int force_nonpriv_reg_handler(struct parser_exec_state *s, | 815 | static 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) || |