From: Rodrigo Vivi <rodrigo.vivi@intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: <intel-gfx@lists.freedesktop.org>,
<intel-xe@lists.freedesktop.org>, <imre.deak@intel.com>,
<ville.syrjala@linux.intel.com>
Subject: Re: [PATCH 1/6] drm/i915/display: add display specific runtime PM wrappers
Date: Tue, 11 Mar 2025 16:36:24 -0400 [thread overview]
Message-ID: <Z9CeyOVBjTWohBRH@intel.com> (raw)
In-Reply-To: <d9ed1f46bfd91fd5aba6214de14c2fbbe7f4114b.1741694400.git.jani.nikula@intel.com>
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.vivi@intel.com>
> Signed-off-by: Jani Nikula <jani.nikula@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
>
next prev parent reply other threads:[~2025-03-11 20:36 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-11 12:05 [PATCH 0/6] drm/i915/display: add display specific runtime PM interface Jani Nikula
2025-03-11 12:05 ` [PATCH 1/6] drm/i915/display: add display specific runtime PM wrappers Jani Nikula
2025-03-11 20:36 ` Rodrigo Vivi [this message]
2025-03-11 12:05 ` [PATCH 2/6] drm/i915/display: conversions to with_intel_display_rpm() Jani Nikula
2025-03-11 20:36 ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 3/6] drm/i915/display: use display runtime PM interfaces for for atomic state Jani Nikula
2025-03-11 20:39 ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 4/6] drm/i915/display: convert to display runtime PM interfaces Jani Nikula
2025-03-11 20:43 ` Rodrigo Vivi
2025-03-12 10:43 ` Jani Nikula
2025-03-12 19:57 ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 5/6] drm/i915/power: " Jani Nikula
2025-03-11 20:45 ` Rodrigo Vivi
2025-03-11 12:05 ` [PATCH 6/6] drm/xe/compat: remove intel_runtime_pm.h Jani Nikula
2025-03-11 20:46 ` Rodrigo Vivi
2025-03-11 14:31 ` ✓ CI.Patch_applied: success for drm/i915/display: add display specific runtime PM interface Patchwork
2025-03-11 14:32 ` ✗ CI.checkpatch: warning " Patchwork
2025-03-11 14:33 ` ✓ CI.KUnit: success " Patchwork
2025-03-11 14:49 ` ✓ CI.Build: " Patchwork
2025-03-11 14:52 ` ✓ CI.Hooks: " Patchwork
2025-03-11 14:53 ` ✗ CI.checksparse: warning " Patchwork
2025-03-11 15:15 ` ✓ Xe.CI.BAT: success " Patchwork
2025-03-11 16:32 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2025-03-11 16:32 ` ✗ Fi.CI.SPARSE: " Patchwork
2025-03-11 16:58 ` ✗ i915.CI.BAT: failure " Patchwork
2025-03-12 7:16 ` ✓ Xe.CI.Full: success " Patchwork
2025-03-13 11:04 ` ✗ Fi.CI.CHECKPATCH: warning for drm/i915/display: add display specific runtime PM interface (rev2) Patchwork
2025-03-13 11:04 ` ✗ Fi.CI.SPARSE: " Patchwork
2025-03-13 11:27 ` ✓ i915.CI.BAT: success " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z9CeyOVBjTWohBRH@intel.com \
--to=rodrigo.vivi@intel.com \
--cc=imre.deak@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@intel.com \
--cc=ville.syrjala@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.