Commit a4eaa0a0 authored by Maxim Levitsky's avatar Maxim Levitsky Committed by Ben Skeggs
Browse files

drm/nouveau: restore cursors after restoring mode

PDISP doesn't like it when disabled CRTCs are poked.

Fixes external output not coming to life when it has cursor on.
https://bugs.freedesktop.org/show_bug.cgi?id=41608



Signed-off-by: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 71d91f65
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -362,15 +362,6 @@ nouveau_pci_resume(struct pci_dev *pdev)

	engine->display.init(dev);

	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
		struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
		u32 offset = nv_crtc->cursor.nvbo->bo.offset;

		nv_crtc->cursor.set_offset(nv_crtc, offset);
		nv_crtc->cursor.set_pos(nv_crtc, nv_crtc->cursor_saved_x,
						 nv_crtc->cursor_saved_y);
	}

	/* Force CLUT to get re-loaded during modeset */
	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
		struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
@@ -386,6 +377,15 @@ nouveau_pci_resume(struct pci_dev *pdev)

	drm_helper_resume_force_mode(dev);

	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
		struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
		u32 offset = nv_crtc->cursor.nvbo->bo.offset;

		nv_crtc->cursor.set_offset(nv_crtc, offset);
		nv_crtc->cursor.set_pos(nv_crtc, nv_crtc->cursor_saved_x,
						 nv_crtc->cursor_saved_y);
	}

	nouveau_fbcon_restore_accel(dev);
	drm_kms_helper_poll_enable(dev);
	return 0;