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,19 +13038,21 @@ static void intel_setup_outputs(struct drm_device *dev) ...@@ -13015,19 +13038,21 @@ 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 = kzalloc(sizeof(*connector->state),
connector->state = GFP_KERNEL);
kzalloc(sizeof(*connector->state),
GFP_KERNEL);
}
} }
} }
...@@ -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