Re: [RFC PATCH 2/5] drm/i915/display: add pme_capable() to the parent interface
Jani Nikula <[email protected]>
| Newsgroups | org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe |
|---|---|
| Organization | Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs Bertel Jungin Aukio 5, 02600 Espoo, Finland |
| Message-ID | <[email protected]> |
On Tue, 18 Aug 2026, "Govindapillai, Vinod" <[email protected]> wrote: > 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()? See my other replies: can we hide this inside intel_hotplug.c? BR, Jani. > > 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); >> > -- Jani Nikula, Intel