| From dfa9d3dad396183266cd7a9e5197113a0fcbda0a Mon Sep 17 00:00:00 2001 |
| From: Jesse Barnes <jbarnes@virtuousgeek.org> |
| Date: Wed, 26 Jun 2013 18:57:38 +0300 |
| Subject: drm/i915: copy fetched mode state into crtc at setup_hw time v5 |
| |
| We already fetch and track other state into the main CRTC and encoder |
| structs, and for fastboot we need to do the same with the mode and clock |
| data we read out. |
| |
| v2: fix debug print |
| v3: use fastboot param around state copy |
| v4: set clock and flags for crtc here instead of in setup_hw_state |
| v5: rename function to intel_crtc_mode_from_pipe_config for consistency (Chris) |
| |
| Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit babea61dfb82b4bdfdbc57ebf081ef6c16ffd524) |
| (cherry picked from drm-intel-next-queued) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_display.c | 37 +++++++++++++++++++++++++++++++++++ |
| 1 file changed, 37 insertions(+) |
| |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -4712,6 +4712,27 @@ static void intel_get_pipe_timings(struc |
| pipe_config->requested_mode.hdisplay = ((tmp >> 16) & 0xffff) + 1; |
| } |
| |
| +static void intel_crtc_mode_from_pipe_config(struct intel_crtc *intel_crtc, |
| + struct intel_crtc_config *pipe_config) |
| +{ |
| + struct drm_crtc *crtc = &intel_crtc->base; |
| + |
| + crtc->mode.hdisplay = pipe_config->adjusted_mode.crtc_hdisplay; |
| + crtc->mode.htotal = pipe_config->adjusted_mode.crtc_htotal; |
| + crtc->mode.hsync_start = pipe_config->adjusted_mode.crtc_hsync_start; |
| + crtc->mode.hsync_end = pipe_config->adjusted_mode.crtc_hsync_end; |
| + |
| + crtc->mode.vdisplay = pipe_config->adjusted_mode.crtc_vdisplay; |
| + crtc->mode.vtotal = pipe_config->adjusted_mode.crtc_vtotal; |
| + crtc->mode.vsync_start = pipe_config->adjusted_mode.crtc_vsync_start; |
| + crtc->mode.vsync_end = pipe_config->adjusted_mode.crtc_vsync_end; |
| + |
| + crtc->mode.flags = pipe_config->adjusted_mode.flags; |
| + |
| + crtc->mode.clock = pipe_config->adjusted_mode.clock; |
| + crtc->mode.flags |= pipe_config->adjusted_mode.flags; |
| +} |
| + |
| static void i9xx_set_pipeconf(struct intel_crtc *intel_crtc) |
| { |
| struct drm_device *dev = intel_crtc->base.dev; |
| @@ -9988,6 +10009,22 @@ void intel_modeset_setup_hw_state(struct |
| |
| intel_modeset_readout_hw_state(dev); |
| |
| + /* |
| + * Now that we have the config, copy it to each CRTC struct |
| + * Note that this could go away if we move to using crtc_config |
| + * checking everywhere. |
| + */ |
| + list_for_each_entry(crtc, &dev->mode_config.crtc_list, |
| + base.head) { |
| + if (crtc->active && i915_fastboot) { |
| + intel_crtc_mode_from_pipe_config(crtc, &crtc->config); |
| + |
| + DRM_DEBUG_KMS("[CRTC:%d] found active mode: ", |
| + crtc->base.base.id); |
| + drm_mode_debug_printmodeline(&crtc->base.mode); |
| + } |
| + } |
| + |
| /* HW state is read out, now we need to sanitize this mess. */ |
| list_for_each_entry(encoder, &dev->mode_config.encoder_list, |
| base.head) { |