Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a261b246 authored by Daniel Vetter's avatar Daniel Vetter
Browse files

drm/i915: disable all crtcs at suspend time



We need this to avoid confusing the hw state readout code with the cpt
pch plls at resume time: We'd read the new pipe state (which is
disabled), but still believe that we have a life pll connected to that
pipe (from before the suspend). Hence properly disable pipes to clear
out all the residual state.

This has the neat side-effect that we don't enable ports prematurely
by restoring bogus state from the saved register values.

Reviewed-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Signed-Off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent ea9d758d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -470,6 +470,9 @@ static int i915_drm_freeze(struct drm_device *dev)
				"GEM idle failed, resume might fail\n");
			return error;
		}

		intel_modeset_disable(dev);

		drm_irq_uninstall(dev);
	}

+10 −0
Original line number Diff line number Diff line
@@ -3545,6 +3545,16 @@ static void intel_crtc_disable(struct drm_crtc *crtc)
	}
}

void intel_modeset_disable(struct drm_device *dev)
{
	struct drm_crtc *crtc;

	list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
		if (crtc->enabled)
			intel_crtc_disable(crtc);
	}
}

void intel_encoder_noop(struct drm_encoder *encoder)
{
}
+1 −0
Original line number Diff line number Diff line
@@ -446,6 +446,7 @@ struct intel_set_config {

extern bool intel_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode,
			   int x, int y, struct drm_framebuffer *old_fb);
extern void intel_modeset_disable(struct drm_device *dev);
extern void intel_crtc_load_lut(struct drm_crtc *crtc);
extern void intel_crtc_update_dpms(struct drm_crtc *crtc);
extern void intel_encoder_noop(struct drm_encoder *encoder);