Message ID | 20221031055117.1043830-1-alexander.usyskin@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | drm/i915/gsc: Only initialize GSC in tile 0 | expand |
On Mon, Oct 31, 2022 at 07:51:17AM +0200, Alexander Usyskin wrote: > From: José Roberto de Souza <jose.souza@intel.com> > > For multi-tile setups the GSC operational only on the tile 0. > Skip GSC auxiliary device creation for all other tiles. > > Cc: Tomas Winkler <tomas.winkler@intel.com> > Cc: Vitaly Lubart <vitaly.lubart@intel.com> > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> > --- > drivers/gpu/drm/i915/gt/intel_gt.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c > index 2e796ffad911..92ad8cd45ddb 100644 > --- a/drivers/gpu/drm/i915/gt/intel_gt.c > +++ b/drivers/gpu/drm/i915/gt/intel_gt.c > @@ -456,7 +456,10 @@ void intel_gt_chipset_flush(struct intel_gt *gt) > > void intel_gt_driver_register(struct intel_gt *gt) > { > - intel_gsc_init(>->gsc, gt->i915); > + if (gt->info.id == 0) > + intel_gsc_init(>->gsc, gt->i915); > + else > + drm_dbg(>->i915->drm, "Not initializing gsc for remote tiles\n"); It looks to me that we need to move the gsc out of the intel_gt instead of workaround the initialization. > > intel_rps_driver_register(>->rps); > > @@ -787,7 +790,8 @@ void intel_gt_driver_unregister(struct intel_gt *gt) > > intel_gt_sysfs_unregister(gt); > intel_rps_driver_unregister(>->rps); > - intel_gsc_fini(>->gsc); > + if (gt->info.id == 0) > + intel_gsc_fini(>->gsc); > > intel_pxp_fini(>->pxp); > > -- > 2.34.1 >
> > On Mon, Oct 31, 2022 at 07:51:17AM +0200, Alexander Usyskin wrote: > > From: José Roberto de Souza <jose.souza@intel.com> > > > > For multi-tile setups the GSC operational only on the tile 0. > > Skip GSC auxiliary device creation for all other tiles. > > > > Cc: Tomas Winkler <tomas.winkler@intel.com> > > Cc: Vitaly Lubart <vitaly.lubart@intel.com> > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > > Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> > > --- > > drivers/gpu/drm/i915/gt/intel_gt.c | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c > > b/drivers/gpu/drm/i915/gt/intel_gt.c > > index 2e796ffad911..92ad8cd45ddb 100644 > > --- a/drivers/gpu/drm/i915/gt/intel_gt.c > > +++ b/drivers/gpu/drm/i915/gt/intel_gt.c > > @@ -456,7 +456,10 @@ void intel_gt_chipset_flush(struct intel_gt *gt) > > > > void intel_gt_driver_register(struct intel_gt *gt) { > > - intel_gsc_init(>->gsc, gt->i915); > > + if (gt->info.id == 0) > > + intel_gsc_init(>->gsc, gt->i915); > > + else > > + drm_dbg(>->i915->drm, "Not initializing gsc for remote > tiles\n"); > > It looks to me that we need to move the gsc out of the intel_gt instead of > workaround the initialization. The interrupts are handled by gt, so where this should go ?
On Mon, Oct 31, 2022 at 05:48:07AM -0400, Winkler, Tomas wrote: > > > > > On Mon, Oct 31, 2022 at 07:51:17AM +0200, Alexander Usyskin wrote: > > > From: José Roberto de Souza <jose.souza@intel.com> > > > > > > For multi-tile setups the GSC operational only on the tile 0. > > > Skip GSC auxiliary device creation for all other tiles. > > > > > > Cc: Tomas Winkler <tomas.winkler@intel.com> > > > Cc: Vitaly Lubart <vitaly.lubart@intel.com> > > > Signed-off-by: José Roberto de Souza <jose.souza@intel.com> > > > Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> > > > --- > > > drivers/gpu/drm/i915/gt/intel_gt.c | 8 ++++++-- > > > 1 file changed, 6 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c > > > b/drivers/gpu/drm/i915/gt/intel_gt.c > > > index 2e796ffad911..92ad8cd45ddb 100644 > > > --- a/drivers/gpu/drm/i915/gt/intel_gt.c > > > +++ b/drivers/gpu/drm/i915/gt/intel_gt.c > > > @@ -456,7 +456,10 @@ void intel_gt_chipset_flush(struct intel_gt *gt) > > > > > > void intel_gt_driver_register(struct intel_gt *gt) { > > > - intel_gsc_init(>->gsc, gt->i915); > > > + if (gt->info.id == 0) > > > + intel_gsc_init(>->gsc, gt->i915); > > > + else > > > + drm_dbg(>->i915->drm, "Not initializing gsc for remote > > tiles\n"); > > > > It looks to me that we need to move the gsc out of the intel_gt instead of > > workaround the initialization. > > The interrupts are handled by gt, so where this should go ? > Ouch, I've seen it now. But still this patch brings me more doubts... is gsc really a per-gt thing? if not why the gsc irq is in the gt domain? if yes why the one in the second tile not operational? if it is not a per-tile thing and only the irq is in a bad spot we could still move it outside gt and make the irq to be redirected. well, if it is really a per tile thing but it is fused of, do we have hw ways to detect that? if it is really a tile thing and we don't have better ways to identify we might want to do with this patch, but add a bit more information on the reasons and also double checking if by avoiding the initialization we are sure that we are not going to reach any case of attempting to utilize the un-initialized gsc.
> > > > > > It looks to me that we need to move the gsc out of the intel_gt instead of > > > workaround the initialization. > > > > The interrupts are handled by gt, so where this should go ? > > > > Ouch, I've seen it now. But still this patch brings me more doubts... > > is gsc really a per-gt thing? if not why the gsc irq is in the gt domain? > if yes why the one in the second tile not operational? > > if it is not a per-tile thing and only the irq is in a bad spot we could > still move it outside gt and make the irq to be redirected. > > well, if it is really a per tile thing but it is fused of, do we have hw > ways to detect that? > > if it is really a tile thing and we don't have better ways to identify > we might want to do with this patch, but add a bit more information on the > reasons and also double checking if by avoiding the initialization we are > sure that we are not going to reach any case of attempting to utilize the > un-initialized gsc. The GSC is present on all tiles but functional only on the first one. There is no way to detect if GSC is functional per-tile. Good point about double check, we have also interrupt handler. Should not fire without GSC running, but better to protect here too. We have code that skip initialization of one of the heads provided by GSC. I'll utilize the same path to disable here, so that should be safe and already broadly tested. Will publish new version soon. -- Alexander (Sasha) Usyskin CSE FW Dev - Host SW Intel Israel (74) Limited
diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index 2e796ffad911..92ad8cd45ddb 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -456,7 +456,10 @@ void intel_gt_chipset_flush(struct intel_gt *gt) void intel_gt_driver_register(struct intel_gt *gt) { - intel_gsc_init(>->gsc, gt->i915); + if (gt->info.id == 0) + intel_gsc_init(>->gsc, gt->i915); + else + drm_dbg(>->i915->drm, "Not initializing gsc for remote tiles\n"); intel_rps_driver_register(>->rps); @@ -787,7 +790,8 @@ void intel_gt_driver_unregister(struct intel_gt *gt) intel_gt_sysfs_unregister(gt); intel_rps_driver_unregister(>->rps); - intel_gsc_fini(>->gsc); + if (gt->info.id == 0) + intel_gsc_fini(>->gsc); intel_pxp_fini(>->pxp);