[PATCH v4 07/11] drm/xe/vrsr: Enable VRSR on default VGA boot device
Jani Nikula
jani.nikula at linux.intel.com
Fri Jun 6 13:07:02 UTC 2025
On Thu, 29 May 2025, Badal Nilawar <badal.nilawar at intel.com> wrote:
> The VRSR feature is to enhance the display screen refresh experience
> when the device exits from the D3Cold state. Therefore, apply the VRSR
> feature to the default VGA boot device and when a display is connected.
>
> Signed-off-by: Badal Nilawar <badal.nilawar at intel.com>
> Signed-off-by: Anshuman Gupta <anshuman.gupta at intel.com>
> ---
> drivers/gpu/drm/xe/display/xe_display.c | 22 ++++++++++++++++++++++
> drivers/gpu/drm/xe/display/xe_display.h | 2 ++
> drivers/gpu/drm/xe/xe_pm.c | 5 +++++
> 3 files changed, 29 insertions(+)
>
> diff --git a/drivers/gpu/drm/xe/display/xe_display.c b/drivers/gpu/drm/xe/display/xe_display.c
> index 20c3bcd953b7..b3da88b12b35 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.c
> +++ b/drivers/gpu/drm/xe/display/xe_display.c
> @@ -88,6 +88,28 @@ static void display_destroy(struct drm_device *dev, void *dummy)
> destroy_workqueue(xe->display.hotplug.dp_wq);
> }
>
> +bool xe_display_connected(struct xe_device *xe)
> +{
> + struct drm_connector *list_connector;
> + struct drm_connector_list_iter iter;
> + bool ret = false;
> +
> + mutex_lock(&xe->drm.mode_config.mutex);
> + drm_connector_list_iter_begin(&xe->drm, &iter);
> +
> + drm_for_each_connector_iter(list_connector, &iter) {
> + if (list_connector->status == connector_status_connected) {
> + ret = true;
> + break;
> + }
> + }
> +
> + drm_connector_list_iter_end(&iter);
> + mutex_unlock(&xe->drm.mode_config.mutex);
> +
> + return ret;
> +}
> +
Xe display/ should contain the *minimal* glue to attach i915 display to
it. It should *not* contain generic display stuff like this. At all.
The goal is for i915 display to become a dedicated kernel module. The
above should not be part of xe.ko.
BR,
Jani.
> /**
> * xe_display_create - create display struct
> * @xe: XE device instance
> diff --git a/drivers/gpu/drm/xe/display/xe_display.h b/drivers/gpu/drm/xe/display/xe_display.h
> index 46e14f8dee28..c79441bccb43 100644
> --- a/drivers/gpu/drm/xe/display/xe_display.h
> +++ b/drivers/gpu/drm/xe/display/xe_display.h
> @@ -39,6 +39,7 @@ void xe_display_pm_resume(struct xe_device *xe);
> void xe_display_pm_runtime_suspend(struct xe_device *xe);
> void xe_display_pm_runtime_suspend_late(struct xe_device *xe);
> void xe_display_pm_runtime_resume(struct xe_device *xe);
> +bool xe_display_connected(struct xe_device *xe);
>
> #else
>
> @@ -71,5 +72,6 @@ static inline void xe_display_pm_runtime_suspend(struct xe_device *xe) {}
> static inline void xe_display_pm_runtime_suspend_late(struct xe_device *xe) {}
> static inline void xe_display_pm_runtime_resume(struct xe_device *xe) {}
>
> +static inline bool xe_display_connected(struct xe_device *xe) { return false; }
> #endif /* CONFIG_DRM_XE_DISPLAY */
> #endif /* _XE_DISPLAY_H_ */
> diff --git a/drivers/gpu/drm/xe/xe_pm.c b/drivers/gpu/drm/xe/xe_pm.c
> index 278f2eeeaab6..c84b9b3f7371 100644
> --- a/drivers/gpu/drm/xe/xe_pm.c
> +++ b/drivers/gpu/drm/xe/xe_pm.c
> @@ -9,6 +9,7 @@
> #include <linux/fault-inject.h>
> #include <linux/pm_runtime.h>
> #include <linux/suspend.h>
> +#include <linux/vgaarb.h>
>
> #include <drm/drm_managed.h>
> #include <drm/ttm/ttm_placement.h>
> @@ -310,6 +311,7 @@ static int pci_acpi_aux_power_setup(struct xe_device *xe)
>
> static void xe_pm_vrsr_init(struct xe_device *xe)
> {
> + struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
> int ret;
>
> /* Check if platform support D3Cold VRSR */
> @@ -319,6 +321,9 @@ static void xe_pm_vrsr_init(struct xe_device *xe)
> if (!xe_pm_vrsr_capable(xe))
> return;
>
> + if (pdev != vga_default_device() || !xe_display_connected(xe))
> + return;
> +
> /*
> * If the VRSR initialization fails, the device will proceed with the regular
> * D3Cold flow
--
Jani Nikula, Intel
More information about the Intel-xe
mailing list