summaryrefslogtreecommitdiff
path: root/SOURCES/0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch
diff options
context:
space:
mode:
Diffstat (limited to 'SOURCES/0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch')
-rw-r--r--SOURCES/0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch47
1 files changed, 47 insertions, 0 deletions
diff --git a/SOURCES/0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch b/SOURCES/0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch
new file mode 100644
index 0000000..b590bb0
--- /dev/null
+++ b/SOURCES/0001-kms-nv50-Initialize-core-channel-in-nouveau_display_.patch
@@ -0,0 +1,47 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Lyude Paul <lyude@redhat.com>
+Date: Mon, 11 May 2020 18:41:23 -0400
+Subject: [PATCH] kms/nv50-: Initialize core channel in
+ nouveau_display_create()
+
+We'll need the core channel initialized and ready by the time that we
+start creating modesetting objects, so that we can call the
+NV507D_GET_CAPABILITIES method to make the hardware expose it's
+modesetting capabilities for later probing.
+
+So, when loading the driver prepare the core channel from within
+nouveau_display_create(). Everywhere else, we initialize the core
+channel during resume.
+
+Signed-off-by: Lyude Paul <lyude@redhat.com>
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+---
+ drivers/gpu/drm/nouveau/dispnv50/disp.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c
+index 2625ed84fc44..2afd56b9887d 100644
+--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c
++++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c
+@@ -2373,7 +2373,8 @@ nv50_display_init(struct drm_device *dev, bool resume, bool runtime)
+ struct drm_encoder *encoder;
+ struct drm_plane *plane;
+
+- core->func->init(core);
++ if (resume || runtime)
++ core->func->init(core);
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST) {
+@@ -2460,6 +2461,8 @@ nv50_display_create(struct drm_device *dev)
+ if (ret)
+ goto out;
+
++ disp->core->func->init(disp->core);
++
+ /* create crtc objects to represent the hw heads */
+ if (disp->disp->object.oclass >= GV100_DISP)
+ crtcs = nvif_rd32(&device->object, 0x610060) & 0xff;
+--
+2.26.2
+