[Intel-xe] [PATCH v4] drm/xe/pm: Disable PM on unbounded pcie parent bridge

Gupta, Anshuman anshuman.gupta at intel.com
Thu May 25 06:40:34 UTC 2023



> -----Original Message-----
> From: Rodrigo Vivi <rodrigo.vivi at kernel.org>
> Sent: Wednesday, May 24, 2023 6:31 PM
> To: Gupta, Anshuman <anshuman.gupta at intel.com>
> Cc: intel-xe at lists.freedesktop.org; Vivi, Rodrigo <rodrigo.vivi at intel.com>;
> Nilawar, Badal <badal.nilawar at intel.com>; Tauro, Riana
> <riana.tauro at intel.com>
> Subject: Re: [PATCH v4] drm/xe/pm: Disable PM on unbounded pcie parent
> bridge
> 
> On Wed, May 24, 2023 at 02:36:53PM +0530, Anshuman Gupta wrote:
> > Intel Discrete GFX cards gfx may have multiple PCIe endpoints, they
> > connects to root port via pcie upstream switch port(USP) and virtual
> > pcie switch port(VSP), sometimes VSP pcie devices doesn't bind to
> > pcieport driver. Without pcieport driver, pcie PM comes without any
> > warranty and with unbounded VSP gfx card won't transition to low power
> > pcie Device and Link states therefore assert drm_warn on unbounded VSP
> > and disable xe driver PM support.
> >
> > v2:
> > - Disable Xe PCI PM support. [Rodrigo]
> > v3:
> > - Changed subject and Rebase.
> > v4:
> > -
> %s/xe_pci_unbounded_bridge_disable_pm/xe_assert_on_unbounded_bri
> dge.
> >   [Rodrigo]
> > - Use device_set_pm_not_required() instead of dev_pm_ops NULL
> assignment.
> >
> > Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
> > Signed-off-by: Anshuman Gupta <anshuman.gupta at intel.com>
> 
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> 
> (we should probably do something very similar on i915 for dg2/dg1 no?!)
Thanks for review, sure I will float a similar patch for i915 as well.
Thanks,
Anshuman Gupta.
> 
> > ---
> >  drivers/gpu/drm/xe/xe_pci.c |  1 +
> >  drivers/gpu/drm/xe/xe_pm.c  | 14 ++++++++++++++
> > drivers/gpu/drm/xe/xe_pm.h  |  1 +
> >  3 files changed, 16 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/xe/xe_pci.c b/drivers/gpu/drm/xe/xe_pci.c
> > index 2d0d50dcd396..45bd23b879b9 100644
> > --- a/drivers/gpu/drm/xe/xe_pci.c
> > +++ b/drivers/gpu/drm/xe/xe_pci.c
> > @@ -636,6 +636,7 @@ static int xe_pci_probe(struct pci_dev *pdev, const
> struct pci_device_id *ent)
> >  	if (IS_ERR(xe))
> >  		return PTR_ERR(xe);
> >
> > +	xe_pm_assert_unbounded_bridge(xe);
> >  	subplatform_desc = find_subplatform(xe, desc);
> >
> >  	err = xe_info_init(xe, desc, subplatform_desc); diff --git
> > a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c index
> > b7b57f10ba25..c7901f379aee 100644
> > --- a/drivers/gpu/drm/xe/xe_pm.c
> > +++ b/drivers/gpu/drm/xe/xe_pm.c
> > @@ -225,3 +225,17 @@ int xe_pm_runtime_get_if_active(struct
> xe_device *xe)
> >  	WARN_ON(pm_runtime_suspended(xe->drm.dev));
> >  	return pm_runtime_get_if_active(xe->drm.dev, true);  }
> > +
> > +void xe_pm_assert_unbounded_bridge(struct xe_device *xe) {
> > +	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
> > +	struct pci_dev *bridge = pci_upstream_bridge(pdev);
> > +
> > +	if (!bridge)
> > +		return;
> > +
> > +	if (!bridge->driver) {
> > +		drm_warn(&xe->drm, "unbounded parent pci bridge, device
> won't support any PM support.\n");
> > +		device_set_pm_not_required(&pdev->dev);
> > +	}
> > +}
> > diff --git a/drivers/gpu/drm/xe/xe_pm.h b/drivers/gpu/drm/xe/xe_pm.h
> > index 6a885585f653..8418ee6faac5 100644
> > --- a/drivers/gpu/drm/xe/xe_pm.h
> > +++ b/drivers/gpu/drm/xe/xe_pm.h
> > @@ -21,5 +21,6 @@ int xe_pm_runtime_get(struct xe_device *xe);  int
> > xe_pm_runtime_put(struct xe_device *xe);  bool
> > xe_pm_runtime_resume_if_suspended(struct xe_device *xe);  int
> > xe_pm_runtime_get_if_active(struct xe_device *xe);
> > +void xe_pm_assert_unbounded_bridge(struct xe_device *xe);
> >
> >  #endif
> > --
> > 2.38.0
> >


More information about the Intel-xe mailing list