Re: [RFC PATCH 2/5] drm/i915/display: add pme_capable() to the parent interface

"Govindapillai, Vinod" <[email protected]>
Newsgroups org.freedesktop.lists.intel-xe,org.freedesktop.lists.intel-gfx
Message-ID <[email protected]>
On Mon, 2026-08-17 at 13:19 +0300, Jani Nikula wrote:
> On Mon, 17 Aug 2026, Vinod Govindapillai
> <[email protected]> wrote:
> > Add a provision to query the optional pme_capability to the parent
> > interface so that it could be called independently from xe or i915
> > based on the implementation.
> 
> But do we need this? Display has all the information to call
> pci_dev_run_wake() directly, without going through the parent
> interface.
> 
> The only difference is this is not being set up for i915.

Ok. Yeah pci_dev_run_wake() should handle this properly. But because
the platform support for the pme is added from NVL, I thought of this
approach. 

So you are suggesting something like this?

if (pci_dev_run_wake()), avoid start HPD polling directly in the 
intel_display_driver::intel_display_driver_pm_runtime_suspend()?

Or use a wrapper to check the pme_capability.

BR
Vinod 

> BR,
> Jani.
> 
> > 
> > Assisted-by: GitHub_Copilot:claude-opus-5
> > Signed-off-by: Vinod Govindapillai <[email protected]>
> > ---
> >  drivers/gpu/drm/i915/display/intel_display_rpm.c | 7 +++++++
> >  drivers/gpu/drm/i915/display/intel_display_rpm.h | 1 +
> >  include/drm/intel/display_parent_interface.h     | 1 +
> >  3 files changed, 9 insertions(+)
> > 
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_rpm.c
> > b/drivers/gpu/drm/i915/display/intel_display_rpm.c
> > index 0a331f89b4db..73d85384474e 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_rpm.c
> > +++ b/drivers/gpu/drm/i915/display/intel_display_rpm.c
> > @@ -46,6 +46,13 @@ bool intel_display_rpm_suspended(struct
> > intel_display *display)
> >  	return display->parent->rpm->suspended(display->drm);
> >  }
> >  
> > +bool intel_display_rpm_pme_capable(struct intel_display *display)
> > +{
> > +	const struct intel_display_rpm_interface *rpm = display-
> > >parent->rpm;
> > +
> > +	return rpm->pme_capable && rpm->pme_capable(display->drm);
> > +}
> > +
> >  void assert_display_rpm_held(struct intel_display *display)
> >  {
> >  	display->parent->rpm->assert_held(display->drm);
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_rpm.h
> > b/drivers/gpu/drm/i915/display/intel_display_rpm.h
> > index 6ef48515f84b..2d4071fb9282 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_rpm.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_rpm.h
> > @@ -21,6 +21,7 @@ void intel_display_rpm_put(struct intel_display
> > *display, struct ref_tracker *wa
> >  
> >  /* Only for special cases. */
> >  bool intel_display_rpm_suspended(struct intel_display *display);
> > +bool intel_display_rpm_pme_capable(struct intel_display *display);
> >  
> >  void assert_display_rpm_held(struct intel_display *display);
> >  void intel_display_rpm_assert_block(struct intel_display
> > *display);
> > diff --git a/include/drm/intel/display_parent_interface.h
> > b/include/drm/intel/display_parent_interface.h
> > index d7d06dcaa699..563de403b102 100644
> > --- a/include/drm/intel/display_parent_interface.h
> > +++ b/include/drm/intel/display_parent_interface.h
> > @@ -196,6 +196,7 @@ struct intel_display_rpm_interface {
> >  	void (*put_unchecked)(const struct drm_device *drm);
> >  
> >  	bool (*suspended)(const struct drm_device *drm);
> > +	bool (*pme_capable)(const struct drm_device *drm); /*
> > Optional */
> >  	void (*assert_held)(const struct drm_device *drm);
> >  	void (*assert_block)(const struct drm_device *drm);
> >  	void (*assert_unblock)(const struct drm_device *drm);
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.