* [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC
@ 2015-02-22 11:24 Daniel Vetter
2015-02-22 11:24 ` [PATCH 2/5] drm: If available use atomic state in getcrtc ioctl Daniel Vetter
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: Daniel Vetter @ 2015-02-22 11:24 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
Atomic state handling adds a lot of indirection and complexity between
simple updates and drivers. For easier debugging the diagnostic output
is therefore rather chatty. Which is great for tracking down atomic
issues, but really annoying otherwise.
Add a new DRM_DEBUG_ATOMIC to be able to filter this out.
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_atomic.c | 100 +++++++++++++++--------------
drivers/gpu/drm/drm_atomic_helper.c | 124 ++++++++++++++++++------------------
include/drm/drmP.h | 9 +++
3 files changed, 122 insertions(+), 111 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
index c2e9c5283136..321e098ddf04 100644
--- a/drivers/gpu/drm/drm_atomic.c
+++ b/drivers/gpu/drm/drm_atomic.c
@@ -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,8 +217,8 @@ 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",
- crtc->base.id, crtc_state, state);
+ DRM_DEBUG_ATOMIC("Added [CRTC:%d] %p state to %p\n",
+ crtc->base.id, crtc_state, state);
return crtc_state;
}
@@ -293,8 +293,8 @@ static int drm_atomic_crtc_check(struct drm_crtc *crtc,
*/
if (state->active && !state->enable) {
- DRM_DEBUG_KMS("[CRTC:%d] active without enabled\n",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CRTC:%d] active without enabled\n",
+ crtc->base.id);
return -EINVAL;
}
@@ -340,8 +340,8 @@ 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",
- plane->base.id, plane_state, state);
+ DRM_DEBUG_ATOMIC("Added [PLANE:%d] %p state to %p\n",
+ plane->base.id, plane_state, state);
if (plane_state->crtc) {
struct drm_crtc_state *crtc_state;
@@ -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,8 +499,8 @@ 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_get_format_name(state->fb->pixel_format));
+ DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
+ drm_get_format_name(state->fb->pixel_format));
return -EINVAL;
}
@@ -509,9 +509,9 @@ 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",
- state->crtc_w, state->crtc_h,
- state->crtc_x, state->crtc_y);
+ 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,12 +523,12 @@ 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 "
- "%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,
- state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10,
- state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10);
+ 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,
+ state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10,
+ state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10);
return -ENOSPC;
}
@@ -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,8 +590,8 @@ 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",
- connector->base.id, connector_state, state);
+ DRM_DEBUG_ATOMIC("Added [CONNECTOR:%d] %p state to %p\n",
+ connector->base.id, connector_state, state);
if (connector_state->crtc) {
struct drm_crtc_state *crtc_state;
@@ -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",
- plane_state, crtc->base.id);
+ 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",
- fb->base.id, plane_state);
+ 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,11 +820,11 @@ 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",
- conn_state, crtc->base.id);
+ 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",
- conn_state);
+ DRM_DEBUG_ATOMIC("Link connector state %p to [NOCRTC]\n",
+ conn_state);
return 0;
}
@@ -858,8 +860,8 @@ 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",
- crtc->base.id, state);
+ DRM_DEBUG_ATOMIC("Adding all current connectors for [CRTC:%d] to %p\n",
+ crtc->base.id, state);
/*
* Changed connectors are already in @state, so only need to look at the
@@ -901,8 +903,8 @@ 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",
- state, num_connected_connectors, crtc->base.id);
+ 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,8 +965,8 @@ 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",
- plane->base.id);
+ DRM_DEBUG_ATOMIC("[PLANE:%d] atomic core check failed\n",
+ plane->base.id);
return ret;
}
}
@@ -977,8 +979,8 @@ 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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CRTC:%d] atomic core check failed\n",
+ crtc->base.id);
return ret;
}
}
@@ -996,8 +998,8 @@ 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",
- crtc->base.id);
+ 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);
}
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 7e3a52b97c7d..5ac38c89be94 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -116,9 +116,9 @@ 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",
- encoder->base.id, encoder->name,
- encoder_crtc->base.id);
+ DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n",
+ encoder->base.id, encoder->name,
+ encoder_crtc->base.id);
crtc_state = drm_atomic_get_crtc_state(state, encoder_crtc);
if (IS_ERR(crtc_state))
@@ -130,9 +130,9 @@ steal_encoder(struct drm_atomic_state *state,
if (connector->state->best_encoder != encoder)
continue;
- DRM_DEBUG_KMS("Stealing encoder from [CONNECTOR:%d:%s]\n",
- connector->base.id,
- connector->name);
+ DRM_DEBUG_ATOMIC("Stealing encoder from [CONNECTOR:%d:%s]\n",
+ connector->base.id,
+ connector->name);
connector_state = drm_atomic_get_connector_state(state,
connector);
@@ -165,9 +165,9 @@ 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",
- connector->base.id,
- connector->name);
+ DRM_DEBUG_ATOMIC("Updating routing for [CONNECTOR:%d:%s]\n",
+ connector->base.id,
+ connector->name);
if (connector->state->crtc != connector_state->crtc) {
if (connector->state->crtc) {
@@ -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,19 +199,19 @@ 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",
- connector->base.id,
- connector->name);
+ 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",
- connector->base.id,
- connector->name,
- new_encoder->base.id,
- new_encoder->name,
- connector_state->crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n",
+ connector->base.id,
+ connector->name,
+ new_encoder->base.id,
+ new_encoder->name,
+ connector_state->crtc->base.id);
return 0;
}
@@ -222,9 +222,9 @@ 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",
- connector->base.id,
- connector->name);
+ DRM_DEBUG_ATOMIC("Encoder stealing failed for [CONNECTOR:%d:%s]\n",
+ connector->base.id,
+ connector->name);
return ret;
}
}
@@ -235,12 +235,12 @@ 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",
- connector->base.id,
- connector->name,
- new_encoder->base.id,
- new_encoder->name,
- connector_state->crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
+ connector->base.id,
+ connector->name,
+ new_encoder->base.id,
+ new_encoder->name,
+ connector_state->crtc->base.id);
return 0;
}
@@ -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,16 +301,16 @@ 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",
- encoder->base.id, encoder->name);
+ DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] check failed\n",
+ encoder->base.id, encoder->name);
return ret;
}
} else {
ret = funcs->mode_fixup(encoder, &crtc_state->mode,
&crtc_state->adjusted_mode);
if (!ret) {
- DRM_DEBUG_KMS("[ENCODER:%d:%s] fixup failed\n",
- encoder->base.id, encoder->name);
+ DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] fixup failed\n",
+ encoder->base.id, encoder->name);
return -EINVAL;
}
}
@@ -330,8 +330,8 @@ 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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CRTC:%d] fixup failed\n",
+ crtc->base.id);
return -EINVAL;
}
}
@@ -384,14 +384,14 @@ 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",
- crtc->base.id);
+ 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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CRTC:%d] enable changed\n",
+ crtc->base.id);
crtc_state->mode_changed = true;
}
}
@@ -428,17 +428,17 @@ 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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CRTC:%d] active changed\n",
+ crtc->base.id);
crtc_state->active_changed = true;
}
if (!needs_modeset(crtc_state))
continue;
- DRM_DEBUG_KMS("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
- crtc->base.id,
- crtc_state->enable ? 'y' : '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');
ret = drm_atomic_add_affected_connectors(state, crtc);
@@ -449,8 +449,8 @@ 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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CRTC:%d] enabled/connectors mismatch\n",
+ crtc->base.id);
return -EINVAL;
}
@@ -497,8 +497,8 @@ 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",
- plane->base.id);
+ DRM_DEBUG_ATOMIC("[PLANE:%d] atomic driver check failed\n",
+ plane->base.id);
return ret;
}
}
@@ -517,8 +517,8 @@ 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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("[CRTC:%d] atomic driver check failed\n",
+ crtc->base.id);
return ret;
}
}
@@ -600,8 +600,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
funcs = encoder->helper_private;
- DRM_DEBUG_KMS("disabling [ENCODER:%d:%s]\n",
- encoder->base.id, encoder->name);
+ DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n",
+ encoder->base.id, encoder->name);
/*
* Each encoder has at most one connector (since we always steal
@@ -639,8 +639,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
funcs = crtc->helper_private;
- DRM_DEBUG_KMS("disabling [CRTC:%d]\n",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("disabling [CRTC:%d]\n",
+ crtc->base.id);
/* Right function depends upon target state. */
@@ -724,8 +724,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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
+ crtc->base.id);
funcs->mode_set_nofb(crtc);
}
@@ -752,8 +752,8 @@ 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",
- encoder->base.id, encoder->name);
+ 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
@@ -816,8 +816,8 @@ 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",
- crtc->base.id);
+ DRM_DEBUG_ATOMIC("enabling [CRTC:%d]\n",
+ crtc->base.id);
if (funcs->enable)
funcs->enable(crtc);
@@ -842,8 +842,8 @@ 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",
- encoder->base.id, encoder->name);
+ DRM_DEBUG_ATOMIC("enabling [ENCODER:%d:%s]\n",
+ encoder->base.id, encoder->name);
/*
* Each encoder has at most one connector (since we always steal
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index e928625a9da0..52999ba9fbaf 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -104,6 +104,9 @@ struct dma_buf_attachment;
* PRIME: used in the prime code.
* This is the category used by the DRM_DEBUG_PRIME() macro.
*
+ * ATOMIC: used in the atomic code.
+ * This is the category used by the DRM_DEBUG_ATOMIC() macro.
+ *
* Enabling verbose debug messages is done through the drm.debug parameter,
* each category being enabled by a bit.
*
@@ -121,6 +124,7 @@ struct dma_buf_attachment;
#define DRM_UT_DRIVER 0x02
#define DRM_UT_KMS 0x04
#define DRM_UT_PRIME 0x08
+#define DRM_UT_ATOMIC 0x10
extern __printf(2, 3)
void drm_ut_debug_printk(const char *function_name,
@@ -207,6 +211,11 @@ void drm_err(const char *format, ...);
if (unlikely(drm_debug & DRM_UT_PRIME)) \
drm_ut_debug_printk(__func__, fmt, ##args); \
} while (0)
+#define DRM_DEBUG_ATOMIC(fmt, args...) \
+ do { \
+ if (unlikely(drm_debug & DRM_UT_ATOMIC)) \
+ drm_ut_debug_printk(__func__, fmt, ##args); \
+ } while (0)
/*@}*/
--
2.1.4
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/5] drm: If available use atomic state in getcrtc ioctl
2015-02-22 11:24 [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Daniel Vetter
@ 2015-02-22 11:24 ` Daniel Vetter
2015-02-22 16:10 ` [Intel-gfx] " Rob Clark
2015-02-22 11:24 ` [PATCH 3/5] drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument Daniel Vetter
` (3 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Daniel Vetter @ 2015-02-22 11:24 UTC (permalink / raw)
To: DRI Development; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
This way drivers fully converted to atomic don't need to update these
legacy state variables in their modeset code any more.
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_crtc.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 6b6b07ff720b..0dbe417bc841 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2009,21 +2009,32 @@ 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) {
-
- drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
- crtc_resp->mode_valid = 1;
+ 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->mode_valid = 0;
+ 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);
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/5] drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument
2015-02-22 11:24 [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Daniel Vetter
2015-02-22 11:24 ` [PATCH 2/5] drm: If available use atomic state in getcrtc ioctl Daniel Vetter
@ 2015-02-22 11:24 ` Daniel Vetter
2015-02-22 16:11 ` Rob Clark
2015-02-22 11:24 ` [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes Daniel Vetter
` (2 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Daniel Vetter @ 2015-02-22 11:24 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Laurent Pinchart
From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
The argument contains a pointer to the old state, rename it to old_state
like in all other commit helper functions.
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
---
drivers/gpu/drm/drm_atomic_helper.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 5ac38c89be94..63daead31491 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -770,18 +770,18 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
/**
* drm_atomic_helper_commit_pre_planes - modeset commit before plane updates
* @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
* prepares them (if required) with the new mode.
*/
void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
- struct drm_atomic_state *state)
+ 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);
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes
2015-02-22 11:24 [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Daniel Vetter
2015-02-22 11:24 ` [PATCH 2/5] drm: If available use atomic state in getcrtc ioctl Daniel Vetter
2015-02-22 11:24 ` [PATCH 3/5] drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument Daniel Vetter
@ 2015-02-22 11:24 ` Daniel Vetter
2015-02-22 16:13 ` Rob Clark
2015-02-22 18:05 ` Laurent Pinchart
2015-02-22 11:24 ` [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional Daniel Vetter
2015-02-22 16:09 ` [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Rob Clark
4 siblings, 2 replies; 14+ messages in thread
From: Daniel Vetter @ 2015-02-22 11:24 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Laurent Pinchart,
Daniel Vetter
These names only make sense because of backwards compatability with
the order used by the crtc helper library. There's not really any real
requirement in the ordering here.
So rename them to something more descriptive and update the kerneldoc
a bit. Motivated in a discussion with Laurent about how to restore
plane state for dpms for drivers with runtime pm.
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_atomic_helper.c | 40 +++++++++++++++++++++++--------------
drivers/gpu/drm/i915/intel_atomic.c | 4 ++--
drivers/gpu/drm/msm/msm_atomic.c | 4 ++--
include/drm/drm_atomic_helper.h | 6 +++---
4 files changed, 32 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 63daead31491..9fd3466bf277 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -768,34 +768,44 @@ 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
* @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 *old_state)
+void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
+ struct drm_atomic_state *old_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,
- struct drm_atomic_state *old_state)
+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;
int i;
@@ -861,7 +871,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 +1040,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);
diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
index 19a9dd5408f3..011b8960fd75 100644
--- a/drivers/gpu/drm/i915/intel_atomic.c
+++ b/drivers/gpu/drm/i915/intel_atomic.c
@@ -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);
diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c
index 871aa2108dc6..7c412292a0ff 100644
--- a/drivers/gpu/drm/msm/msm_atomic.c
+++ b/drivers/gpu/drm/msm/msm_atomic.c
@@ -96,11 +96,11 @@ static void complete_commit(struct msm_commit *c)
kms->funcs->prepare_commit(kms, 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);
/* NOTE: _wait_for_vblanks() only waits for vblank on
* enabled CRTCs. So we end up faulting when disabling
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
index 8039d54a7441..829280b56874 100644
--- a/include/drm/drm_atomic_helper.h
+++ b/include/drm/drm_atomic_helper.h
@@ -43,9 +43,9 @@ int drm_atomic_helper_commit(struct drm_device *dev,
void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
struct drm_atomic_state *old_state);
-void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
- struct drm_atomic_state *state);
-void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
+void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
+ struct drm_atomic_state *state);
+void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
struct drm_atomic_state *old_state);
int drm_atomic_helper_prepare_planes(struct drm_device *dev,
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional
2015-02-22 11:24 [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Daniel Vetter
` (2 preceding siblings ...)
2015-02-22 11:24 ` [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes Daniel Vetter
@ 2015-02-22 11:24 ` Daniel Vetter
2015-02-22 16:33 ` shuang.he
2015-02-22 17:53 ` Laurent Pinchart
2015-02-22 16:09 ` [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Rob Clark
4 siblings, 2 replies; 14+ messages in thread
From: Daniel Vetter @ 2015-02-22 11:24 UTC (permalink / raw)
To: DRI Development
Cc: Daniel Vetter, Intel Graphics Development, Laurent Pinchart,
Daniel Vetter
With runtime PM the hw might still be off while doing the ->mode_set
callbacks - runtime PM get/put should only happen in the
enable/disable hooks to properly support DPMS. Which essentially makes
these callbacks useless for drivers support runtime PM, so make them
optional. Again motivated by discussions with Laurent.
Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
drivers/gpu/drm/drm_atomic_helper.c | 5 +++--
include/drm/drm_crtc_helper.h | 3 ++-
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 9fd3466bf277..5e10bcb7d98d 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -723,7 +723,7 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
funcs = crtc->helper_private;
- if (crtc->state->enable) {
+ if (crtc->state->enable && funcs->mode_set_nofb) {
DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
crtc->base.id);
@@ -759,7 +759,8 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
* Each encoder has at most one connector (since we always steal
* it away), so we won't call call mode_set hooks twice.
*/
- funcs->mode_set(encoder, mode, adjusted_mode);
+ if (funcs->mode_set)
+ funcs->mode_set(encoder, mode, adjusted_mode);
if (encoder->bridge && encoder->bridge->funcs->mode_set)
encoder->bridge->funcs->mode_set(encoder->bridge,
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
index c250a22b39ab..92d5135b55d2 100644
--- a/include/drm/drm_crtc_helper.h
+++ b/include/drm/drm_crtc_helper.h
@@ -89,6 +89,7 @@ struct drm_crtc_helper_funcs {
int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,
struct drm_display_mode *adjusted_mode, int x, int y,
struct drm_framebuffer *old_fb);
+ /* Actually set the mode for atomic helpers, optional */
void (*mode_set_nofb)(struct drm_crtc *crtc);
/* Move the crtc on the current fb to the given position *optional* */
@@ -119,7 +120,7 @@ struct drm_crtc_helper_funcs {
* @mode_fixup: try to fixup proposed mode for this connector
* @prepare: part of the disable sequence, called before the CRTC modeset
* @commit: called after the CRTC modeset
- * @mode_set: set this mode
+ * @mode_set: set this mode, optional for atomic helpers
* @get_crtc: return CRTC that the encoder is currently attached to
* @detect: connection status detection
* @disable: disable encoder when not in use (overrides DPMS off)
--
2.1.4
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC
2015-02-22 11:24 [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Daniel Vetter
` (3 preceding siblings ...)
2015-02-22 11:24 ` [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional Daniel Vetter
@ 2015-02-22 16:09 ` Rob Clark
4 siblings, 0 replies; 14+ messages in thread
From: Rob Clark @ 2015-02-22 16:09 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Daniel Vetter, Intel Graphics Development, DRI Development
On Sun, Feb 22, 2015 at 6:24 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> Atomic state handling adds a lot of indirection and complexity between
> simple updates and drivers. For easier debugging the diagnostic output
> is therefore rather chatty. Which is great for tracking down atomic
> issues, but really annoying otherwise.
>
> Add a new DRM_DEBUG_ATOMIC to be able to filter this out.
>
> Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
> ---
> drivers/gpu/drm/drm_atomic.c | 100 +++++++++++++++--------------
> drivers/gpu/drm/drm_atomic_helper.c | 124 ++++++++++++++++++------------------
> include/drm/drmP.h | 9 +++
> 3 files changed, 122 insertions(+), 111 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c
> index c2e9c5283136..321e098ddf04 100644
> --- a/drivers/gpu/drm/drm_atomic.c
> +++ b/drivers/gpu/drm/drm_atomic.c
> @@ -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,8 +217,8 @@ 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",
> - crtc->base.id, crtc_state, state);
> + DRM_DEBUG_ATOMIC("Added [CRTC:%d] %p state to %p\n",
> + crtc->base.id, crtc_state, state);
>
> return crtc_state;
> }
> @@ -293,8 +293,8 @@ static int drm_atomic_crtc_check(struct drm_crtc *crtc,
> */
>
> if (state->active && !state->enable) {
> - DRM_DEBUG_KMS("[CRTC:%d] active without enabled\n",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CRTC:%d] active without enabled\n",
> + crtc->base.id);
> return -EINVAL;
> }
>
> @@ -340,8 +340,8 @@ 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",
> - plane->base.id, plane_state, state);
> + DRM_DEBUG_ATOMIC("Added [PLANE:%d] %p state to %p\n",
> + plane->base.id, plane_state, state);
>
> if (plane_state->crtc) {
> struct drm_crtc_state *crtc_state;
> @@ -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,8 +499,8 @@ 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_get_format_name(state->fb->pixel_format));
> + DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
> + drm_get_format_name(state->fb->pixel_format));
> return -EINVAL;
> }
>
> @@ -509,9 +509,9 @@ 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",
> - state->crtc_w, state->crtc_h,
> - state->crtc_x, state->crtc_y);
> + 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,12 +523,12 @@ 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 "
> - "%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,
> - state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10,
> - state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10);
> + 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,
> + state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10,
> + state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10);
> return -ENOSPC;
> }
>
> @@ -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,8 +590,8 @@ 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",
> - connector->base.id, connector_state, state);
> + DRM_DEBUG_ATOMIC("Added [CONNECTOR:%d] %p state to %p\n",
> + connector->base.id, connector_state, state);
>
> if (connector_state->crtc) {
> struct drm_crtc_state *crtc_state;
> @@ -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",
> - plane_state, crtc->base.id);
> + 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",
> - fb->base.id, plane_state);
> + 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,11 +820,11 @@ 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",
> - conn_state, crtc->base.id);
> + 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",
> - conn_state);
> + DRM_DEBUG_ATOMIC("Link connector state %p to [NOCRTC]\n",
> + conn_state);
>
> return 0;
> }
> @@ -858,8 +860,8 @@ 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",
> - crtc->base.id, state);
> + DRM_DEBUG_ATOMIC("Adding all current connectors for [CRTC:%d] to %p\n",
> + crtc->base.id, state);
>
> /*
> * Changed connectors are already in @state, so only need to look at the
> @@ -901,8 +903,8 @@ 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",
> - state, num_connected_connectors, crtc->base.id);
> + 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,8 +965,8 @@ 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",
> - plane->base.id);
> + DRM_DEBUG_ATOMIC("[PLANE:%d] atomic core check failed\n",
> + plane->base.id);
> return ret;
> }
> }
> @@ -977,8 +979,8 @@ 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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CRTC:%d] atomic core check failed\n",
> + crtc->base.id);
> return ret;
> }
> }
> @@ -996,8 +998,8 @@ 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",
> - crtc->base.id);
> + 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);
> }
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 7e3a52b97c7d..5ac38c89be94 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -116,9 +116,9 @@ 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",
> - encoder->base.id, encoder->name,
> - encoder_crtc->base.id);
> + DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n",
> + encoder->base.id, encoder->name,
> + encoder_crtc->base.id);
>
> crtc_state = drm_atomic_get_crtc_state(state, encoder_crtc);
> if (IS_ERR(crtc_state))
> @@ -130,9 +130,9 @@ steal_encoder(struct drm_atomic_state *state,
> if (connector->state->best_encoder != encoder)
> continue;
>
> - DRM_DEBUG_KMS("Stealing encoder from [CONNECTOR:%d:%s]\n",
> - connector->base.id,
> - connector->name);
> + DRM_DEBUG_ATOMIC("Stealing encoder from [CONNECTOR:%d:%s]\n",
> + connector->base.id,
> + connector->name);
>
> connector_state = drm_atomic_get_connector_state(state,
> connector);
> @@ -165,9 +165,9 @@ 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",
> - connector->base.id,
> - connector->name);
> + DRM_DEBUG_ATOMIC("Updating routing for [CONNECTOR:%d:%s]\n",
> + connector->base.id,
> + connector->name);
>
> if (connector->state->crtc != connector_state->crtc) {
> if (connector->state->crtc) {
> @@ -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,19 +199,19 @@ 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",
> - connector->base.id,
> - connector->name);
> + 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",
> - connector->base.id,
> - connector->name,
> - new_encoder->base.id,
> - new_encoder->name,
> - connector_state->crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n",
> + connector->base.id,
> + connector->name,
> + new_encoder->base.id,
> + new_encoder->name,
> + connector_state->crtc->base.id);
>
> return 0;
> }
> @@ -222,9 +222,9 @@ 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",
> - connector->base.id,
> - connector->name);
> + DRM_DEBUG_ATOMIC("Encoder stealing failed for [CONNECTOR:%d:%s]\n",
> + connector->base.id,
> + connector->name);
> return ret;
> }
> }
> @@ -235,12 +235,12 @@ 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",
> - connector->base.id,
> - connector->name,
> - new_encoder->base.id,
> - new_encoder->name,
> - connector_state->crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
> + connector->base.id,
> + connector->name,
> + new_encoder->base.id,
> + new_encoder->name,
> + connector_state->crtc->base.id);
>
> return 0;
> }
> @@ -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,16 +301,16 @@ 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",
> - encoder->base.id, encoder->name);
> + DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] check failed\n",
> + encoder->base.id, encoder->name);
> return ret;
> }
> } else {
> ret = funcs->mode_fixup(encoder, &crtc_state->mode,
> &crtc_state->adjusted_mode);
> if (!ret) {
> - DRM_DEBUG_KMS("[ENCODER:%d:%s] fixup failed\n",
> - encoder->base.id, encoder->name);
> + DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] fixup failed\n",
> + encoder->base.id, encoder->name);
> return -EINVAL;
> }
> }
> @@ -330,8 +330,8 @@ 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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CRTC:%d] fixup failed\n",
> + crtc->base.id);
> return -EINVAL;
> }
> }
> @@ -384,14 +384,14 @@ 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",
> - crtc->base.id);
> + 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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CRTC:%d] enable changed\n",
> + crtc->base.id);
> crtc_state->mode_changed = true;
> }
> }
> @@ -428,17 +428,17 @@ 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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CRTC:%d] active changed\n",
> + crtc->base.id);
> crtc_state->active_changed = true;
> }
>
> if (!needs_modeset(crtc_state))
> continue;
>
> - DRM_DEBUG_KMS("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
> - crtc->base.id,
> - crtc_state->enable ? 'y' : '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');
>
> ret = drm_atomic_add_affected_connectors(state, crtc);
> @@ -449,8 +449,8 @@ 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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CRTC:%d] enabled/connectors mismatch\n",
> + crtc->base.id);
>
> return -EINVAL;
> }
> @@ -497,8 +497,8 @@ 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",
> - plane->base.id);
> + DRM_DEBUG_ATOMIC("[PLANE:%d] atomic driver check failed\n",
> + plane->base.id);
> return ret;
> }
> }
> @@ -517,8 +517,8 @@ 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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("[CRTC:%d] atomic driver check failed\n",
> + crtc->base.id);
> return ret;
> }
> }
> @@ -600,8 +600,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
>
> funcs = encoder->helper_private;
>
> - DRM_DEBUG_KMS("disabling [ENCODER:%d:%s]\n",
> - encoder->base.id, encoder->name);
> + DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n",
> + encoder->base.id, encoder->name);
>
> /*
> * Each encoder has at most one connector (since we always steal
> @@ -639,8 +639,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
>
> funcs = crtc->helper_private;
>
> - DRM_DEBUG_KMS("disabling [CRTC:%d]\n",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("disabling [CRTC:%d]\n",
> + crtc->base.id);
>
>
> /* Right function depends upon target state. */
> @@ -724,8 +724,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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
> + crtc->base.id);
>
> funcs->mode_set_nofb(crtc);
> }
> @@ -752,8 +752,8 @@ 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",
> - encoder->base.id, encoder->name);
> + 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
> @@ -816,8 +816,8 @@ 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",
> - crtc->base.id);
> + DRM_DEBUG_ATOMIC("enabling [CRTC:%d]\n",
> + crtc->base.id);
>
> if (funcs->enable)
> funcs->enable(crtc);
> @@ -842,8 +842,8 @@ 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",
> - encoder->base.id, encoder->name);
> + DRM_DEBUG_ATOMIC("enabling [ENCODER:%d:%s]\n",
> + encoder->base.id, encoder->name);
>
> /*
> * Each encoder has at most one connector (since we always steal
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index e928625a9da0..52999ba9fbaf 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -104,6 +104,9 @@ struct dma_buf_attachment;
> * PRIME: used in the prime code.
> * This is the category used by the DRM_DEBUG_PRIME() macro.
> *
> + * ATOMIC: used in the atomic code.
> + * This is the category used by the DRM_DEBUG_ATOMIC() macro.
> + *
> * Enabling verbose debug messages is done through the drm.debug parameter,
> * each category being enabled by a bit.
> *
> @@ -121,6 +124,7 @@ struct dma_buf_attachment;
> #define DRM_UT_DRIVER 0x02
> #define DRM_UT_KMS 0x04
> #define DRM_UT_PRIME 0x08
> +#define DRM_UT_ATOMIC 0x10
>
> extern __printf(2, 3)
> void drm_ut_debug_printk(const char *function_name,
> @@ -207,6 +211,11 @@ void drm_err(const char *format, ...);
> if (unlikely(drm_debug & DRM_UT_PRIME)) \
> drm_ut_debug_printk(__func__, fmt, ##args); \
> } while (0)
> +#define DRM_DEBUG_ATOMIC(fmt, args...) \
> + do { \
> + if (unlikely(drm_debug & DRM_UT_ATOMIC)) \
> + drm_ut_debug_printk(__func__, fmt, ##args); \
> + } while (0)
>
> /*@}*/
>
> --
> 2.1.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Intel-gfx] [PATCH 2/5] drm: If available use atomic state in getcrtc ioctl
2015-02-22 11:24 ` [PATCH 2/5] drm: If available use atomic state in getcrtc ioctl Daniel Vetter
@ 2015-02-22 16:10 ` Rob Clark
0 siblings, 0 replies; 14+ messages in thread
From: Rob Clark @ 2015-02-22 16:10 UTC (permalink / raw)
To: Daniel Vetter; +Cc: Daniel Vetter, Intel Graphics Development, DRI Development
On Sun, Feb 22, 2015 at 6:24 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> This way drivers fully converted to atomic don't need to update these
> legacy state variables in their modeset code any more.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
> ---
> drivers/gpu/drm/drm_crtc.c | 25 ++++++++++++++++++-------
> 1 file changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 6b6b07ff720b..0dbe417bc841 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -2009,21 +2009,32 @@ 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) {
> -
> - drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
> - crtc_resp->mode_valid = 1;
> + 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->mode_valid = 0;
> + 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);
>
> --
> 2.1.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/5] drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument
2015-02-22 11:24 ` [PATCH 3/5] drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument Daniel Vetter
@ 2015-02-22 16:11 ` Rob Clark
0 siblings, 0 replies; 14+ messages in thread
From: Rob Clark @ 2015-02-22 16:11 UTC (permalink / raw)
To: Daniel Vetter
Cc: Intel Graphics Development, Laurent Pinchart, DRI Development
On Sun, Feb 22, 2015 at 6:24 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> From: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
>
> The argument contains a pointer to the old state, rename it to old_state
> like in all other commit helper functions.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reviewed-by: Rob Clark <robdclark@gmail.com>
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 5ac38c89be94..63daead31491 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -770,18 +770,18 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
> /**
> * drm_atomic_helper_commit_pre_planes - modeset commit before plane updates
> * @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
> * prepares them (if required) with the new mode.
> */
> void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
> - struct drm_atomic_state *state)
> + 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);
>
> --
> 2.1.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes
2015-02-22 11:24 ` [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes Daniel Vetter
@ 2015-02-22 16:13 ` Rob Clark
2015-02-22 18:05 ` Laurent Pinchart
1 sibling, 0 replies; 14+ messages in thread
From: Rob Clark @ 2015-02-22 16:13 UTC (permalink / raw)
To: Daniel Vetter
Cc: Daniel Vetter, Intel Graphics Development, Laurent Pinchart,
DRI Development
On Sun, Feb 22, 2015 at 6:24 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> These names only make sense because of backwards compatability with
> the order used by the crtc helper library. There's not really any real
> requirement in the ordering here.
>
> So rename them to something more descriptive and update the kerneldoc
> a bit. Motivated in a discussion with Laurent about how to restore
> plane state for dpms for drivers with runtime pm.
>
> Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 40 +++++++++++++++++++++++--------------
> drivers/gpu/drm/i915/intel_atomic.c | 4 ++--
> drivers/gpu/drm/msm/msm_atomic.c | 4 ++--
> include/drm/drm_atomic_helper.h | 6 +++---
> 4 files changed, 32 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 63daead31491..9fd3466bf277 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -768,34 +768,44 @@ 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
> * @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 *old_state)
> +void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
> + struct drm_atomic_state *old_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,
> - struct drm_atomic_state *old_state)
> +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;
> int i;
> @@ -861,7 +871,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 +1040,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);
>
> diff --git a/drivers/gpu/drm/i915/intel_atomic.c b/drivers/gpu/drm/i915/intel_atomic.c
> index 19a9dd5408f3..011b8960fd75 100644
> --- a/drivers/gpu/drm/i915/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/intel_atomic.c
> @@ -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);
> diff --git a/drivers/gpu/drm/msm/msm_atomic.c b/drivers/gpu/drm/msm/msm_atomic.c
> index 871aa2108dc6..7c412292a0ff 100644
> --- a/drivers/gpu/drm/msm/msm_atomic.c
> +++ b/drivers/gpu/drm/msm/msm_atomic.c
> @@ -96,11 +96,11 @@ static void complete_commit(struct msm_commit *c)
>
> kms->funcs->prepare_commit(kms, 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);
>
> /* NOTE: _wait_for_vblanks() only waits for vblank on
> * enabled CRTCs. So we end up faulting when disabling
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index 8039d54a7441..829280b56874 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -43,9 +43,9 @@ int drm_atomic_helper_commit(struct drm_device *dev,
> void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
> struct drm_atomic_state *old_state);
>
> -void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
> - struct drm_atomic_state *state);
> -void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
> +void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
> + struct drm_atomic_state *state);
> +void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
> struct drm_atomic_state *old_state);
>
> int drm_atomic_helper_prepare_planes(struct drm_device *dev,
> --
> 2.1.4
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional
2015-02-22 11:24 ` [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional Daniel Vetter
@ 2015-02-22 16:33 ` shuang.he
2015-02-22 17:53 ` Laurent Pinchart
1 sibling, 0 replies; 14+ messages in thread
From: shuang.he @ 2015-02-22 16:33 UTC (permalink / raw)
To: shuang.he, ethan.gao, intel-gfx, daniel.vetter
Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
Task id: 5804
-------------------------------------Summary-------------------------------------
Platform Delta drm-intel-nightly Series Applied
PNV -2 277/277 275/277
ILK -13 313/313 300/313
SNB 309/309 309/309
IVB 382/382 382/382
BYT -5 296/296 291/296
HSW -33 425/425 392/425
BDW -1 318/318 317/318
-------------------------------------Detailed-------------------------------------
Platform Test drm-intel-nightly Series Applied
PNV igt_gem_userptr_blits_coherency-sync NO_RESULT(1)CRASH(7)NRUN(1)PASS(7) CRASH(1)PASS(1)
PNV igt_gem_userptr_blits_coherency-unsync CRASH(5)NRUN(1)PASS(5) CRASH(1)PASS(1)
*ILK igt_kms_flip_nonexisting-fb PASS(2) FAIL(2)
*ILK igt_kms_flip_wf_vblank-ts-check PASS(2) FAIL(2)
*ILK igt_kms_flip_blocking-absolute-wf_vblank-interruptible PASS(2) FAIL(2)
*ILK igt_kms_flip_bcs-flip-vs-modeset-interruptible NRUN(5)PASS(2) FAIL(2)
*ILK igt_kms_flip_flip-vs-dpms-interruptible PASS(2) FAIL(2)
*ILK igt_kms_flip_flip-vs-rmfb-interruptible PASS(2) FAIL(2)
*ILK igt_kms_flip_rcs-flip-vs-dpms NRUN(5)PASS(2) FAIL(2)
*ILK igt_kms_flip_rcs-flip-vs-modeset NRUN(5)PASS(2) FAIL(2)
*ILK igt_kms_flip_rcs-flip-vs-panning NRUN(5)PASS(2) FAIL(2)
*ILK igt_kms_flip_rcs-flip-vs-panning-interruptible NRUN(5)PASS(2) FAIL(2)
*ILK igt_kms_flip_rcs-wf_vblank-vs-dpms-interruptible PASS(2) FAIL(2)
*ILK igt_kms_flip_vblank-vs-hang PASS(2) FAIL(2)
*ILK igt_kms_flip_wf_vblank-vs-modeset-interruptible PASS(2) FAIL(2)
*BYT igt_drm_read_empty-block PASS(2) NSPT(2)
*BYT igt_drm_read_empty-nonblock PASS(2) NSPT(2)
*BYT igt_drm_read_invalid-buffer PASS(2) NSPT(2)
*BYT igt_drm_read_short-buffer-block PASS(2) NSPT(2)
*BYT igt_drm_read_short-buffer-nonblock PASS(2) NSPT(2)
*HSW igt_kms_flip_bo-too-big PASS(2) FAIL(1)
*HSW igt_kms_flip_bo-too-big-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_dpms-vs-vblank-race PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-dpms-off-vs-modeset PASS(2) FAIL(1)
*HSW igt_kms_flip_nonexisting-fb PASS(2) FAIL(1)
*HSW igt_kms_flip_nonexisting-fb-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_vblank-vs-dpms-rpm PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-expired-vblank PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-expired-vblank-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_blocking-absolute-wf_vblank-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_absolute-wf_vblank PASS(2) FAIL(1)
*HSW igt_kms_flip_absolute-wf_vblank-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_blocking-absolute-wf_vblank PASS(2) FAIL(1)
*HSW igt_kms_flip_blocking-wf_vblank PASS(2) FAIL(1)
*HSW igt_kms_flip_busy-flip PASS(2) FAIL(1)
*HSW igt_kms_flip_busy-flip-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_dpms-off-confusion PASS(3) FAIL(1)
*HSW igt_kms_flip_dpms-off-confusion-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-absolute-wf_vblank PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-absolute-wf_vblank-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-blocking-wf-vblank PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-fences PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-fences-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-panning PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-panning-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-wf_vblank PASS(2) FAIL(1)
*HSW igt_kms_flip_flip-vs-wf_vblank-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_plain-flip PASS(2) FAIL(1)
*HSW igt_kms_flip_plain-flip-fb-recreate TIMEOUT(4)PASS(2) FAIL(1)
*HSW igt_kms_flip_plain-flip-fb-recreate-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_plain-flip-interruptible PASS(2) FAIL(1)
*HSW igt_kms_flip_plain-flip-ts-check PASS(2) FAIL(1)
*HSW igt_kms_flip_plain-flip-ts-check-interruptible PASS(2) FAIL(1)
*BDW igt_gem_gtt_hog PASS(21) DMESG_WARN(1)PASS(1)
Note: You need to pay more attention to line start with '*'
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional
2015-02-22 11:24 ` [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional Daniel Vetter
2015-02-22 16:33 ` shuang.he
@ 2015-02-22 17:53 ` Laurent Pinchart
2015-02-22 18:17 ` Laurent Pinchart
1 sibling, 1 reply; 14+ messages in thread
From: Laurent Pinchart @ 2015-02-22 17:53 UTC (permalink / raw)
To: Daniel Vetter, Daniel Vetter; +Cc: Intel Graphics Development, DRI Development
Hi Daniel,
Thank you for the patch.
On Sunday 22 February 2015 12:24:20 Daniel Vetter wrote:
> With runtime PM the hw might still be off while doing the ->mode_set
> callbacks - runtime PM get/put should only happen in the
> enable/disable hooks to properly support DPMS. Which essentially makes
> these callbacks useless for drivers support runtime PM, so make them
> optional. Again motivated by discussions with Laurent.
>
> Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
I think we should go one step further and remove .mode_set() completely for
drivers converted to atomic updates. There are two cases to consider:
- Drivers that implement runtime PM can't use the .mode_set() callback for the
reason explained above. Those drivers will thus not implement .mode_set() and
will perform mode setting related hardware configuration in .enable().
- Drivers that don't implement runtime PM (we probably want to discourage this
globally, but that's a different topic) can use the .mode_set() callbacks, but
they could equally well perform mode setting in .enable() as the runtime PM-
enabled drivers, without any drawback.
To increase consistency, I thus believe we should get rid of .mode_set()
completely for drivers converted to atomic updates.
However, this patch is good as a first step, so if you want to apply it
already,
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 5 +++--
> include/drm/drm_crtc_helper.h | 3 ++-
> 2 files changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c index 9fd3466bf277..5e10bcb7d98d
> 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -723,7 +723,7 @@ crtc_set_mode(struct drm_device *dev, struct
> drm_atomic_state *old_state)
>
> funcs = crtc->helper_private;
>
> - if (crtc->state->enable) {
> + if (crtc->state->enable && funcs->mode_set_nofb) {
> DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
> crtc->base.id);
>
> @@ -759,7 +759,8 @@ crtc_set_mode(struct drm_device *dev, struct
> drm_atomic_state *old_state) * Each encoder has at most one connector
> (since we always steal * it away), so we won't call call mode_set hooks
> twice.
> */
> - funcs->mode_set(encoder, mode, adjusted_mode);
> + if (funcs->mode_set)
> + funcs->mode_set(encoder, mode, adjusted_mode);
>
> if (encoder->bridge && encoder->bridge->funcs->mode_set)
> encoder->bridge->funcs->mode_set(encoder->bridge,
> diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
> index c250a22b39ab..92d5135b55d2 100644
> --- a/include/drm/drm_crtc_helper.h
> +++ b/include/drm/drm_crtc_helper.h
> @@ -89,6 +89,7 @@ struct drm_crtc_helper_funcs {
> int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,
> struct drm_display_mode *adjusted_mode, int x, int y,
> struct drm_framebuffer *old_fb);
> + /* Actually set the mode for atomic helpers, optional */
> void (*mode_set_nofb)(struct drm_crtc *crtc);
>
> /* Move the crtc on the current fb to the given position *optional* */
> @@ -119,7 +120,7 @@ struct drm_crtc_helper_funcs {
> * @mode_fixup: try to fixup proposed mode for this connector
> * @prepare: part of the disable sequence, called before the CRTC modeset
> * @commit: called after the CRTC modeset
> - * @mode_set: set this mode
> + * @mode_set: set this mode, optional for atomic helpers
> * @get_crtc: return CRTC that the encoder is currently attached to
> * @detect: connection status detection
> * @disable: disable encoder when not in use (overrides DPMS off)
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes
2015-02-22 11:24 ` [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes Daniel Vetter
2015-02-22 16:13 ` Rob Clark
@ 2015-02-22 18:05 ` Laurent Pinchart
1 sibling, 0 replies; 14+ messages in thread
From: Laurent Pinchart @ 2015-02-22 18:05 UTC (permalink / raw)
To: Daniel Vetter, Daniel Vetter; +Cc: Intel Graphics Development, DRI Development
Hi Daniel,
Thank you for the patch.
On Sunday 22 February 2015 12:24:19 Daniel Vetter wrote:
> These names only make sense because of backwards compatability with
> the order used by the crtc helper library. There's not really any real
> requirement in the ordering here.
>
> So rename them to something more descriptive and update the kerneldoc
> a bit. Motivated in a discussion with Laurent about how to restore
> plane state for dpms for drivers with runtime pm.
>
> Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> drivers/gpu/drm/drm_atomic_helper.c | 40 ++++++++++++++++++++--------------
> drivers/gpu/drm/i915/intel_atomic.c | 4 ++--
> drivers/gpu/drm/msm/msm_atomic.c | 4 ++--
> include/drm/drm_atomic_helper.h | 6 +++---
> 4 files changed, 32 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c index 63daead31491..9fd3466bf277
> 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -768,34 +768,44 @@ 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
> * @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 *old_state)
> +void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
> + struct drm_atomic_state *old_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,
> - struct drm_atomic_state *old_state)
> +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;
> int i;
> @@ -861,7 +871,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 +1040,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);
>
> diff --git a/drivers/gpu/drm/i915/intel_atomic.c
> b/drivers/gpu/drm/i915/intel_atomic.c index 19a9dd5408f3..011b8960fd75
> 100644
> --- a/drivers/gpu/drm/i915/intel_atomic.c
> +++ b/drivers/gpu/drm/i915/intel_atomic.c
> @@ -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);
> diff --git a/drivers/gpu/drm/msm/msm_atomic.c
> b/drivers/gpu/drm/msm/msm_atomic.c index 871aa2108dc6..7c412292a0ff 100644
> --- a/drivers/gpu/drm/msm/msm_atomic.c
> +++ b/drivers/gpu/drm/msm/msm_atomic.c
> @@ -96,11 +96,11 @@ static void complete_commit(struct msm_commit *c)
>
> kms->funcs->prepare_commit(kms, 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);
>
> /* NOTE: _wait_for_vblanks() only waits for vblank on
> * enabled CRTCs. So we end up faulting when disabling
> diff --git a/include/drm/drm_atomic_helper.h
> b/include/drm/drm_atomic_helper.h index 8039d54a7441..829280b56874 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -43,9 +43,9 @@ int drm_atomic_helper_commit(struct drm_device *dev,
> void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
> struct drm_atomic_state *old_state);
>
> -void drm_atomic_helper_commit_pre_planes(struct drm_device *dev,
> - struct drm_atomic_state *state);
> -void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
> +void drm_atomic_helper_commit_modeset_disables(struct drm_device *dev,
> + struct drm_atomic_state *state);
> +void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
> struct drm_atomic_state *old_state);
>
> int drm_atomic_helper_prepare_planes(struct drm_device *dev,
--
Regards,
Laurent Pinchart
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional
2015-02-22 17:53 ` Laurent Pinchart
@ 2015-02-22 18:17 ` Laurent Pinchart
2015-02-23 10:23 ` Daniel Vetter
0 siblings, 1 reply; 14+ messages in thread
From: Laurent Pinchart @ 2015-02-22 18:17 UTC (permalink / raw)
To: dri-devel; +Cc: Daniel Vetter, Intel Graphics Development, Daniel Vetter
Hi Daniel,
On Sunday 22 February 2015 19:53:23 Laurent Pinchart wrote:
> On Sunday 22 February 2015 12:24:20 Daniel Vetter wrote:
> > With runtime PM the hw might still be off while doing the ->mode_set
> > callbacks - runtime PM get/put should only happen in the
> > enable/disable hooks to properly support DPMS. Which essentially makes
> > these callbacks useless for drivers support runtime PM, so make them
> > optional. Again motivated by discussions with Laurent.
> >
> > Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
>
> I think we should go one step further and remove .mode_set() completely for
> drivers converted to atomic updates. There are two cases to consider:
>
> - Drivers that implement runtime PM can't use the .mode_set() callback for
> the reason explained above. Those drivers will thus not implement
> .mode_set() and will perform mode setting related hardware configuration in
> .enable().
>
> - Drivers that don't implement runtime PM (we probably want to discourage
> this globally, but that's a different topic) can use the .mode_set()
> callbacks, but they could equally well perform mode setting in .enable() as
> the runtime PM- enabled drivers, without any drawback.
>
> To increase consistency, I thus believe we should get rid of .mode_set()
> completely for drivers converted to atomic updates.
On second thought, I've confused .mode_set() and .mode_set_nofb(). .mode_set()
still makes sense for encoders, but the above reasoning should apply in my
opinion for the CRTC .mode_set_nofb().
> However, this patch is good as a first step, so if you want to apply it
> already,
>
> Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>
> > ---
> >
> > drivers/gpu/drm/drm_atomic_helper.c | 5 +++--
> > include/drm/drm_crtc_helper.h | 3 ++-
> > 2 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> > b/drivers/gpu/drm/drm_atomic_helper.c index 9fd3466bf277..5e10bcb7d98d
> > 100644
> > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > @@ -723,7 +723,7 @@ crtc_set_mode(struct drm_device *dev, struct
> > drm_atomic_state *old_state)
> >
> > funcs = crtc->helper_private;
> >
> > - if (crtc->state->enable) {
> > + if (crtc->state->enable && funcs->mode_set_nofb) {
> >
> > DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
> >
> > crtc->base.id);
> >
> > @@ -759,7 +759,8 @@ crtc_set_mode(struct drm_device *dev, struct
> > drm_atomic_state *old_state) * Each encoder has at most one connector
> > (since we always steal * it away), so we won't call call mode_set hooks
> > twice.
> >
> > */
> >
> > - funcs->mode_set(encoder, mode, adjusted_mode);
> > + if (funcs->mode_set)
> > + funcs->mode_set(encoder, mode, adjusted_mode);
> >
> > if (encoder->bridge && encoder->bridge->funcs->mode_set)
> >
> > encoder->bridge->funcs->mode_set(encoder->bridge,
> >
> > diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
> > index c250a22b39ab..92d5135b55d2 100644
> > --- a/include/drm/drm_crtc_helper.h
> > +++ b/include/drm/drm_crtc_helper.h
> > @@ -89,6 +89,7 @@ struct drm_crtc_helper_funcs {
> >
> > int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,
> >
> > struct drm_display_mode *adjusted_mode, int x, int y,
> > struct drm_framebuffer *old_fb);
> >
> > + /* Actually set the mode for atomic helpers, optional */
> >
> > void (*mode_set_nofb)(struct drm_crtc *crtc);
> >
> > /* Move the crtc on the current fb to the given position *optional*
*/
> >
> > @@ -119,7 +120,7 @@ struct drm_crtc_helper_funcs {
> >
> > * @mode_fixup: try to fixup proposed mode for this connector
> > * @prepare: part of the disable sequence, called before the CRTC modeset
> > * @commit: called after the CRTC modeset
> >
> > - * @mode_set: set this mode
> > + * @mode_set: set this mode, optional for atomic helpers
> >
> > * @get_crtc: return CRTC that the encoder is currently attached to
> > * @detect: connection status detection
> > * @disable: disable encoder when not in use (overrides DPMS off)
--
Regards,
Laurent Pinchart
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional
2015-02-22 18:17 ` Laurent Pinchart
@ 2015-02-23 10:23 ` Daniel Vetter
0 siblings, 0 replies; 14+ messages in thread
From: Daniel Vetter @ 2015-02-23 10:23 UTC (permalink / raw)
To: Laurent Pinchart
Cc: Daniel Vetter, Intel Graphics Development, dri-devel,
Daniel Vetter
On Sun, Feb 22, 2015 at 08:17:04PM +0200, Laurent Pinchart wrote:
> Hi Daniel,
>
> On Sunday 22 February 2015 19:53:23 Laurent Pinchart wrote:
> > On Sunday 22 February 2015 12:24:20 Daniel Vetter wrote:
> > > With runtime PM the hw might still be off while doing the ->mode_set
> > > callbacks - runtime PM get/put should only happen in the
> > > enable/disable hooks to properly support DPMS. Which essentially makes
> > > these callbacks useless for drivers support runtime PM, so make them
> > > optional. Again motivated by discussions with Laurent.
> > >
> > > Cc: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> > > Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
> >
> > I think we should go one step further and remove .mode_set() completely for
> > drivers converted to atomic updates. There are two cases to consider:
> >
> > - Drivers that implement runtime PM can't use the .mode_set() callback for
> > the reason explained above. Those drivers will thus not implement
> > .mode_set() and will perform mode setting related hardware configuration in
> > .enable().
> >
> > - Drivers that don't implement runtime PM (we probably want to discourage
> > this globally, but that's a different topic) can use the .mode_set()
> > callbacks, but they could equally well perform mode setting in .enable() as
> > the runtime PM- enabled drivers, without any drawback.
> >
> > To increase consistency, I thus believe we should get rid of .mode_set()
> > completely for drivers converted to atomic updates.
>
> On second thought, I've confused .mode_set() and .mode_set_nofb(). .mode_set()
> still makes sense for encoders, but the above reasoning should apply in my
> opinion for the CRTC .mode_set_nofb().
You're reasoning is correct, but we need to keep smooth transitioning in
mind for driver coming from crtc helpers. And since those use
->mode_set(_nofb) all over the place it's imo better to keep this. At
least until we've run out of drivers to convert ;-)
We could add a DRM_INFO_ONCE though to remind drivers that they're using
deprecated hooks and should convert over. I plan to submit such a patch at
least for dpms/prepare/commit, maybe we could throw in ->mode_set into the
mix too.
>
> > However, this patch is good as a first step, so if you want to apply it
> > already,
> >
> > Acked-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Merged the entire series to drm-misc, thanks for the feedback.
-Daniel
> >
> > > ---
> > >
> > > drivers/gpu/drm/drm_atomic_helper.c | 5 +++--
> > > include/drm/drm_crtc_helper.h | 3 ++-
> > > 2 files changed, 5 insertions(+), 3 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> > > b/drivers/gpu/drm/drm_atomic_helper.c index 9fd3466bf277..5e10bcb7d98d
> > > 100644
> > > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > > @@ -723,7 +723,7 @@ crtc_set_mode(struct drm_device *dev, struct
> > > drm_atomic_state *old_state)
> > >
> > > funcs = crtc->helper_private;
> > >
> > > - if (crtc->state->enable) {
> > > + if (crtc->state->enable && funcs->mode_set_nofb) {
> > >
> > > DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
> > >
> > > crtc->base.id);
> > >
> > > @@ -759,7 +759,8 @@ crtc_set_mode(struct drm_device *dev, struct
> > > drm_atomic_state *old_state) * Each encoder has at most one connector
> > > (since we always steal * it away), so we won't call call mode_set hooks
> > > twice.
> > >
> > > */
> > >
> > > - funcs->mode_set(encoder, mode, adjusted_mode);
> > > + if (funcs->mode_set)
> > > + funcs->mode_set(encoder, mode, adjusted_mode);
> > >
> > > if (encoder->bridge && encoder->bridge->funcs->mode_set)
> > >
> > > encoder->bridge->funcs->mode_set(encoder->bridge,
> > >
> > > diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
> > > index c250a22b39ab..92d5135b55d2 100644
> > > --- a/include/drm/drm_crtc_helper.h
> > > +++ b/include/drm/drm_crtc_helper.h
> > > @@ -89,6 +89,7 @@ struct drm_crtc_helper_funcs {
> > >
> > > int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode,
> > >
> > > struct drm_display_mode *adjusted_mode, int x, int y,
> > > struct drm_framebuffer *old_fb);
> > >
> > > + /* Actually set the mode for atomic helpers, optional */
> > >
> > > void (*mode_set_nofb)(struct drm_crtc *crtc);
> > >
> > > /* Move the crtc on the current fb to the given position *optional*
> */
> > >
> > > @@ -119,7 +120,7 @@ struct drm_crtc_helper_funcs {
> > >
> > > * @mode_fixup: try to fixup proposed mode for this connector
> > > * @prepare: part of the disable sequence, called before the CRTC modeset
> > > * @commit: called after the CRTC modeset
> > >
> > > - * @mode_set: set this mode
> > > + * @mode_set: set this mode, optional for atomic helpers
> > >
> > > * @get_crtc: return CRTC that the encoder is currently attached to
> > > * @detect: connection status detection
> > > * @disable: disable encoder when not in use (overrides DPMS off)
>
> --
> Regards,
>
> Laurent Pinchart
>
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2015-02-23 10:23 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-22 11:24 [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Daniel Vetter
2015-02-22 11:24 ` [PATCH 2/5] drm: If available use atomic state in getcrtc ioctl Daniel Vetter
2015-02-22 16:10 ` [Intel-gfx] " Rob Clark
2015-02-22 11:24 ` [PATCH 3/5] drm/atomic: Rename drm_atomic_helper_commit_pre_planes() state argument Daniel Vetter
2015-02-22 16:11 ` Rob Clark
2015-02-22 11:24 ` [PATCH 4/5] drm/atomic-helper: Rename commmit_post/pre_planes Daniel Vetter
2015-02-22 16:13 ` Rob Clark
2015-02-22 18:05 ` Laurent Pinchart
2015-02-22 11:24 ` [PATCH 5/5] drm/atomic-helpers: make mode_set hooks optional Daniel Vetter
2015-02-22 16:33 ` shuang.he
2015-02-22 17:53 ` Laurent Pinchart
2015-02-22 18:17 ` Laurent Pinchart
2015-02-23 10:23 ` Daniel Vetter
2015-02-22 16:09 ` [PATCH 1/5] drm: Add DRM_DEBUG_ATOMIC Rob Clark
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox