Skip to content

Commit

Permalink
drm/i915: Don't use staged config in check_digital_port_conflicts()
Browse files Browse the repository at this point in the history
Reduce dependency on the staged config by using the atomic state
instead.

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 Apr 10, 2015
1 parent d69ba09 commit 5448a00
Showing 1 changed file with 14 additions and 8 deletions.
22 changes: 14 additions & 8 deletions drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -10658,23 +10658,30 @@ static bool check_encoder_cloning(struct intel_crtc *crtc)
return true;
}

static bool check_digital_port_conflicts(struct drm_device *dev)
static bool check_digital_port_conflicts(struct drm_atomic_state *state)
{
struct intel_connector *connector;
struct drm_device *dev = state->dev;
struct intel_encoder *encoder;
struct drm_connector_state *connector_state;
unsigned int used_ports = 0;
int i;

/*
* Walk the connector list instead of the encoder
* list to detect the problem on ddi platforms
* where there's just one encoder per digital port.
*/
for_each_intel_connector(dev, connector) {
struct intel_encoder *encoder = connector->new_encoder;
for (i = 0; i < state->num_connector; i++) {
if (!state->connectors[i])
continue;

if (!encoder)
connector_state = state->connector_states[i];
if (!connector_state->best_encoder)
continue;

WARN_ON(!encoder->new_crtc);
encoder = to_intel_encoder(connector_state->best_encoder);

WARN_ON(!connector_state->crtc);

switch (encoder->type) {
unsigned int port_mask;
Expand Down Expand Up @@ -10716,7 +10723,6 @@ intel_modeset_pipe_config(struct drm_crtc *crtc,
struct drm_display_mode *mode,
struct drm_atomic_state *state)
{
struct drm_device *dev = crtc->dev;
struct intel_encoder *encoder;
struct intel_connector *connector;
struct drm_connector_state *connector_state;
Expand All @@ -10730,7 +10736,7 @@ intel_modeset_pipe_config(struct drm_crtc *crtc,
return ERR_PTR(-EINVAL);
}

if (!check_digital_port_conflicts(dev)) {
if (!check_digital_port_conflicts(state)) {
DRM_DEBUG_KMS("rejecting conflicting digital port configuration\n");
return ERR_PTR(-EINVAL);
}
Expand Down

0 comments on commit 5448a00

Please sign in to comment.