Skip to content

Commit

Permalink
drm/i915: Update dummy connector atomic state with current config
Browse files Browse the repository at this point in the history
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: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
  • Loading branch information
Ander Conselvan de Oliveira authored and Daniel Vetter committed Mar 26, 2015
1 parent 9896972 commit d29b2f9
Showing 1 changed file with 36 additions and 9 deletions.
45 changes: 36 additions & 9 deletions drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
*
Expand All @@ -10240,6 +10261,8 @@ static void intel_modeset_commit_output_state(struct drm_device *dev)
crtc->base.state->enable = crtc->new_enabled;
crtc->base.enabled = crtc->new_enabled;
}

intel_modeset_update_connector_atomic_state(dev);
}

static void
Expand Down Expand Up @@ -13015,19 +13038,21 @@ static void intel_setup_outputs(struct drm_device *dev)
* testing/debug of the plane operations (and only when a specific
* 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
* be removed since we'll be setting up real connector state, which
* will contain Intel-specific properties.
*/
if (drm_core_check_feature(dev, DRIVER_ATOMIC)) {
list_for_each_entry(connector,
&dev->mode_config.connector_list,
head) {
if (!WARN_ON(connector->state)) {
connector->state =
kzalloc(sizeof(*connector->state),
GFP_KERNEL);
}
list_for_each_entry(connector,
&dev->mode_config.connector_list,
head) {
if (!WARN_ON(connector->state)) {
connector->state = kzalloc(sizeof(*connector->state),
GFP_KERNEL);
}
}

Expand Down Expand Up @@ -14080,6 +14105,8 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
"[setup_hw_state]");
}

intel_modeset_update_connector_atomic_state(dev);

for (i = 0; i < dev_priv->num_shared_dpll; i++) {
struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];

Expand Down

0 comments on commit d29b2f9

Please sign in to comment.