[Intel-gfx] [PATCH 05/24] drm/i915: add fastboot checks for has_audio and has_infoframe
Maarten Lankhorst
maarten.lankhorst at linux.intel.com
Mon Jun 1 06:27:08 PDT 2015
The original commit 206645910b97
"drm/i915: check for audio and infoframe changes across mode sets v2"
added checking when has_audio and has_infoframe were changed.
It seems the original commit added both checks for the fastboot case.
By setting crtc_state->mode_changed the code will disable the crtc,
and re-enable it.
This doesn't work on boot, so there we just turn off the crtc.
Later on it should re-enable the crtc anyway, with the correct
settings.
Cc: Jesse Barnes <jbarnes at virtuousgeek.org>
Cc: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira at intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst at linux.intel.com>
---
drivers/gpu/drm/i915/intel_display.c | 40 ++++++++++++++----------------------
1 file changed, 15 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 4dc07602248b..0f75b1e206f6 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -11866,19 +11866,6 @@ encoder_retry:
DRM_DEBUG_KMS("plane bpp: %i, pipe bpp: %i, dithering: %i\n",
base_bpp, pipe_config->pipe_bpp, pipe_config->dither);
- /* Check if we need to force a modeset */
- if (pipe_config->has_audio !=
- to_intel_crtc_state(crtc->state)->has_audio) {
- pipe_config->base.mode_changed = true;
- ret = drm_atomic_add_affected_planes(state, crtc);
- }
-
- /*
- * Note we have an issue here with infoframes: current code
- * only updates them on the full mode set path per hw
- * requirements. So here we should be checking for any
- * required changes and forcing a mode set.
- */
fail:
return ret;
}
@@ -12645,19 +12632,9 @@ intel_modeset_compute_config(struct drm_atomic_state *state)
return ret;
for_each_crtc_in_state(state, crtc, crtc_state, i) {
- if (!crtc_state->enable &&
- WARN_ON(crtc_state->active))
- crtc_state->active = false;
-
- if (!crtc_state->enable)
+ if (!needs_modeset(crtc_state) || !crtc_state->enable)
continue;
- if (!needs_modeset(crtc_state)) {
- ret = drm_atomic_add_affected_connectors(state, crtc);
- if (ret)
- return ret;
- }
-
ret = intel_modeset_pipe_config(crtc,
to_intel_crtc_state(crtc_state));
if (ret)
@@ -15239,18 +15216,31 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
crtc_state->mode_changed =
crtc_state->planes_changed = false;
- if (crtc->enabled) {
+ if (crtc->state->enable) {
intel_mode_from_pipe_config(&crtc->state->mode,
to_intel_crtc_state(crtc->state));
drm_mode_copy(&crtc->mode, &crtc->state->mode);
drm_mode_copy(&crtc->hwmode,
&crtc->state->adjusted_mode);
+
+ /* Check if we need to force a modeset */
+ if (to_intel_crtc_state(crtc_state)->has_audio !=
+ to_intel_crtc_state(crtc->state)->has_audio)
+ crtc_state->mode_changed = true;
+
+ if (to_intel_crtc_state(crtc_state)->has_infoframe !=
+ to_intel_crtc_state(crtc->state)->has_infoframe)
+ crtc_state->mode_changed = true;
}
intel_sanitize_crtc(intel_crtc, !force_restore ? NULL :
to_intel_crtc_state(crtc_state));
+ /* turn CRTC off if a modeset is requested. */
+ if (crtc_state->mode_changed && !force_restore)
+ intel_crtc_control(crtc, false, true);
+
/*
* sanitize_crtc may have forced an update of crtc->state,
* so reload in intel_dump_pipe_config
--
2.1.0
More information about the Intel-gfx
mailing list