[mutter/gnome-3-36] monitor-manager-kms: Disable CRTCs if there is no monitor
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-3-36] monitor-manager-kms: Disable CRTCs if there is no monitor
- Date: Mon, 11 Jan 2021 14:19:38 +0000 (UTC)
commit 097af7ddb381606da74c737859cc92fff72ed417
Author: Kai-Heng Feng <kai heng feng canonical com>
Date: Mon Dec 21 14:59:32 2020 +0800
monitor-manager-kms: Disable CRTCs if there is no monitor
After last monitor gets unplugged from the system, hotplug detection may
no longer work on Intel GFX.
This is because we didn't trigger a modeset to disable CRTCs, and i915
requires it to make hotplug detection continue to work [1].
Ensure disabled CRTCs are unset and post a modeset to disable them.
[1] https://www.kernel.org/doc/html/latest/gpu/i915.html#hotplug
https://gitlab.freedesktop.org/drm/intel/-/issues/2602
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1561>
src/backends/native/meta-monitor-manager-kms.c | 8 ++++++++
src/backends/native/meta-renderer-native.c | 15 +++++++++++++++
src/backends/native/meta-renderer-native.h | 2 ++
3 files changed, 25 insertions(+)
---
diff --git a/src/backends/native/meta-monitor-manager-kms.c b/src/backends/native/meta-monitor-manager-kms.c
index 6dcba6442e..e3c15f4f7c 100644
--- a/src/backends/native/meta-monitor-manager-kms.c
+++ b/src/backends/native/meta-monitor-manager-kms.c
@@ -303,6 +303,14 @@ meta_monitor_manager_kms_apply_monitors_config (MetaMonitorManager *manager
if (!config)
{
+ if (!manager->in_init)
+ {
+ MetaBackend *backend = meta_get_backend ();
+ MetaRenderer *renderer = meta_backend_get_renderer (backend);
+
+ meta_renderer_native_reset_modes (META_RENDERER_NATIVE (renderer));
+ }
+
manager->screen_width = META_MONITOR_MANAGER_MIN_SCREEN_WIDTH;
manager->screen_height = META_MONITOR_MANAGER_MIN_SCREEN_HEIGHT;
meta_monitor_manager_rebuild (manager, NULL);
diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c
index 0a760d73dd..7e75ab9fd9 100644
--- a/src/backends/native/meta-renderer-native.c
+++ b/src/backends/native/meta-renderer-native.c
@@ -3802,6 +3802,21 @@ on_power_save_mode_changed (MetaMonitorManager *monitor_manager,
meta_kms_discard_pending_page_flips (kms);
}
+void
+meta_renderer_native_reset_modes (MetaRendererNative *renderer_native)
+{
+ MetaRenderer *renderer = META_RENDERER (renderer_native);
+ MetaBackend *backend = meta_renderer_get_backend (renderer);
+ MetaBackendNative *backend_native = META_BACKEND_NATIVE (backend);
+ MetaKms *kms = meta_backend_native_get_kms (backend_native);
+ MetaKmsUpdate *kms_update;
+
+ kms_update = unset_disabled_crtcs (backend, kms);
+
+ if (kms_update)
+ post_pending_update (kms);
+}
+
static MetaGpuKms *
choose_primary_gpu_unchecked (MetaBackend *backend,
MetaRendererNative *renderer_native)
diff --git a/src/backends/native/meta-renderer-native.h b/src/backends/native/meta-renderer-native.h
index 7abe7c1521..1f61e261f8 100644
--- a/src/backends/native/meta-renderer-native.h
+++ b/src/backends/native/meta-renderer-native.h
@@ -55,4 +55,6 @@ void meta_renderer_native_finish_frame (MetaRendererNative *renderer_native);
int64_t meta_renderer_native_get_frame_counter (MetaRendererNative *renderer_native);
+void meta_renderer_native_reset_modes (MetaRendererNative *renderer_native);
+
#endif /* META_RENDERER_NATIVE_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]