On Tue, Mar 11, 2025 at 02:05:35PM +0200, Jani Nikula wrote: > Add display specific wrappers around the i915 and xe dedicated runtime > PM interfaces. There are no conversions here, just the wrappers. > > Implement with_intel_display_rpm() without needing to provide a local > variable, which neatly narrows the scope and hides the type of the > wakeref cookie. >
Reviewed-by: Rodrigo Vivi <rodrigo.v...@intel.com> > Signed-off-by: Jani Nikula <jani.nik...@intel.com> > --- > drivers/gpu/drm/i915/Makefile | 1 + > .../gpu/drm/i915/display/intel_display_rpm.c | 68 ++++++++++++++++++ > .../gpu/drm/i915/display/intel_display_rpm.h | 37 ++++++++++ > drivers/gpu/drm/xe/Makefile | 1 + > drivers/gpu/drm/xe/display/xe_display_rpm.c | 71 +++++++++++++++++++ > 5 files changed, 178 insertions(+) > create mode 100644 drivers/gpu/drm/i915/display/intel_display_rpm.c > create mode 100644 drivers/gpu/drm/i915/display/intel_display_rpm.h > create mode 100644 drivers/gpu/drm/xe/display/xe_display_rpm.c > > diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile > index ed05b131ed3a..c8fc271b33b7 100644 > --- a/drivers/gpu/drm/i915/Makefile > +++ b/drivers/gpu/drm/i915/Makefile > @@ -247,6 +247,7 @@ i915-y += \ > display/intel_display_power_map.o \ > display/intel_display_power_well.o \ > display/intel_display_reset.o \ > + display/intel_display_rpm.o \ > display/intel_display_rps.o \ > display/intel_display_snapshot.o \ > display/intel_display_wa.o \ > diff --git a/drivers/gpu/drm/i915/display/intel_display_rpm.c > b/drivers/gpu/drm/i915/display/intel_display_rpm.c > new file mode 100644 > index 000000000000..48da67dd0136 > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_display_rpm.c > @@ -0,0 +1,68 @@ > +// SPDX-License-Identifier: MIT > +/* Copyright © 2025 Intel Corporation */ > + > +#include "i915_drv.h" > +#include "intel_display_rpm.h" > +#include "intel_runtime_pm.h" > + > +static struct intel_runtime_pm *display_to_rpm(struct intel_display *display) > +{ > + struct drm_i915_private *i915 = to_i915(display->drm); > + > + return &i915->runtime_pm; > +} > + > +struct ref_tracker *intel_display_rpm_get_raw(struct intel_display *display) > +{ > + return intel_runtime_pm_get_raw(display_to_rpm(display)); > +} > + > +void intel_display_rpm_put_raw(struct intel_display *display, struct > ref_tracker *wakeref) > +{ > + intel_runtime_pm_put_raw(display_to_rpm(display), wakeref); > +} > + > +struct ref_tracker *intel_display_rpm_get(struct intel_display *display) > +{ > + return intel_runtime_pm_get(display_to_rpm(display)); > +} > + > +struct ref_tracker *intel_display_rpm_get_if_in_use(struct intel_display > *display) > +{ > + return intel_runtime_pm_get_if_in_use(display_to_rpm(display)); > +} > + > +struct ref_tracker *intel_display_rpm_get_noresume(struct intel_display > *display) > +{ > + return intel_runtime_pm_get_noresume(display_to_rpm(display)); > +} > + > +void intel_display_rpm_put(struct intel_display *display, struct ref_tracker > *wakeref) > +{ > + intel_runtime_pm_put(display_to_rpm(display), wakeref); > +} > + > +void intel_display_rpm_put_unchecked(struct intel_display *display) > +{ > + intel_runtime_pm_put_unchecked(display_to_rpm(display)); > +} > + > +bool intel_display_rpm_suspended(struct intel_display *display) > +{ > + return intel_runtime_pm_suspended(display_to_rpm(display)); > +} > + > +void assert_display_rpm_held(struct intel_display *display) > +{ > + assert_rpm_wakelock_held(display_to_rpm(display)); > +} > + > +void intel_display_rpm_assert_block(struct intel_display *display) > +{ > + disable_rpm_wakeref_asserts(display_to_rpm(display)); > +} > + > +void intel_display_rpm_assert_unblock(struct intel_display *display) > +{ > + enable_rpm_wakeref_asserts(display_to_rpm(display)); > +} > diff --git a/drivers/gpu/drm/i915/display/intel_display_rpm.h > b/drivers/gpu/drm/i915/display/intel_display_rpm.h > new file mode 100644 > index 000000000000..6ef48515f84b > --- /dev/null > +++ b/drivers/gpu/drm/i915/display/intel_display_rpm.h > @@ -0,0 +1,37 @@ > +/* SPDX-License-Identifier: MIT */ > +/* Copyright © 2025 Intel Corporation */ > + > +#ifndef __INTEL_DISPLAY_RPM__ > +#define __INTEL_DISPLAY_RPM__ > + > +#include <linux/types.h> > + > +struct intel_display; > +struct ref_tracker; > + > +struct ref_tracker *intel_display_rpm_get(struct intel_display *display); > +void intel_display_rpm_put(struct intel_display *display, struct ref_tracker > *wakeref); > + > +#define __with_intel_display_rpm(__display, __wakeref) \ > + for (struct ref_tracker *(__wakeref) = > intel_display_rpm_get(__display); (__wakeref); \ > + intel_display_rpm_put((__display), (__wakeref)), (__wakeref) = > NULL) > + > +#define with_intel_display_rpm(__display) \ > + __with_intel_display_rpm((__display), __UNIQUE_ID(wakeref)) > + > +/* Only for special cases. */ > +bool intel_display_rpm_suspended(struct intel_display *display); > + > +void assert_display_rpm_held(struct intel_display *display); > +void intel_display_rpm_assert_block(struct intel_display *display); > +void intel_display_rpm_assert_unblock(struct intel_display *display); > + > +/* Only for display power implementation. */ > +struct ref_tracker *intel_display_rpm_get_raw(struct intel_display *display); > +void intel_display_rpm_put_raw(struct intel_display *display, struct > ref_tracker *wakeref); > + > +struct ref_tracker *intel_display_rpm_get_if_in_use(struct intel_display > *display); > +struct ref_tracker *intel_display_rpm_get_noresume(struct intel_display > *display); > +void intel_display_rpm_put_unchecked(struct intel_display *display); > + > +#endif /* __INTEL_DISPLAY_RPM__ */ > diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile > index 9699b08585f7..cd464fe26eb8 100644 > --- a/drivers/gpu/drm/xe/Makefile > +++ b/drivers/gpu/drm/xe/Makefile > @@ -185,6 +185,7 @@ xe-$(CONFIG_DRM_XE_DISPLAY) += \ > display/intel_fbdev_fb.o \ > display/xe_display.o \ > display/xe_display_misc.o \ > + display/xe_display_rpm.o \ > display/xe_display_rps.o \ > display/xe_display_wa.o \ > display/xe_dsb_buffer.o \ > diff --git a/drivers/gpu/drm/xe/display/xe_display_rpm.c > b/drivers/gpu/drm/xe/display/xe_display_rpm.c > new file mode 100644 > index 000000000000..1955153aadba > --- /dev/null > +++ b/drivers/gpu/drm/xe/display/xe_display_rpm.c > @@ -0,0 +1,71 @@ > +// SPDX-License-Identifier: MIT > +/* Copyright © 2025 Intel Corporation */ > + > +#include "intel_display_rpm.h" > +#include "xe_device_types.h" > +#include "xe_pm.h" > + > +static struct xe_device *display_to_xe(struct intel_display *display) > +{ > + return container_of(display, struct xe_device, display); > +} > + > +struct ref_tracker *intel_display_rpm_get_raw(struct intel_display *display) > +{ > + return intel_display_rpm_get(display); > +} > + > +void intel_display_rpm_put_raw(struct intel_display *display, struct > ref_tracker *wakeref) > +{ > + intel_display_rpm_put(display, wakeref); > +} > + > +struct ref_tracker *intel_display_rpm_get(struct intel_display *display) > +{ > + return xe_pm_runtime_resume_and_get(display_to_xe(display)) ? > INTEL_WAKEREF_DEF : NULL; > +} > + > +struct ref_tracker *intel_display_rpm_get_if_in_use(struct intel_display > *display) > +{ > + return xe_pm_runtime_get_if_in_use(display_to_xe(display)) ? > INTEL_WAKEREF_DEF : NULL; > +} > + > +struct ref_tracker *intel_display_rpm_get_noresume(struct intel_display > *display) > +{ > + xe_pm_runtime_get_noresume(display_to_xe(display)); > + > + return INTEL_WAKEREF_DEF; > +} > + > +void intel_display_rpm_put(struct intel_display *display, struct ref_tracker > *wakeref) > +{ > + if (wakeref) > + xe_pm_runtime_put(display_to_xe(display)); > +} > + > +void intel_display_rpm_put_unchecked(struct intel_display *display) > +{ > + xe_pm_runtime_put(display_to_xe(display)); > +} > + > +bool intel_display_rpm_suspended(struct intel_display *display) > +{ > + struct xe_device *xe = display_to_xe(display); > + > + return pm_runtime_suspended(xe->drm.dev); > +} > + > +void assert_display_rpm_held(struct intel_display *display) > +{ > + /* FIXME */ > +} > + > +void intel_display_rpm_assert_block(struct intel_display *display) > +{ > + /* FIXME */ > +} > + > +void intel_display_rpm_assert_unblock(struct intel_display *display) > +{ > + /* FIXME */ > +} > -- > 2.39.5 >