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

Reply via email to