[PATCH v2 2/4] drm/i915/gvt: let NOPID be the default value of force_to_nonpriv registers
Zhenyu Wang
zhenyuw at linux.intel.com
Tue May 8 02:42:48 UTC 2018
On 2018.05.07 15:13:08 +0800, Zhao Yan wrote:
> Each ring has a NOPID register and currently they are regarded as default
> value of force_to_nonpriv registers in guest drivers
>
> Signed-off-by: Zhao Yan <yan.y.zhao at intel.com>
> ---
Reviewed-by: Zhenyu Wang <zhenyuw at linux.intel.com>
> drivers/gpu/drm/i915/gvt/cmd_parser.c | 9 ++++++++-
> drivers/gpu/drm/i915/gvt/handlers.c | 22 ++++++++++++++--------
> 2 files changed, 22 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> index b54b1f3..4f36e2f 100644
> --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
> +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> @@ -820,8 +820,15 @@ static int force_nonpriv_reg_handler(struct parser_exec_state *s,
> {
> struct intel_gvt *gvt = s->vgpu->gvt;
> unsigned int data = cmd_val(s, index + 1);
> + u32 ring_base;
> + u32 nopid;
> + struct drm_i915_private *dev_priv = s->vgpu->gvt->dev_priv;
> +
> + ring_base = dev_priv->engine[s->ring_id]->mmio_base;
> + nopid = i915_mmio_reg_offset(RING_NOPID(ring_base));
>
> - if (!intel_gvt_in_force_nonpriv_whitelist(gvt, data)) {
> + if (!intel_gvt_in_force_nonpriv_whitelist(gvt, data) &&
> + data != nopid) {
> gvt_err("Unexpected forcenonpriv 0x%x LRI write, value=0x%x\n",
> offset, data);
> return -EPERM;
> diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
> index f1a5016..08f96f9 100644
> --- a/drivers/gpu/drm/i915/gvt/handlers.c
> +++ b/drivers/gpu/drm/i915/gvt/handlers.c
> @@ -477,21 +477,27 @@ static int force_nonpriv_write(struct intel_vgpu *vgpu,
> unsigned int offset, void *p_data, unsigned int bytes)
> {
> u32 reg_nonpriv = *(u32 *)p_data;
> + int ring_id = intel_gvt_render_mmio_to_ring_id(vgpu->gvt, offset);
> + u32 ring_base;
> + struct drm_i915_private *dev_priv = vgpu->gvt->dev_priv;
> int ret = -EINVAL;
>
> - if ((bytes != 4) || ((offset & (bytes - 1)) != 0)) {
> - gvt_err("vgpu(%d) Invalid FORCE_NONPRIV offset %x(%dB)\n",
> - vgpu->id, offset, bytes);
> + if ((bytes != 4) || ((offset & (bytes - 1)) != 0) || ring_id < 0) {
> + gvt_err("vgpu(%d) ring %d Invalid FORCE_NONPRIV offset %x(%dB)\n",
> + vgpu->id, ring_id, offset, bytes);
> return ret;
> }
>
> - if (in_whitelist(reg_nonpriv)) {
> + ring_base = dev_priv->engine[ring_id]->mmio_base;
> +
> + if (in_whitelist(reg_nonpriv) ||
> + reg_nonpriv == i915_mmio_reg_offset(RING_NOPID(ring_base))) {
> ret = intel_vgpu_default_mmio_write(vgpu, offset, p_data,
> bytes);
> - } else {
> - gvt_err("vgpu(%d) Invalid FORCE_NONPRIV write %x\n",
> - vgpu->id, reg_nonpriv);
> - }
> + } else
> + gvt_err("vgpu(%d) Invalid FORCE_NONPRIV write %x at offset %x\n",
> + vgpu->id, reg_nonpriv, offset);
> +
> return ret;
> }
>
> --
> 1.9.1
>
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev
--
Open Source Technology Center, Intel ltd.
$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20180508/d7fe39c1/attachment.sig>
More information about the intel-gvt-dev
mailing list