Commit d29b2f9d authored by Ander Conselvan de Oliveira's avatar Ander Conselvan de Oliveira Committed by Daniel Vetter

drm/i915: Update dummy connector atomic state with current config

Keep that state updated so that we can write code that depends on it on
the follow up patches.

v2: Fix BUG due to stale connector_state->crtc value. (Chandra)

v3: Update comment about dummy state connectors. (Chandra)
Signed-off-by: default avatarAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 98969725
...@@ -10217,6 +10217,27 @@ static void intel_modeset_update_staged_output_state(struct drm_device *dev) ...@@ -10217,6 +10217,27 @@ static void intel_modeset_update_staged_output_state(struct drm_device *dev)
} }
} }
/* Transitional helper to copy current connector/encoder state to
* connector->state. This is needed so that code that is partially
* converted to atomic does the right thing.
*/
static void intel_modeset_update_connector_atomic_state(struct drm_device *dev)
{
struct intel_connector *connector;
for_each_intel_connector(dev, connector) {
if (connector->base.encoder) {
connector->base.state->best_encoder =
connector->base.encoder;
connector->base.state->crtc =
connector->base.encoder->crtc;
} else {
connector->base.state->best_encoder = NULL;
connector->base.state->crtc = NULL;
}
}
}
/** /**
* intel_modeset_commit_output_state * intel_modeset_commit_output_state
* *
...@@ -10240,6 +10261,8 @@ static void intel_modeset_commit_output_state(struct drm_device *dev) ...@@ -10240,6 +10261,8 @@ static void intel_modeset_commit_output_state(struct drm_device *dev)
crtc->base.state->enable = crtc->new_enabled; crtc->base.state->enable = crtc->new_enabled;
crtc->base.enabled = crtc->new_enabled; crtc->base.enabled = crtc->new_enabled;
} }
intel_modeset_update_connector_atomic_state(dev);
} }
static void static void
...@@ -13015,21 +13038,23 @@ static void intel_setup_outputs(struct drm_device *dev) ...@@ -13015,21 +13038,23 @@ static void intel_setup_outputs(struct drm_device *dev)
* testing/debug of the plane operations (and only when a specific * testing/debug of the plane operations (and only when a specific
* kernel module option is given), that shouldn't really matter. * kernel module option is given), that shouldn't really matter.
* *
* We are also relying on these states to convert the legacy mode set
* to use a drm_atomic_state struct. The states are kept consistent
* with actual state, so that it is safe to rely on that instead of
* the staged config.
*
* Once atomic support for crtc's + connectors lands, this loop should * Once atomic support for crtc's + connectors lands, this loop should
* be removed since we'll be setting up real connector state, which * be removed since we'll be setting up real connector state, which
* will contain Intel-specific properties. * will contain Intel-specific properties.
*/ */
if (drm_core_check_feature(dev, DRIVER_ATOMIC)) {
list_for_each_entry(connector, list_for_each_entry(connector,
&dev->mode_config.connector_list, &dev->mode_config.connector_list,
head) { head) {
if (!WARN_ON(connector->state)) { if (!WARN_ON(connector->state)) {
connector->state = connector->state = kzalloc(sizeof(*connector->state),
kzalloc(sizeof(*connector->state),
GFP_KERNEL); GFP_KERNEL);
} }
} }
}
intel_psr_init(dev); intel_psr_init(dev);
...@@ -14080,6 +14105,8 @@ void intel_modeset_setup_hw_state(struct drm_device *dev, ...@@ -14080,6 +14105,8 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
"[setup_hw_state]"); "[setup_hw_state]");
} }
intel_modeset_update_connector_atomic_state(dev);
for (i = 0; i < dev_priv->num_shared_dpll; i++) { for (i = 0; i < dev_priv->num_shared_dpll; i++) {
struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i]; struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment