mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 02:55:42 +07:00
drm/i915: Assign hwmode after encoder state readout
The dotclock is often calculated in encoder .get_config(), so we shouldn't copy the adjusted_mode to hwmode until we have read out the dotclock. Gets rid of some warnings like these: [drm:drm_calc_timestamping_constants [drm]] *ERROR* crtc 21: Can't calculate constants, dotclock = 0! [drm:i915_get_vblank_timestamp] crtc 0 is disabled v2: Steal Maarten's idea to move crtc->mode etc. assignment too Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Cc: Patrik Jakobsson <patrik.jakobsson@linux.intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91428 Reviewed-by: Patrik Jakobsson <patrik.jakobsson@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> [Jani: cherry-picked from -next to v4.3] Acked-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
2e2edebefc
commit
c4816c7389
@ -15132,33 +15132,6 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
|
|||||||
crtc->base.state->active = crtc->active;
|
crtc->base.state->active = crtc->active;
|
||||||
crtc->base.enabled = crtc->active;
|
crtc->base.enabled = crtc->active;
|
||||||
|
|
||||||
memset(&crtc->base.mode, 0, sizeof(crtc->base.mode));
|
|
||||||
if (crtc->base.state->active) {
|
|
||||||
intel_mode_from_pipe_config(&crtc->base.mode, crtc->config);
|
|
||||||
intel_mode_from_pipe_config(&crtc->base.state->adjusted_mode, crtc->config);
|
|
||||||
WARN_ON(drm_atomic_set_mode_for_crtc(crtc->base.state, &crtc->base.mode));
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The initial mode needs to be set in order to keep
|
|
||||||
* the atomic core happy. It wants a valid mode if the
|
|
||||||
* crtc's enabled, so we do the above call.
|
|
||||||
*
|
|
||||||
* At this point some state updated by the connectors
|
|
||||||
* in their ->detect() callback has not run yet, so
|
|
||||||
* no recalculation can be done yet.
|
|
||||||
*
|
|
||||||
* Even if we could do a recalculation and modeset
|
|
||||||
* right now it would cause a double modeset if
|
|
||||||
* fbdev or userspace chooses a different initial mode.
|
|
||||||
*
|
|
||||||
* If that happens, someone indicated they wanted a
|
|
||||||
* mode change, which means it's safe to do a full
|
|
||||||
* recalculation.
|
|
||||||
*/
|
|
||||||
crtc->base.state->mode.private_flags = I915_MODE_FLAG_INHERITED;
|
|
||||||
}
|
|
||||||
|
|
||||||
crtc->base.hwmode = crtc->config->base.adjusted_mode;
|
|
||||||
readout_plane_state(crtc, to_intel_crtc_state(crtc->base.state));
|
readout_plane_state(crtc, to_intel_crtc_state(crtc->base.state));
|
||||||
|
|
||||||
DRM_DEBUG_KMS("[CRTC:%d] hw state readout: %s\n",
|
DRM_DEBUG_KMS("[CRTC:%d] hw state readout: %s\n",
|
||||||
@ -15218,6 +15191,36 @@ static void intel_modeset_readout_hw_state(struct drm_device *dev)
|
|||||||
connector->base.name,
|
connector->base.name,
|
||||||
connector->base.encoder ? "enabled" : "disabled");
|
connector->base.encoder ? "enabled" : "disabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for_each_intel_crtc(dev, crtc) {
|
||||||
|
crtc->base.hwmode = crtc->config->base.adjusted_mode;
|
||||||
|
|
||||||
|
memset(&crtc->base.mode, 0, sizeof(crtc->base.mode));
|
||||||
|
if (crtc->base.state->active) {
|
||||||
|
intel_mode_from_pipe_config(&crtc->base.mode, crtc->config);
|
||||||
|
intel_mode_from_pipe_config(&crtc->base.state->adjusted_mode, crtc->config);
|
||||||
|
WARN_ON(drm_atomic_set_mode_for_crtc(crtc->base.state, &crtc->base.mode));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The initial mode needs to be set in order to keep
|
||||||
|
* the atomic core happy. It wants a valid mode if the
|
||||||
|
* crtc's enabled, so we do the above call.
|
||||||
|
*
|
||||||
|
* At this point some state updated by the connectors
|
||||||
|
* in their ->detect() callback has not run yet, so
|
||||||
|
* no recalculation can be done yet.
|
||||||
|
*
|
||||||
|
* Even if we could do a recalculation and modeset
|
||||||
|
* right now it would cause a double modeset if
|
||||||
|
* fbdev or userspace chooses a different initial mode.
|
||||||
|
*
|
||||||
|
* If that happens, someone indicated they wanted a
|
||||||
|
* mode change, which means it's safe to do a full
|
||||||
|
* recalculation.
|
||||||
|
*/
|
||||||
|
crtc->base.state->mode.private_flags = I915_MODE_FLAG_INHERITED;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Scan out the current hw modeset state,
|
/* Scan out the current hw modeset state,
|
||||||
|
Loading…
Reference in New Issue
Block a user