On Fri, 24 Oct 2025, Jouni Högander <[email protected]> wrote: > Implement runtime pm wrappers for xe driver and add them into display > parent interface. > > v2: > - move xe_display_rpm_interface code into xe_display_rpm.c > - rename xe_rpm as xe_display_rpm > > Signed-off-by: Jouni Högander <[email protected]> > --- > drivers/gpu/drm/xe/display/xe_display.c | 3 + > drivers/gpu/drm/xe/display/xe_display_rpm.c | 76 +++++++++++++++++++++ > drivers/gpu/drm/xe/display/xe_display_rpm.h | 11 +++ > 3 files changed, 90 insertions(+) > create mode 100644 drivers/gpu/drm/xe/display/xe_display_rpm.h > > diff --git a/drivers/gpu/drm/xe/display/xe_display.c > b/drivers/gpu/drm/xe/display/xe_display.c > index 0e38c96eb6def..be7f3c7ef5c3f 100644 > --- a/drivers/gpu/drm/xe/display/xe_display.c > +++ b/drivers/gpu/drm/xe/display/xe_display.c > @@ -35,7 +35,9 @@ > #include "intel_hotplug.h" > #include "intel_opregion.h" > #include "skl_watermark.h" > +#include "xe_display_rpm.h" > #include "xe_module.h" > +#include "xe_pm.h"
That's probably leftovers from the previous version? Anyway, Reviewed-by: Jani Nikula <[email protected]> > > /* Ensure drm and display members are placed properly. */ > INTEL_DISPLAY_MEMBER_STATIC_ASSERT(struct xe_device, drm, display); > @@ -516,6 +518,7 @@ static void display_device_remove(struct drm_device *dev, > void *arg) > } > > static const struct intel_display_parent_interface parent = { > + .rpm = &xe_display_rpm_interface, > }; > > /** > diff --git a/drivers/gpu/drm/xe/display/xe_display_rpm.c > b/drivers/gpu/drm/xe/display/xe_display_rpm.c > index 3825376e98ccd..72a351e26a008 100644 > --- a/drivers/gpu/drm/xe/display/xe_display_rpm.c > +++ b/drivers/gpu/drm/xe/display/xe_display_rpm.c > @@ -1,6 +1,8 @@ > // SPDX-License-Identifier: MIT > /* Copyright © 2025 Intel Corporation */ > > +#include <drm/intel/display_parent_interface.h> > + > #include "intel_display_core.h" > #include "intel_display_rpm.h" > #include "xe_device.h" > @@ -71,3 +73,77 @@ void intel_display_rpm_assert_unblock(struct intel_display > *display) > { > /* FIXME */ > } > + > +static struct ref_tracker *xe_display_rpm_get(const struct drm_device *drm) > +{ > + return xe_pm_runtime_resume_and_get(to_xe_device(drm)) ? > INTEL_WAKEREF_DEF : NULL; > +} > + > +static struct ref_tracker *xe_display_rpm_get_raw(const struct drm_device > *drm) > +{ > + return xe_display_rpm_get(drm); > +} > + > +static struct ref_tracker *xe_display_rpm_get_if_in_use(const struct > drm_device *drm) > +{ > + return xe_pm_runtime_get_if_in_use(to_xe_device(drm)) ? > INTEL_WAKEREF_DEF : NULL; > +} > + > +static struct ref_tracker *xe_display_rpm_get_noresume(const struct > drm_device *drm) > +{ > + xe_pm_runtime_get_noresume(to_xe_device(drm)); > + > + return INTEL_WAKEREF_DEF; > +} > + > +static void xe_display_rpm_put(const struct drm_device *drm, struct > ref_tracker *wakeref) > +{ > + if (wakeref) > + xe_pm_runtime_put(to_xe_device(drm)); > +} > + > +static void xe_display_rpm_put_raw(const struct drm_device *drm, struct > ref_tracker *wakeref) > +{ > + xe_display_rpm_put(drm, wakeref); > +} > + > +static void xe_display_rpm_put_unchecked(const struct drm_device *drm) > +{ > + xe_pm_runtime_put(to_xe_device(drm)); > +} > + > +static bool xe_display_rpm_suspended(const struct drm_device *drm) > +{ > + struct xe_device *xe = to_xe_device(drm); > + > + return pm_runtime_suspended(xe->drm.dev); > +} > + > +static void xe_display_rpm_assert_held(const struct drm_device *drm) > +{ > + /* FIXME */ > +} > + > +static void xe_display_rpm_assert_block(const struct drm_device *drm) > +{ > + /* FIXME */ > +} > + > +static void xe_display_rpm_assert_unblock(const struct drm_device *drm) > +{ > + /* FIXME */ > +} > + > +const struct intel_display_rpm_interface xe_display_rpm_interface = { > + .get = xe_display_rpm_get, > + .get_raw = xe_display_rpm_get_raw, > + .get_if_in_use = xe_display_rpm_get_if_in_use, > + .get_noresume = xe_display_rpm_get_noresume, > + .put = xe_display_rpm_put, > + .put_raw = xe_display_rpm_put_raw, > + .put_unchecked = xe_display_rpm_put_unchecked, > + .suspended = xe_display_rpm_suspended, > + .assert_held = xe_display_rpm_assert_held, > + .assert_block = xe_display_rpm_assert_block, > + .assert_unblock = xe_display_rpm_assert_unblock > +}; > diff --git a/drivers/gpu/drm/xe/display/xe_display_rpm.h > b/drivers/gpu/drm/xe/display/xe_display_rpm.h > new file mode 100644 > index 0000000000000..0bf9d31e87c17 > --- /dev/null > +++ b/drivers/gpu/drm/xe/display/xe_display_rpm.h > @@ -0,0 +1,11 @@ > +/* SPDX-License-Identifier: MIT */ > +/* > + * Copyright © 2025 Intel Corporation > + */ > + > +#ifndef _XE_DISPLAY_RPM_H_ > +#define _XE_DISPLAY_RPM_H_ > + > +extern const struct intel_display_rpm_interface xe_display_rpm_interface; > + > +#endif /* _XE_DISPLAY_RPM_H_ */ -- Jani Nikula, Intel
