mirror of
https://github.com/torvalds/linux.git
synced 2026-04-19 23:34:00 -04:00
If the device is runtime suspended the eDP panel power is also off. Ignore a short HPD on eDP if the device is suspended accordingly, instead of checking the panel power state via the PPS registers for the same purpose. The latter involves runtime resuming the device unnecessarily, in a frequent scenario where the panel generates a spurious short HPD after disabling the panel power and the device is runtime suspended. Reviewed-by: Jonathan Cavitt <jonathan.cavitt@intel.com> Signed-off-by: Imre Deak <imre.deak@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20241009194358.1321200-2-imre.deak@intel.com
77 lines
1.9 KiB
C
77 lines
1.9 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2023 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_RUNTIME_PM_H__
|
|
#define __INTEL_RUNTIME_PM_H__
|
|
|
|
#include "intel_wakeref.h"
|
|
#include "xe_device_types.h"
|
|
#include "xe_pm.h"
|
|
|
|
#define intel_runtime_pm xe_runtime_pm
|
|
|
|
static inline void disable_rpm_wakeref_asserts(void *rpm)
|
|
{
|
|
}
|
|
|
|
static inline void enable_rpm_wakeref_asserts(void *rpm)
|
|
{
|
|
}
|
|
|
|
static inline bool
|
|
intel_runtime_pm_suspended(struct xe_runtime_pm *pm)
|
|
{
|
|
struct xe_device *xe = container_of(pm, struct xe_device, runtime_pm);
|
|
|
|
return pm_runtime_suspended(xe->drm.dev);
|
|
}
|
|
|
|
static inline intel_wakeref_t intel_runtime_pm_get(struct xe_runtime_pm *pm)
|
|
{
|
|
struct xe_device *xe = container_of(pm, struct xe_device, runtime_pm);
|
|
|
|
return xe_pm_runtime_resume_and_get(xe) ? INTEL_WAKEREF_DEF : NULL;
|
|
}
|
|
|
|
static inline intel_wakeref_t intel_runtime_pm_get_if_in_use(struct xe_runtime_pm *pm)
|
|
{
|
|
struct xe_device *xe = container_of(pm, struct xe_device, runtime_pm);
|
|
|
|
return xe_pm_runtime_get_if_in_use(xe) ? INTEL_WAKEREF_DEF : NULL;
|
|
}
|
|
|
|
static inline intel_wakeref_t intel_runtime_pm_get_noresume(struct xe_runtime_pm *pm)
|
|
{
|
|
struct xe_device *xe = container_of(pm, struct xe_device, runtime_pm);
|
|
|
|
xe_pm_runtime_get_noresume(xe);
|
|
|
|
return INTEL_WAKEREF_DEF;
|
|
}
|
|
|
|
static inline void intel_runtime_pm_put_unchecked(struct xe_runtime_pm *pm)
|
|
{
|
|
struct xe_device *xe = container_of(pm, struct xe_device, runtime_pm);
|
|
|
|
xe_pm_runtime_put(xe);
|
|
}
|
|
|
|
static inline void intel_runtime_pm_put(struct xe_runtime_pm *pm, intel_wakeref_t wakeref)
|
|
{
|
|
if (wakeref)
|
|
intel_runtime_pm_put_unchecked(pm);
|
|
}
|
|
|
|
#define intel_runtime_pm_get_raw intel_runtime_pm_get
|
|
#define intel_runtime_pm_put_raw intel_runtime_pm_put
|
|
#define assert_rpm_wakelock_held(x) do { } while (0)
|
|
#define assert_rpm_raw_wakeref_held(x) do { } while (0)
|
|
|
|
#define with_intel_runtime_pm(rpm, wf) \
|
|
for ((wf) = intel_runtime_pm_get(rpm); (wf); \
|
|
intel_runtime_pm_put((rpm), (wf)), (wf) = NULL)
|
|
|
|
#endif
|