[PATCH v3 1/4] drm/i915/gvt: use cmd to restore in-context mmios to hw for gen9 platform
Zhenyu Wang
zhenyuw at linux.intel.com
Tue Apr 30 08:23:37 UTC 2019
On 2019.04.29 08:38:59 +0000, Li, Weinan Z wrote:
> > -----Original Message-----
> > From: Zhao, Yan Y
> > Sent: Monday, April 29, 2019 4:13 PM
> > To: intel-gvt-dev at lists.freedesktop.org
> > Cc: Zhao, Yan Y <yan.y.zhao at intel.com>; Li, Weinan Z <weinan.z.li at intel.com>
> > Subject: [PATCH v3 1/4] drm/i915/gvt: use cmd to restore in-context mmios
> > to hw for gen9 platform
> >
> > for restore-inhibit context, hardware will not load in-context mmios (engine
> > context part) to hardware, but hardware will save the mmio values in
> > hardware back to context image. So, in order to save correct values of vGPU
> > back to context image, values of vGPU mmios have to be loaded into
> > hardware first for restore-inhibit context.
> >
> > In this patch, the mechanism is applied to all gen9 platform.
> >
> > The reason excluding gen8 platforms is only because of lacking of testing on
> > those platforms.
> >
> > v2: update vreg when scanning indirect context for inhibit context for
> > gen9
> >
> > Cc: Weinan Li <weinan.z.li at intel.com>
> > Signed-off-by: Yan Zhao <yan.y.zhao at intel.com>
> > ---
> > drivers/gpu/drm/i915/gvt/cmd_parser.c | 14 +++++++++-----
> > drivers/gpu/drm/i915/gvt/mmio_context.c | 5 ++---
> > drivers/gpu/drm/i915/gvt/scheduler.c | 4 +---
> > 3 files changed, 12 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gvt/cmd_parser.c
> > b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> > index ab002cfd3cab..5cb59c0b4bbe 100644
> > --- a/drivers/gpu/drm/i915/gvt/cmd_parser.c
> > +++ b/drivers/gpu/drm/i915/gvt/cmd_parser.c
> > @@ -896,12 +896,16 @@ static int cmd_reg_handler(struct
> > parser_exec_state *s,
> > }
> >
> > /* TODO
> > - * Right now only scan LRI command on KBL and in inhibit context.
> > - * It's good enough to support initializing mmio by lri command in
> > - * vgpu inhibit context on KBL.
> > + * In order to let workload with inhibit context to generate
> > + * correct image data into memory, vregs values will be loaded to
> > + * hw via LRIs in the workload with inhibit context. But as
> > + * indirect context is loaded prior to LRIs in workload, we don't
> > + * want reg values specified in indirect context overwritten by
> > + * LRIs in workloads. So, when scanning an indirect context, we
> > + * update reg values in it into vregs, so LRIs in workload with
> > + * inhibit context will restore with correct values
> > */
> > - if ((IS_KABYLAKE(s->vgpu->gvt->dev_priv)
> > - || IS_COFFEELAKE(s->vgpu->gvt->dev_priv)) &&
> > + if (IS_GEN(gvt->dev_priv, 9) &&
> > intel_gvt_mmio_is_in_ctx(gvt, offset) &&
> > !strncmp(cmd, "lri", 3)) {
> > intel_gvt_hypervisor_read_gpa(s->vgpu,
> > diff --git a/drivers/gpu/drm/i915/gvt/mmio_context.c
> > b/drivers/gpu/drm/i915/gvt/mmio_context.c
> > index e7e14c842be4..a51c51b2c82e 100644
> > --- a/drivers/gpu/drm/i915/gvt/mmio_context.c
> > +++ b/drivers/gpu/drm/i915/gvt/mmio_context.c
> > @@ -469,11 +469,10 @@ static void switch_mmio(struct intel_vgpu *pre,
> > continue;
> > /*
> > * No need to do save or restore of the mmio which is in context
> > - * state image on kabylake, it's initialized by lri command and
> > + * state image on gen9, it's initialized by lri command and
> > * save or restore with context together.
> > */
> > - if ((IS_KABYLAKE(dev_priv) || IS_BROXTON(dev_priv)
> > - || IS_COFFEELAKE(dev_priv)) && mmio->in_context)
> > + if (IS_GEN(dev_priv, 9) && mmio->in_context)
> > continue;
> >
> > // save
>
> @@ -392,9 +392,7 @@ static void switch_mocs(struct intel_vgpu *pre, struct intel_vgpu *next,
> return;
>
> if (ring_id == RCS0 &&
> - (IS_KABYLAKE(dev_priv) ||
> - IS_BROXTON(dev_priv) ||
> - IS_COFFEELAKE(dev_priv)))
> + IS_GEN(dev_priv, 9))
> return;
> we can ignore the MOCS save/restore if it's RCS, since it's in context MMIO.
>
Why it is not skipped on SKL now?
> > diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c
> > b/drivers/gpu/drm/i915/gvt/scheduler.c
> > index 8998fa5ab198..1f3ba8efb994 100644
> > --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> > +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> > @@ -299,9 +299,7 @@ static int copy_workload_to_ring_buffer(struct
> > intel_vgpu_workload *workload)
> > void *shadow_ring_buffer_va;
> > u32 *cs;
> >
> > - if ((IS_KABYLAKE(req->i915) || IS_BROXTON(req->i915)
> > - || IS_COFFEELAKE(req->i915))
> > - && is_inhibit_context(req->hw_context))
> > + if (IS_GEN(req->i915, 9) && is_inhibit_context(req->hw_context))
> > intel_vgpu_restore_inhibit_context(vgpu, req);
> >
> > /* allocate shadow ring buffer */
> > --
> > 2.17.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/20190430/d3cc117a/attachment.sig>
More information about the intel-gvt-dev
mailing list