@@ -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_create - create display struct
* @xe: XE device instance
@@ -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) {}
#endif /* CONFIG_DRM_XE_DISPLAY */
#endif /* _XE_DISPLAY_H_ */
@@ -8,6 +8,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>
@@ -300,6 +301,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 */
@@ -309,6 +311,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
* D3 Cold flow