Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 329414c4 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'topic/drm-misc-2015-02-25' of git://anongit.freedesktop.org/drm-intel into drm-next

misc atomic and dp macros

* tag 'topic/drm-misc-2015-02-25' of git://anongit.freedesktop.org/drm-intel:
  drm: Adding edp1.4 specific dpcd macros
  drm/atomic-helpers: make mode_set hooks optional
  drm/atomic-helper: Rename commmit_post/pre_planes
  drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument
  drm: If available use atomic state in getcrtc ioctl
  drm: Add DRM_DEBUG_ATOMIC
  drm/atomic-helpers: Fix documentation typos and wrong copy&paste
  drm: Fix the CRTC_STEREO_DOUBLE_ONLY define to include stero modes
  drm: Fix drm_crtc_vblank_get() documentation
parents c517d838 e045d20b
Loading
Loading
Loading
Loading
+51 −49
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ drm_atomic_state_alloc(struct drm_device *dev)

	state->dev = dev;

	DRM_DEBUG_KMS("Allocate atomic state %p\n", state);
	DRM_DEBUG_ATOMIC("Allocate atomic state %p\n", state);

	return state;
fail:
@@ -122,7 +122,7 @@ void drm_atomic_state_clear(struct drm_atomic_state *state)
	struct drm_mode_config *config = &dev->mode_config;
	int i;

	DRM_DEBUG_KMS("Clearing atomic state %p\n", state);
	DRM_DEBUG_ATOMIC("Clearing atomic state %p\n", state);

	for (i = 0; i < state->num_connector; i++) {
		struct drm_connector *connector = state->connectors[i];
@@ -172,7 +172,7 @@ void drm_atomic_state_free(struct drm_atomic_state *state)
{
	drm_atomic_state_clear(state);

	DRM_DEBUG_KMS("Freeing atomic state %p\n", state);
	DRM_DEBUG_ATOMIC("Freeing atomic state %p\n", state);

	kfree_state(state);
}
@@ -217,7 +217,7 @@ drm_atomic_get_crtc_state(struct drm_atomic_state *state,
	state->crtcs[index] = crtc;
	crtc_state->state = state;

	DRM_DEBUG_KMS("Added [CRTC:%d] %p state to %p\n",
	DRM_DEBUG_ATOMIC("Added [CRTC:%d] %p state to %p\n",
			 crtc->base.id, crtc_state, state);

	return crtc_state;
@@ -293,7 +293,7 @@ static int drm_atomic_crtc_check(struct drm_crtc *crtc,
	 */

	if (state->active && !state->enable) {
		DRM_DEBUG_KMS("[CRTC:%d] active without enabled\n",
		DRM_DEBUG_ATOMIC("[CRTC:%d] active without enabled\n",
				 crtc->base.id);
		return -EINVAL;
	}
@@ -340,7 +340,7 @@ drm_atomic_get_plane_state(struct drm_atomic_state *state,
	state->planes[index] = plane;
	plane_state->state = state;

	DRM_DEBUG_KMS("Added [PLANE:%d] %p state to %p\n",
	DRM_DEBUG_ATOMIC("Added [PLANE:%d] %p state to %p\n",
			 plane->base.id, plane_state, state);

	if (plane_state->crtc) {
@@ -477,10 +477,10 @@ static int drm_atomic_plane_check(struct drm_plane *plane,

	/* either *both* CRTC and FB must be set, or neither */
	if (WARN_ON(state->crtc && !state->fb)) {
		DRM_DEBUG_KMS("CRTC set but no FB\n");
		DRM_DEBUG_ATOMIC("CRTC set but no FB\n");
		return -EINVAL;
	} else if (WARN_ON(state->fb && !state->crtc)) {
		DRM_DEBUG_KMS("FB set but no CRTC\n");
		DRM_DEBUG_ATOMIC("FB set but no CRTC\n");
		return -EINVAL;
	}

@@ -490,7 +490,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,

	/* Check whether this plane is usable on this CRTC */
	if (!(plane->possible_crtcs & drm_crtc_mask(state->crtc))) {
		DRM_DEBUG_KMS("Invalid crtc for plane\n");
		DRM_DEBUG_ATOMIC("Invalid crtc for plane\n");
		return -EINVAL;
	}

@@ -499,7 +499,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
		if (state->fb->pixel_format == plane->format_types[i])
			break;
	if (i == plane->format_count) {
		DRM_DEBUG_KMS("Invalid pixel format %s\n",
		DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
				 drm_get_format_name(state->fb->pixel_format));
		return -EINVAL;
	}
@@ -509,7 +509,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
	    state->crtc_x > INT_MAX - (int32_t) state->crtc_w ||
	    state->crtc_h > INT_MAX ||
	    state->crtc_y > INT_MAX - (int32_t) state->crtc_h) {
		DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n",
		DRM_DEBUG_ATOMIC("Invalid CRTC coordinates %ux%u+%d+%d\n",
				 state->crtc_w, state->crtc_h,
				 state->crtc_x, state->crtc_y);
		return -ERANGE;
@@ -523,7 +523,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
	    state->src_x > fb_width - state->src_w ||
	    state->src_h > fb_height ||
	    state->src_y > fb_height - state->src_h) {
		DRM_DEBUG_KMS("Invalid source coordinates "
		DRM_DEBUG_ATOMIC("Invalid source coordinates "
				 "%u.%06ux%u.%06u+%u.%06u+%u.%06u\n",
				 state->src_w >> 16, ((state->src_w & 0xffff) * 15625) >> 10,
				 state->src_h >> 16, ((state->src_h & 0xffff) * 15625) >> 10,
@@ -575,7 +575,7 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
	 * at most the array is a bit too large.
	 */
	if (index >= state->num_connector) {
		DRM_DEBUG_KMS("Hot-added connector would overflow state array, restarting\n");
		DRM_DEBUG_ATOMIC("Hot-added connector would overflow state array, restarting\n");
		return ERR_PTR(-EAGAIN);
	}

@@ -590,7 +590,7 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
	state->connectors[index] = connector;
	connector_state->state = state;

	DRM_DEBUG_KMS("Added [CONNECTOR:%d] %p state to %p\n",
	DRM_DEBUG_ATOMIC("Added [CONNECTOR:%d] %p state to %p\n",
			 connector->base.id, connector_state, state);

	if (connector_state->crtc) {
@@ -752,10 +752,11 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state,
	}

	if (crtc)
		DRM_DEBUG_KMS("Link plane state %p to [CRTC:%d]\n",
		DRM_DEBUG_ATOMIC("Link plane state %p to [CRTC:%d]\n",
				 plane_state, crtc->base.id);
	else
		DRM_DEBUG_KMS("Link plane state %p to [NOCRTC]\n", plane_state);
		DRM_DEBUG_ATOMIC("Link plane state %p to [NOCRTC]\n",
				 plane_state);

	return 0;
}
@@ -782,10 +783,11 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state,
	plane_state->fb = fb;

	if (fb)
		DRM_DEBUG_KMS("Set [FB:%d] for plane state %p\n",
		DRM_DEBUG_ATOMIC("Set [FB:%d] for plane state %p\n",
				 fb->base.id, plane_state);
	else
		DRM_DEBUG_KMS("Set [NOFB] for plane state %p\n", plane_state);
		DRM_DEBUG_ATOMIC("Set [NOFB] for plane state %p\n",
				 plane_state);
}
EXPORT_SYMBOL(drm_atomic_set_fb_for_plane);

@@ -818,10 +820,10 @@ drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state,
	conn_state->crtc = crtc;

	if (crtc)
		DRM_DEBUG_KMS("Link connector state %p to [CRTC:%d]\n",
		DRM_DEBUG_ATOMIC("Link connector state %p to [CRTC:%d]\n",
				 conn_state, crtc->base.id);
	else
		DRM_DEBUG_KMS("Link connector state %p to [NOCRTC]\n",
		DRM_DEBUG_ATOMIC("Link connector state %p to [NOCRTC]\n",
				 conn_state);

	return 0;
@@ -858,7 +860,7 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
	if (ret)
		return ret;

	DRM_DEBUG_KMS("Adding all current connectors for [CRTC:%d] to %p\n",
	DRM_DEBUG_ATOMIC("Adding all current connectors for [CRTC:%d] to %p\n",
			 crtc->base.id, state);

	/*
@@ -901,7 +903,7 @@ drm_atomic_connectors_for_crtc(struct drm_atomic_state *state,
			num_connected_connectors++;
	}

	DRM_DEBUG_KMS("State %p has %i connectors for [CRTC:%d]\n",
	DRM_DEBUG_ATOMIC("State %p has %i connectors for [CRTC:%d]\n",
			 state, num_connected_connectors, crtc->base.id);

	return num_connected_connectors;
@@ -953,7 +955,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
	int ncrtcs = config->num_crtc;
	int i, ret = 0;

	DRM_DEBUG_KMS("checking %p\n", state);
	DRM_DEBUG_ATOMIC("checking %p\n", state);

	for (i = 0; i < nplanes; i++) {
		struct drm_plane *plane = state->planes[i];
@@ -963,7 +965,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)

		ret = drm_atomic_plane_check(plane, state->plane_states[i]);
		if (ret) {
			DRM_DEBUG_KMS("[PLANE:%d] atomic core check failed\n",
			DRM_DEBUG_ATOMIC("[PLANE:%d] atomic core check failed\n",
					 plane->base.id);
			return ret;
		}
@@ -977,7 +979,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)

		ret = drm_atomic_crtc_check(crtc, state->crtc_states[i]);
		if (ret) {
			DRM_DEBUG_KMS("[CRTC:%d] atomic core check failed\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d] atomic core check failed\n",
					 crtc->base.id);
			return ret;
		}
@@ -996,7 +998,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)

			if (crtc_state->mode_changed ||
			    crtc_state->active_changed) {
				DRM_DEBUG_KMS("[CRTC:%d] requires full modeset\n",
				DRM_DEBUG_ATOMIC("[CRTC:%d] requires full modeset\n",
						 crtc->base.id);
				return -EINVAL;
			}
@@ -1032,7 +1034,7 @@ int drm_atomic_commit(struct drm_atomic_state *state)
	if (ret)
		return ret;

	DRM_DEBUG_KMS("commiting %p\n", state);
	DRM_DEBUG_ATOMIC("commiting %p\n", state);

	return config->funcs->atomic_commit(state->dev, state, false);
}
@@ -1063,7 +1065,7 @@ int drm_atomic_async_commit(struct drm_atomic_state *state)
	if (ret)
		return ret;

	DRM_DEBUG_KMS("commiting %p asynchronously\n", state);
	DRM_DEBUG_ATOMIC("commiting %p asynchronously\n", state);

	return config->funcs->atomic_commit(state->dev, state, true);
}
+103 −89
Original line number Diff line number Diff line
@@ -116,7 +116,7 @@ steal_encoder(struct drm_atomic_state *state,
	 */
	WARN_ON(!drm_modeset_is_locked(&config->connection_mutex));

	DRM_DEBUG_KMS("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n",
	DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n",
			 encoder->base.id, encoder->name,
			 encoder_crtc->base.id);

@@ -130,7 +130,7 @@ steal_encoder(struct drm_atomic_state *state,
		if (connector->state->best_encoder != encoder)
			continue;

		DRM_DEBUG_KMS("Stealing encoder from [CONNECTOR:%d:%s]\n",
		DRM_DEBUG_ATOMIC("Stealing encoder from [CONNECTOR:%d:%s]\n",
				 connector->base.id,
				 connector->name);

@@ -165,7 +165,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
	if (!connector)
		return 0;

	DRM_DEBUG_KMS("Updating routing for [CONNECTOR:%d:%s]\n",
	DRM_DEBUG_ATOMIC("Updating routing for [CONNECTOR:%d:%s]\n",
			 connector->base.id,
			 connector->name);

@@ -186,7 +186,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
	}

	if (!connector_state->crtc) {
		DRM_DEBUG_KMS("Disabling [CONNECTOR:%d:%s]\n",
		DRM_DEBUG_ATOMIC("Disabling [CONNECTOR:%d:%s]\n",
				connector->base.id,
				connector->name);

@@ -199,14 +199,14 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
	new_encoder = funcs->best_encoder(connector);

	if (!new_encoder) {
		DRM_DEBUG_KMS("No suitable encoder found for [CONNECTOR:%d:%s]\n",
		DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
				 connector->base.id,
				 connector->name);
		return -EINVAL;
	}

	if (new_encoder == connector_state->best_encoder) {
		DRM_DEBUG_KMS("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n",
		DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n",
				 connector->base.id,
				 connector->name,
				 new_encoder->base.id,
@@ -222,7 +222,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
	if (encoder_crtc) {
		ret = steal_encoder(state, new_encoder, encoder_crtc);
		if (ret) {
			DRM_DEBUG_KMS("Encoder stealing failed for [CONNECTOR:%d:%s]\n",
			DRM_DEBUG_ATOMIC("Encoder stealing failed for [CONNECTOR:%d:%s]\n",
					 connector->base.id,
					 connector->name);
			return ret;
@@ -235,7 +235,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
	crtc_state = state->crtc_states[idx];
	crtc_state->mode_changed = true;

	DRM_DEBUG_KMS("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
	DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
			 connector->base.id,
			 connector->name,
			 new_encoder->base.id,
@@ -292,7 +292,7 @@ mode_fixup(struct drm_atomic_state *state)
					encoder->bridge, &crtc_state->mode,
					&crtc_state->adjusted_mode);
			if (!ret) {
				DRM_DEBUG_KMS("Bridge fixup failed\n");
				DRM_DEBUG_ATOMIC("Bridge fixup failed\n");
				return -EINVAL;
			}
		}
@@ -301,7 +301,7 @@ mode_fixup(struct drm_atomic_state *state)
			ret = funcs->atomic_check(encoder, crtc_state,
						  conn_state);
			if (ret) {
				DRM_DEBUG_KMS("[ENCODER:%d:%s] check failed\n",
				DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] check failed\n",
						 encoder->base.id, encoder->name);
				return ret;
			}
@@ -309,7 +309,7 @@ mode_fixup(struct drm_atomic_state *state)
			ret = funcs->mode_fixup(encoder, &crtc_state->mode,
						&crtc_state->adjusted_mode);
			if (!ret) {
				DRM_DEBUG_KMS("[ENCODER:%d:%s] fixup failed\n",
				DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] fixup failed\n",
						 encoder->base.id, encoder->name);
				return -EINVAL;
			}
@@ -330,7 +330,7 @@ mode_fixup(struct drm_atomic_state *state)
		ret = funcs->mode_fixup(crtc, &crtc_state->mode,
					&crtc_state->adjusted_mode);
		if (!ret) {
			DRM_DEBUG_KMS("[CRTC:%d] fixup failed\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d] fixup failed\n",
					 crtc->base.id);
			return -EINVAL;
		}
@@ -384,13 +384,13 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
			continue;

		if (!drm_mode_equal(&crtc->state->mode, &crtc_state->mode)) {
			DRM_DEBUG_KMS("[CRTC:%d] mode changed\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d] mode changed\n",
					 crtc->base.id);
			crtc_state->mode_changed = true;
		}

		if (crtc->state->enable != crtc_state->enable) {
			DRM_DEBUG_KMS("[CRTC:%d] enable changed\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d] enable changed\n",
					 crtc->base.id);
			crtc_state->mode_changed = true;
		}
@@ -428,7 +428,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
		 * a full modeset because update_connector_routing force that.
		 */
		if (crtc->state->active != crtc_state->active) {
			DRM_DEBUG_KMS("[CRTC:%d] active changed\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d] active changed\n",
					 crtc->base.id);
			crtc_state->active_changed = true;
		}
@@ -436,7 +436,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
		if (!needs_modeset(crtc_state))
			continue;

		DRM_DEBUG_KMS("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
		DRM_DEBUG_ATOMIC("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
				 crtc->base.id,
				 crtc_state->enable ? 'y' : 'n',
			      crtc_state->active ? 'y' : 'n');
@@ -449,7 +449,7 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
								crtc);

		if (crtc_state->enable != !!num_connectors) {
			DRM_DEBUG_KMS("[CRTC:%d] enabled/connectors mismatch\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d] enabled/connectors mismatch\n",
					 crtc->base.id);

			return -EINVAL;
@@ -497,7 +497,7 @@ drm_atomic_helper_check_planes(struct drm_device *dev,

		ret = funcs->atomic_check(plane, plane_state);
		if (ret) {
			DRM_DEBUG_KMS("[PLANE:%d] atomic driver check failed\n",
			DRM_DEBUG_ATOMIC("[PLANE:%d] atomic driver check failed\n",
					 plane->base.id);
			return ret;
		}
@@ -517,7 +517,7 @@ drm_atomic_helper_check_planes(struct drm_device *dev,

		ret = funcs->atomic_check(crtc, state->crtc_states[i]);
		if (ret) {
			DRM_DEBUG_KMS("[CRTC:%d] atomic driver check failed\n",
			DRM_DEBUG_ATOMIC("[CRTC:%d] atomic driver check failed\n",
					 crtc->base.id);
			return ret;
		}
@@ -600,7 +600,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)

		funcs = encoder->helper_private;

		DRM_DEBUG_KMS("disabling [ENCODER:%d:%s]\n",
		DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n",
				 encoder->base.id, encoder->name);

		/*
@@ -639,7 +639,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)

		funcs = crtc->helper_private;

		DRM_DEBUG_KMS("disabling [CRTC:%d]\n",
		DRM_DEBUG_ATOMIC("disabling [CRTC:%d]\n",
				 crtc->base.id);


@@ -723,8 +723,8 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)

		funcs = crtc->helper_private;

		if (crtc->state->enable) {
			DRM_DEBUG_KMS("modeset on [CRTC:%d]\n",
		if (crtc->state->enable && funcs->mode_set_nofb) {
			DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
					 crtc->base.id);

			funcs->mode_set_nofb(crtc);
@@ -752,13 +752,14 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
		if (!new_crtc_state->mode_changed)
			continue;

		DRM_DEBUG_KMS("modeset on [ENCODER:%d:%s]\n",
		DRM_DEBUG_ATOMIC("modeset on [ENCODER:%d:%s]\n",
				 encoder->base.id, encoder->name);

		/*
		 * Each encoder has at most one connector (since we always steal
		 * it away), so we won't call call mode_set hooks twice.
		 */
		if (funcs->mode_set)
			funcs->mode_set(encoder, mode, adjusted_mode);

		if (encoder->bridge && encoder->bridge->funcs->mode_set)
@@ -768,33 +769,43 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
}

/**
 * drm_atomic_helper_commit_pre_planes - modeset commit before plane updates
 * drm_atomic_helper_commit_modeset_disables - modeset commit to disable outputs
 * @dev: DRM device
 * @state: atomic state
 * @old_state: atomic state object with old state structures
 *
 * This function commits the modeset changes that need to be committed before
 * updating planes. It shuts down all the outputs that need to be shut down and
 * This function shuts down all the outputs that need to be shut down and
 * prepares them (if required) with the new mode.
 *
 * For compatability with legacy crtc helpers this should be called before
 * drm_atomic_helper_commit_planes(), which is what the default commit function
 * does. But drivers with different needs can group the modeset commits together
 * and do the plane commits at the end. This is useful for drivers doing runtime
 * PM since planes updates then only happen when the CRTC is actually enabled.
 */
void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
					 struct drm_atomic_state *state)
void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
					       struct drm_atomic_state *old_state)
{
	disable_outputs(dev, state);
	set_routing_links(dev, state);
	crtc_set_mode(dev, state);
	disable_outputs(dev, old_state);
	set_routing_links(dev, old_state);
	crtc_set_mode(dev, old_state);
}
EXPORT_SYMBOL(drm_atomic_helper_commit_pre_planes);
EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_disables);

/**
 * drm_atomic_helper_commit_post_planes - modeset commit after plane updates
 * drm_atomic_helper_commit_modeset_enables - modeset commit to enable outputs
 * @dev: DRM device
 * @old_state: atomic state object with old state structures
 *
 * This function commits the modeset changes that need to be committed after
 * updating planes: It enables all the outputs with the new configuration which
 * had to be turned off for the update.
 * This function enables all the outputs with the new configuration which had to
 * be turned off for the update.
 *
 * For compatability with legacy crtc helpers this should be called after
 * drm_atomic_helper_commit_planes(), which is what the default commit function
 * does. But drivers with different needs can group the modeset commits together
 * and do the plane commits at the end. This is useful for drivers doing runtime
 * PM since planes updates then only happen when the CRTC is actually enabled.
 */
void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
					      struct drm_atomic_state *old_state)
{
	int ncrtcs = old_state->dev->mode_config.num_crtc;
@@ -816,7 +827,7 @@ void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
		funcs = crtc->helper_private;

		if (crtc->state->enable) {
			DRM_DEBUG_KMS("enabling [CRTC:%d]\n",
			DRM_DEBUG_ATOMIC("enabling [CRTC:%d]\n",
					 crtc->base.id);

			if (funcs->enable)
@@ -842,7 +853,7 @@ void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
		encoder = connector->state->best_encoder;
		funcs = encoder->helper_private;

		DRM_DEBUG_KMS("enabling [ENCODER:%d:%s]\n",
		DRM_DEBUG_ATOMIC("enabling [ENCODER:%d:%s]\n",
				 encoder->base.id, encoder->name);

		/*
@@ -861,7 +872,7 @@ void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
			encoder->bridge->funcs->enable(encoder->bridge);
	}
}
EXPORT_SYMBOL(drm_atomic_helper_commit_post_planes);
EXPORT_SYMBOL(drm_atomic_helper_commit_modeset_enables);

static void wait_for_fences(struct drm_device *dev,
			    struct drm_atomic_state *state)
@@ -1030,11 +1041,11 @@ int drm_atomic_helper_commit(struct drm_device *dev,

	wait_for_fences(dev, state);

	drm_atomic_helper_commit_pre_planes(dev, state);
	drm_atomic_helper_commit_modeset_disables(dev, state);

	drm_atomic_helper_commit_planes(dev, state);

	drm_atomic_helper_commit_post_planes(dev, state);
	drm_atomic_helper_commit_modeset_enables(dev, state);

	drm_atomic_helper_wait_for_vblanks(dev, state);

@@ -1678,12 +1689,13 @@ int drm_atomic_helper_set_config(struct drm_mode_set *set)
EXPORT_SYMBOL(drm_atomic_helper_set_config);

/**
 * drm_atomic_helper_crtc_set_property - helper for crtc prorties
 * drm_atomic_helper_crtc_set_property - helper for crtc properties
 * @crtc: DRM crtc
 * @property: DRM property
 * @val: value of property
 *
 * Provides a default plane disablle handler using the atomic driver interface.
 * Provides a default crtc set_property handler using the atomic driver
 * interface.
 *
 * RETURNS:
 * Zero on success, error code on failure
@@ -1737,12 +1749,13 @@ drm_atomic_helper_crtc_set_property(struct drm_crtc *crtc,
EXPORT_SYMBOL(drm_atomic_helper_crtc_set_property);

/**
 * drm_atomic_helper_plane_set_property - helper for plane prorties
 * drm_atomic_helper_plane_set_property - helper for plane properties
 * @plane: DRM plane
 * @property: DRM property
 * @val: value of property
 *
 * Provides a default plane disable handler using the atomic driver interface.
 * Provides a default plane set_property handler using the atomic driver
 * interface.
 *
 * RETURNS:
 * Zero on success, error code on failure
@@ -1796,12 +1809,13 @@ drm_atomic_helper_plane_set_property(struct drm_plane *plane,
EXPORT_SYMBOL(drm_atomic_helper_plane_set_property);

/**
 * drm_atomic_helper_connector_set_property - helper for connector prorties
 * drm_atomic_helper_connector_set_property - helper for connector properties
 * @connector: DRM connector
 * @property: DRM property
 * @val: value of property
 *
 * Provides a default plane disablle handler using the atomic driver interface.
 * Provides a default connector set_property handler using the atomic driver
 * interface.
 *
 * RETURNS:
 * Zero on success, error code on failure
+18 −7
Original line number Diff line number Diff line
@@ -2009,22 +2009,33 @@ int drm_mode_getcrtc(struct drm_device *dev,
		return -ENOENT;

	drm_modeset_lock_crtc(crtc, crtc->primary);
	crtc_resp->x = crtc->x;
	crtc_resp->y = crtc->y;
	crtc_resp->gamma_size = crtc->gamma_size;
	if (crtc->primary->fb)
		crtc_resp->fb_id = crtc->primary->fb->base.id;
	else
		crtc_resp->fb_id = 0;

	if (crtc->enabled) {
	if (crtc->state) {
		crtc_resp->x = crtc->primary->state->src_x >> 16;
		crtc_resp->y = crtc->primary->state->src_y >> 16;
		if (crtc->state->enable) {
			drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->state->mode);
			crtc_resp->mode_valid = 1;

		} else {
			crtc_resp->mode_valid = 0;
		}
	} else {
		crtc_resp->x = crtc->x;
		crtc_resp->y = crtc->y;
		if (crtc->enabled) {
			drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
			crtc_resp->mode_valid = 1;

		} else {
			crtc_resp->mode_valid = 0;
		}
	}
	drm_modeset_unlock_crtc(crtc);

	return 0;
+1 −1
Original line number Diff line number Diff line
@@ -1052,7 +1052,7 @@ EXPORT_SYMBOL(drm_vblank_get);
 * Acquire a reference count on vblank events to avoid having them disabled
 * while in use.
 *
 * This is the native kms version of drm_vblank_off().
 * This is the native kms version of drm_vblank_get().
 *
 * Returns:
 * Zero on success, nonzero on failure.
+2 −2
Original line number Diff line number Diff line
@@ -134,9 +134,9 @@ int intel_atomic_commit(struct drm_device *dev,
	 * FIXME:  The proper sequence here will eventually be:
	 *
	 * drm_atomic_helper_swap_state(dev, state)
	 * drm_atomic_helper_commit_pre_planes(dev, state);
	 * drm_atomic_helper_commit_modeset_disables(dev, state);
	 * drm_atomic_helper_commit_planes(dev, state);
	 * drm_atomic_helper_commit_post_planes(dev, state);
	 * drm_atomic_helper_commit_modeset_enables(dev, state);
	 * drm_atomic_helper_wait_for_vblanks(dev, state);
	 * drm_atomic_helper_cleanup_planes(dev, state);
	 * drm_atomic_state_free(state);
Loading