aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2015-02-22 06:24:16 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-02-23 05:19:49 -0500
commit17a38d9c254bf4e3b0d8b7ccd5c1988cb63730ff (patch)
treeb1f985b6b75c86174e7c45e8e37c87fbfe32c385
parent7f50002fc602ba7870df554f91a76434c9404f5d (diff)
drm: Add DRM_DEBUG_ATOMIC
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> Reviewed-by: Rob Clark <robdclark@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
-rw-r--r--drivers/gpu/drm/drm_atomic.c100
-rw-r--r--drivers/gpu/drm/drm_atomic_helper.c124
-rw-r--r--include/drm/drmP.h9
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)
92 92
93 state->dev = dev; 93 state->dev = dev;
94 94
95 DRM_DEBUG_KMS("Allocate atomic state %p\n", state); 95 DRM_DEBUG_ATOMIC("Allocate atomic state %p\n", state);
96 96
97 return state; 97 return state;
98fail: 98fail:
@@ -122,7 +122,7 @@ void drm_atomic_state_clear(struct drm_atomic_state *state)
122 struct drm_mode_config *config = &dev->mode_config; 122 struct drm_mode_config *config = &dev->mode_config;
123 int i; 123 int i;
124 124
125 DRM_DEBUG_KMS("Clearing atomic state %p\n", state); 125 DRM_DEBUG_ATOMIC("Clearing atomic state %p\n", state);
126 126
127 for (i = 0; i < state->num_connector; i++) { 127 for (i = 0; i < state->num_connector; i++) {
128 struct drm_connector *connector = state->connectors[i]; 128 struct drm_connector *connector = state->connectors[i];
@@ -172,7 +172,7 @@ void drm_atomic_state_free(struct drm_atomic_state *state)
172{ 172{
173 drm_atomic_state_clear(state); 173 drm_atomic_state_clear(state);
174 174
175 DRM_DEBUG_KMS("Freeing atomic state %p\n", state); 175 DRM_DEBUG_ATOMIC("Freeing atomic state %p\n", state);
176 176
177 kfree_state(state); 177 kfree_state(state);
178} 178}
@@ -217,8 +217,8 @@ drm_atomic_get_crtc_state(struct drm_atomic_state *state,
217 state->crtcs[index] = crtc; 217 state->crtcs[index] = crtc;
218 crtc_state->state = state; 218 crtc_state->state = state;
219 219
220 DRM_DEBUG_KMS("Added [CRTC:%d] %p state to %p\n", 220 DRM_DEBUG_ATOMIC("Added [CRTC:%d] %p state to %p\n",
221 crtc->base.id, crtc_state, state); 221 crtc->base.id, crtc_state, state);
222 222
223 return crtc_state; 223 return crtc_state;
224} 224}
@@ -293,8 +293,8 @@ static int drm_atomic_crtc_check(struct drm_crtc *crtc,
293 */ 293 */
294 294
295 if (state->active && !state->enable) { 295 if (state->active && !state->enable) {
296 DRM_DEBUG_KMS("[CRTC:%d] active without enabled\n", 296 DRM_DEBUG_ATOMIC("[CRTC:%d] active without enabled\n",
297 crtc->base.id); 297 crtc->base.id);
298 return -EINVAL; 298 return -EINVAL;
299 } 299 }
300 300
@@ -340,8 +340,8 @@ drm_atomic_get_plane_state(struct drm_atomic_state *state,
340 state->planes[index] = plane; 340 state->planes[index] = plane;
341 plane_state->state = state; 341 plane_state->state = state;
342 342
343 DRM_DEBUG_KMS("Added [PLANE:%d] %p state to %p\n", 343 DRM_DEBUG_ATOMIC("Added [PLANE:%d] %p state to %p\n",
344 plane->base.id, plane_state, state); 344 plane->base.id, plane_state, state);
345 345
346 if (plane_state->crtc) { 346 if (plane_state->crtc) {
347 struct drm_crtc_state *crtc_state; 347 struct drm_crtc_state *crtc_state;
@@ -477,10 +477,10 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
477 477
478 /* either *both* CRTC and FB must be set, or neither */ 478 /* either *both* CRTC and FB must be set, or neither */
479 if (WARN_ON(state->crtc && !state->fb)) { 479 if (WARN_ON(state->crtc && !state->fb)) {
480 DRM_DEBUG_KMS("CRTC set but no FB\n"); 480 DRM_DEBUG_ATOMIC("CRTC set but no FB\n");
481 return -EINVAL; 481 return -EINVAL;
482 } else if (WARN_ON(state->fb && !state->crtc)) { 482 } else if (WARN_ON(state->fb && !state->crtc)) {
483 DRM_DEBUG_KMS("FB set but no CRTC\n"); 483 DRM_DEBUG_ATOMIC("FB set but no CRTC\n");
484 return -EINVAL; 484 return -EINVAL;
485 } 485 }
486 486
@@ -490,7 +490,7 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
490 490
491 /* Check whether this plane is usable on this CRTC */ 491 /* Check whether this plane is usable on this CRTC */
492 if (!(plane->possible_crtcs & drm_crtc_mask(state->crtc))) { 492 if (!(plane->possible_crtcs & drm_crtc_mask(state->crtc))) {
493 DRM_DEBUG_KMS("Invalid crtc for plane\n"); 493 DRM_DEBUG_ATOMIC("Invalid crtc for plane\n");
494 return -EINVAL; 494 return -EINVAL;
495 } 495 }
496 496
@@ -499,8 +499,8 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
499 if (state->fb->pixel_format == plane->format_types[i]) 499 if (state->fb->pixel_format == plane->format_types[i])
500 break; 500 break;
501 if (i == plane->format_count) { 501 if (i == plane->format_count) {
502 DRM_DEBUG_KMS("Invalid pixel format %s\n", 502 DRM_DEBUG_ATOMIC("Invalid pixel format %s\n",
503 drm_get_format_name(state->fb->pixel_format)); 503 drm_get_format_name(state->fb->pixel_format));
504 return -EINVAL; 504 return -EINVAL;
505 } 505 }
506 506
@@ -509,9 +509,9 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
509 state->crtc_x > INT_MAX - (int32_t) state->crtc_w || 509 state->crtc_x > INT_MAX - (int32_t) state->crtc_w ||
510 state->crtc_h > INT_MAX || 510 state->crtc_h > INT_MAX ||
511 state->crtc_y > INT_MAX - (int32_t) state->crtc_h) { 511 state->crtc_y > INT_MAX - (int32_t) state->crtc_h) {
512 DRM_DEBUG_KMS("Invalid CRTC coordinates %ux%u+%d+%d\n", 512 DRM_DEBUG_ATOMIC("Invalid CRTC coordinates %ux%u+%d+%d\n",
513 state->crtc_w, state->crtc_h, 513 state->crtc_w, state->crtc_h,
514 state->crtc_x, state->crtc_y); 514 state->crtc_x, state->crtc_y);
515 return -ERANGE; 515 return -ERANGE;
516 } 516 }
517 517
@@ -523,12 +523,12 @@ static int drm_atomic_plane_check(struct drm_plane *plane,
523 state->src_x > fb_width - state->src_w || 523 state->src_x > fb_width - state->src_w ||
524 state->src_h > fb_height || 524 state->src_h > fb_height ||
525 state->src_y > fb_height - state->src_h) { 525 state->src_y > fb_height - state->src_h) {
526 DRM_DEBUG_KMS("Invalid source coordinates " 526 DRM_DEBUG_ATOMIC("Invalid source coordinates "
527 "%u.%06ux%u.%06u+%u.%06u+%u.%06u\n", 527 "%u.%06ux%u.%06u+%u.%06u+%u.%06u\n",
528 state->src_w >> 16, ((state->src_w & 0xffff) * 15625) >> 10, 528 state->src_w >> 16, ((state->src_w & 0xffff) * 15625) >> 10,
529 state->src_h >> 16, ((state->src_h & 0xffff) * 15625) >> 10, 529 state->src_h >> 16, ((state->src_h & 0xffff) * 15625) >> 10,
530 state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10, 530 state->src_x >> 16, ((state->src_x & 0xffff) * 15625) >> 10,
531 state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10); 531 state->src_y >> 16, ((state->src_y & 0xffff) * 15625) >> 10);
532 return -ENOSPC; 532 return -ENOSPC;
533 } 533 }
534 534
@@ -575,7 +575,7 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
575 * at most the array is a bit too large. 575 * at most the array is a bit too large.
576 */ 576 */
577 if (index >= state->num_connector) { 577 if (index >= state->num_connector) {
578 DRM_DEBUG_KMS("Hot-added connector would overflow state array, restarting\n"); 578 DRM_DEBUG_ATOMIC("Hot-added connector would overflow state array, restarting\n");
579 return ERR_PTR(-EAGAIN); 579 return ERR_PTR(-EAGAIN);
580 } 580 }
581 581
@@ -590,8 +590,8 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,
590 state->connectors[index] = connector; 590 state->connectors[index] = connector;
591 connector_state->state = state; 591 connector_state->state = state;
592 592
593 DRM_DEBUG_KMS("Added [CONNECTOR:%d] %p state to %p\n", 593 DRM_DEBUG_ATOMIC("Added [CONNECTOR:%d] %p state to %p\n",
594 connector->base.id, connector_state, state); 594 connector->base.id, connector_state, state);
595 595
596 if (connector_state->crtc) { 596 if (connector_state->crtc) {
597 struct drm_crtc_state *crtc_state; 597 struct drm_crtc_state *crtc_state;
@@ -752,10 +752,11 @@ drm_atomic_set_crtc_for_plane(struct drm_plane_state *plane_state,
752 } 752 }
753 753
754 if (crtc) 754 if (crtc)
755 DRM_DEBUG_KMS("Link plane state %p to [CRTC:%d]\n", 755 DRM_DEBUG_ATOMIC("Link plane state %p to [CRTC:%d]\n",
756 plane_state, crtc->base.id); 756 plane_state, crtc->base.id);
757 else 757 else
758 DRM_DEBUG_KMS("Link plane state %p to [NOCRTC]\n", plane_state); 758 DRM_DEBUG_ATOMIC("Link plane state %p to [NOCRTC]\n",
759 plane_state);
759 760
760 return 0; 761 return 0;
761} 762}
@@ -782,10 +783,11 @@ drm_atomic_set_fb_for_plane(struct drm_plane_state *plane_state,
782 plane_state->fb = fb; 783 plane_state->fb = fb;
783 784
784 if (fb) 785 if (fb)
785 DRM_DEBUG_KMS("Set [FB:%d] for plane state %p\n", 786 DRM_DEBUG_ATOMIC("Set [FB:%d] for plane state %p\n",
786 fb->base.id, plane_state); 787 fb->base.id, plane_state);
787 else 788 else
788 DRM_DEBUG_KMS("Set [NOFB] for plane state %p\n", plane_state); 789 DRM_DEBUG_ATOMIC("Set [NOFB] for plane state %p\n",
790 plane_state);
789} 791}
790EXPORT_SYMBOL(drm_atomic_set_fb_for_plane); 792EXPORT_SYMBOL(drm_atomic_set_fb_for_plane);
791 793
@@ -818,11 +820,11 @@ drm_atomic_set_crtc_for_connector(struct drm_connector_state *conn_state,
818 conn_state->crtc = crtc; 820 conn_state->crtc = crtc;
819 821
820 if (crtc) 822 if (crtc)
821 DRM_DEBUG_KMS("Link connector state %p to [CRTC:%d]\n", 823 DRM_DEBUG_ATOMIC("Link connector state %p to [CRTC:%d]\n",
822 conn_state, crtc->base.id); 824 conn_state, crtc->base.id);
823 else 825 else
824 DRM_DEBUG_KMS("Link connector state %p to [NOCRTC]\n", 826 DRM_DEBUG_ATOMIC("Link connector state %p to [NOCRTC]\n",
825 conn_state); 827 conn_state);
826 828
827 return 0; 829 return 0;
828} 830}
@@ -858,8 +860,8 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
858 if (ret) 860 if (ret)
859 return ret; 861 return ret;
860 862
861 DRM_DEBUG_KMS("Adding all current connectors for [CRTC:%d] to %p\n", 863 DRM_DEBUG_ATOMIC("Adding all current connectors for [CRTC:%d] to %p\n",
862 crtc->base.id, state); 864 crtc->base.id, state);
863 865
864 /* 866 /*
865 * Changed connectors are already in @state, so only need to look at the 867 * 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,
901 num_connected_connectors++; 903 num_connected_connectors++;
902 } 904 }
903 905
904 DRM_DEBUG_KMS("State %p has %i connectors for [CRTC:%d]\n", 906 DRM_DEBUG_ATOMIC("State %p has %i connectors for [CRTC:%d]\n",
905 state, num_connected_connectors, crtc->base.id); 907 state, num_connected_connectors, crtc->base.id);
906 908
907 return num_connected_connectors; 909 return num_connected_connectors;
908} 910}
@@ -953,7 +955,7 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
953 int ncrtcs = config->num_crtc; 955 int ncrtcs = config->num_crtc;
954 int i, ret = 0; 956 int i, ret = 0;
955 957
956 DRM_DEBUG_KMS("checking %p\n", state); 958 DRM_DEBUG_ATOMIC("checking %p\n", state);
957 959
958 for (i = 0; i < nplanes; i++) { 960 for (i = 0; i < nplanes; i++) {
959 struct drm_plane *plane = state->planes[i]; 961 struct drm_plane *plane = state->planes[i];
@@ -963,8 +965,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
963 965
964 ret = drm_atomic_plane_check(plane, state->plane_states[i]); 966 ret = drm_atomic_plane_check(plane, state->plane_states[i]);
965 if (ret) { 967 if (ret) {
966 DRM_DEBUG_KMS("[PLANE:%d] atomic core check failed\n", 968 DRM_DEBUG_ATOMIC("[PLANE:%d] atomic core check failed\n",
967 plane->base.id); 969 plane->base.id);
968 return ret; 970 return ret;
969 } 971 }
970 } 972 }
@@ -977,8 +979,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
977 979
978 ret = drm_atomic_crtc_check(crtc, state->crtc_states[i]); 980 ret = drm_atomic_crtc_check(crtc, state->crtc_states[i]);
979 if (ret) { 981 if (ret) {
980 DRM_DEBUG_KMS("[CRTC:%d] atomic core check failed\n", 982 DRM_DEBUG_ATOMIC("[CRTC:%d] atomic core check failed\n",
981 crtc->base.id); 983 crtc->base.id);
982 return ret; 984 return ret;
983 } 985 }
984 } 986 }
@@ -996,8 +998,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)
996 998
997 if (crtc_state->mode_changed || 999 if (crtc_state->mode_changed ||
998 crtc_state->active_changed) { 1000 crtc_state->active_changed) {
999 DRM_DEBUG_KMS("[CRTC:%d] requires full modeset\n", 1001 DRM_DEBUG_ATOMIC("[CRTC:%d] requires full modeset\n",
1000 crtc->base.id); 1002 crtc->base.id);
1001 return -EINVAL; 1003 return -EINVAL;
1002 } 1004 }
1003 } 1005 }
@@ -1032,7 +1034,7 @@ int drm_atomic_commit(struct drm_atomic_state *state)
1032 if (ret) 1034 if (ret)
1033 return ret; 1035 return ret;
1034 1036
1035 DRM_DEBUG_KMS("commiting %p\n", state); 1037 DRM_DEBUG_ATOMIC("commiting %p\n", state);
1036 1038
1037 return config->funcs->atomic_commit(state->dev, state, false); 1039 return config->funcs->atomic_commit(state->dev, state, false);
1038} 1040}
@@ -1063,7 +1065,7 @@ int drm_atomic_async_commit(struct drm_atomic_state *state)
1063 if (ret) 1065 if (ret)
1064 return ret; 1066 return ret;
1065 1067
1066 DRM_DEBUG_KMS("commiting %p asynchronously\n", state); 1068 DRM_DEBUG_ATOMIC("commiting %p asynchronously\n", state);
1067 1069
1068 return config->funcs->atomic_commit(state->dev, state, true); 1070 return config->funcs->atomic_commit(state->dev, state, true);
1069} 1071}
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index e70adfcb9e84..9e8767118edb 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,
116 */ 116 */
117 WARN_ON(!drm_modeset_is_locked(&config->connection_mutex)); 117 WARN_ON(!drm_modeset_is_locked(&config->connection_mutex));
118 118
119 DRM_DEBUG_KMS("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n", 119 DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] in use on [CRTC:%d], stealing it\n",
120 encoder->base.id, encoder->name, 120 encoder->base.id, encoder->name,
121 encoder_crtc->base.id); 121 encoder_crtc->base.id);
122 122
123 crtc_state = drm_atomic_get_crtc_state(state, encoder_crtc); 123 crtc_state = drm_atomic_get_crtc_state(state, encoder_crtc);
124 if (IS_ERR(crtc_state)) 124 if (IS_ERR(crtc_state))
@@ -130,9 +130,9 @@ steal_encoder(struct drm_atomic_state *state,
130 if (connector->state->best_encoder != encoder) 130 if (connector->state->best_encoder != encoder)
131 continue; 131 continue;
132 132
133 DRM_DEBUG_KMS("Stealing encoder from [CONNECTOR:%d:%s]\n", 133 DRM_DEBUG_ATOMIC("Stealing encoder from [CONNECTOR:%d:%s]\n",
134 connector->base.id, 134 connector->base.id,
135 connector->name); 135 connector->name);
136 136
137 connector_state = drm_atomic_get_connector_state(state, 137 connector_state = drm_atomic_get_connector_state(state,
138 connector); 138 connector);
@@ -165,9 +165,9 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
165 if (!connector) 165 if (!connector)
166 return 0; 166 return 0;
167 167
168 DRM_DEBUG_KMS("Updating routing for [CONNECTOR:%d:%s]\n", 168 DRM_DEBUG_ATOMIC("Updating routing for [CONNECTOR:%d:%s]\n",
169 connector->base.id, 169 connector->base.id,
170 connector->name); 170 connector->name);
171 171
172 if (connector->state->crtc != connector_state->crtc) { 172 if (connector->state->crtc != connector_state->crtc) {
173 if (connector->state->crtc) { 173 if (connector->state->crtc) {
@@ -186,7 +186,7 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
186 } 186 }
187 187
188 if (!connector_state->crtc) { 188 if (!connector_state->crtc) {
189 DRM_DEBUG_KMS("Disabling [CONNECTOR:%d:%s]\n", 189 DRM_DEBUG_ATOMIC("Disabling [CONNECTOR:%d:%s]\n",
190 connector->base.id, 190 connector->base.id,
191 connector->name); 191 connector->name);
192 192
@@ -199,19 +199,19 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
199 new_encoder = funcs->best_encoder(connector); 199 new_encoder = funcs->best_encoder(connector);
200 200
201 if (!new_encoder) { 201 if (!new_encoder) {
202 DRM_DEBUG_KMS("No suitable encoder found for [CONNECTOR:%d:%s]\n", 202 DRM_DEBUG_ATOMIC("No suitable encoder found for [CONNECTOR:%d:%s]\n",
203 connector->base.id, 203 connector->base.id,
204 connector->name); 204 connector->name);
205 return -EINVAL; 205 return -EINVAL;
206 } 206 }
207 207
208 if (new_encoder == connector_state->best_encoder) { 208 if (new_encoder == connector_state->best_encoder) {
209 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n", 209 DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] keeps [ENCODER:%d:%s], now on [CRTC:%d]\n",
210 connector->base.id, 210 connector->base.id,
211 connector->name, 211 connector->name,
212 new_encoder->base.id, 212 new_encoder->base.id,
213 new_encoder->name, 213 new_encoder->name,
214 connector_state->crtc->base.id); 214 connector_state->crtc->base.id);
215 215
216 return 0; 216 return 0;
217 } 217 }
@@ -222,9 +222,9 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
222 if (encoder_crtc) { 222 if (encoder_crtc) {
223 ret = steal_encoder(state, new_encoder, encoder_crtc); 223 ret = steal_encoder(state, new_encoder, encoder_crtc);
224 if (ret) { 224 if (ret) {
225 DRM_DEBUG_KMS("Encoder stealing failed for [CONNECTOR:%d:%s]\n", 225 DRM_DEBUG_ATOMIC("Encoder stealing failed for [CONNECTOR:%d:%s]\n",
226 connector->base.id, 226 connector->base.id,
227 connector->name); 227 connector->name);
228 return ret; 228 return ret;
229 } 229 }
230 } 230 }
@@ -235,12 +235,12 @@ update_connector_routing(struct drm_atomic_state *state, int conn_idx)
235 crtc_state = state->crtc_states[idx]; 235 crtc_state = state->crtc_states[idx];
236 crtc_state->mode_changed = true; 236 crtc_state->mode_changed = true;
237 237
238 DRM_DEBUG_KMS("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n", 238 DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d]\n",
239 connector->base.id, 239 connector->base.id,
240 connector->name, 240 connector->name,
241 new_encoder->base.id, 241 new_encoder->base.id,
242 new_encoder->name, 242 new_encoder->name,
243 connector_state->crtc->base.id); 243 connector_state->crtc->base.id);
244 244
245 return 0; 245 return 0;
246} 246}
@@ -292,7 +292,7 @@ mode_fixup(struct drm_atomic_state *state)
292 encoder->bridge, &crtc_state->mode, 292 encoder->bridge, &crtc_state->mode,
293 &crtc_state->adjusted_mode); 293 &crtc_state->adjusted_mode);
294 if (!ret) { 294 if (!ret) {
295 DRM_DEBUG_KMS("Bridge fixup failed\n"); 295 DRM_DEBUG_ATOMIC("Bridge fixup failed\n");
296 return -EINVAL; 296 return -EINVAL;
297 } 297 }
298 } 298 }
@@ -301,16 +301,16 @@ mode_fixup(struct drm_atomic_state *state)
301 ret = funcs->atomic_check(encoder, crtc_state, 301 ret = funcs->atomic_check(encoder, crtc_state,
302 conn_state); 302 conn_state);
303 if (ret) { 303 if (ret) {
304 DRM_DEBUG_KMS("[ENCODER:%d:%s] check failed\n", 304 DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] check failed\n",
305 encoder->base.id, encoder->name); 305 encoder->base.id, encoder->name);
306 return ret; 306 return ret;
307 } 307 }
308 } else { 308 } else {
309 ret = funcs->mode_fixup(encoder, &crtc_state->mode, 309 ret = funcs->mode_fixup(encoder, &crtc_state->mode,
310 &crtc_state->adjusted_mode); 310 &crtc_state->adjusted_mode);
311 if (!ret) { 311 if (!ret) {
312 DRM_DEBUG_KMS("[ENCODER:%d:%s] fixup failed\n", 312 DRM_DEBUG_ATOMIC("[ENCODER:%d:%s] fixup failed\n",
313 encoder->base.id, encoder->name); 313 encoder->base.id, encoder->name);
314 return -EINVAL; 314 return -EINVAL;
315 } 315 }
316 } 316 }
@@ -330,8 +330,8 @@ mode_fixup(struct drm_atomic_state *state)
330 ret = funcs->mode_fixup(crtc, &crtc_state->mode, 330 ret = funcs->mode_fixup(crtc, &crtc_state->mode,
331 &crtc_state->adjusted_mode); 331 &crtc_state->adjusted_mode);
332 if (!ret) { 332 if (!ret) {
333 DRM_DEBUG_KMS("[CRTC:%d] fixup failed\n", 333 DRM_DEBUG_ATOMIC("[CRTC:%d] fixup failed\n",
334 crtc->base.id); 334 crtc->base.id);
335 return -EINVAL; 335 return -EINVAL;
336 } 336 }
337 } 337 }
@@ -384,14 +384,14 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
384 continue; 384 continue;
385 385
386 if (!drm_mode_equal(&crtc->state->mode, &crtc_state->mode)) { 386 if (!drm_mode_equal(&crtc->state->mode, &crtc_state->mode)) {
387 DRM_DEBUG_KMS("[CRTC:%d] mode changed\n", 387 DRM_DEBUG_ATOMIC("[CRTC:%d] mode changed\n",
388 crtc->base.id); 388 crtc->base.id);
389 crtc_state->mode_changed = true; 389 crtc_state->mode_changed = true;
390 } 390 }
391 391
392 if (crtc->state->enable != crtc_state->enable) { 392 if (crtc->state->enable != crtc_state->enable) {
393 DRM_DEBUG_KMS("[CRTC:%d] enable changed\n", 393 DRM_DEBUG_ATOMIC("[CRTC:%d] enable changed\n",
394 crtc->base.id); 394 crtc->base.id);
395 crtc_state->mode_changed = true; 395 crtc_state->mode_changed = true;
396 } 396 }
397 } 397 }
@@ -428,17 +428,17 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
428 * a full modeset because update_connector_routing force that. 428 * a full modeset because update_connector_routing force that.
429 */ 429 */
430 if (crtc->state->active != crtc_state->active) { 430 if (crtc->state->active != crtc_state->active) {
431 DRM_DEBUG_KMS("[CRTC:%d] active changed\n", 431 DRM_DEBUG_ATOMIC("[CRTC:%d] active changed\n",
432 crtc->base.id); 432 crtc->base.id);
433 crtc_state->active_changed = true; 433 crtc_state->active_changed = true;
434 } 434 }
435 435
436 if (!needs_modeset(crtc_state)) 436 if (!needs_modeset(crtc_state))
437 continue; 437 continue;
438 438
439 DRM_DEBUG_KMS("[CRTC:%d] needs all connectors, enable: %c, active: %c\n", 439 DRM_DEBUG_ATOMIC("[CRTC:%d] needs all connectors, enable: %c, active: %c\n",
440 crtc->base.id, 440 crtc->base.id,
441 crtc_state->enable ? 'y' : 'n', 441 crtc_state->enable ? 'y' : 'n',
442 crtc_state->active ? 'y' : 'n'); 442 crtc_state->active ? 'y' : 'n');
443 443
444 ret = drm_atomic_add_affected_connectors(state, crtc); 444 ret = drm_atomic_add_affected_connectors(state, crtc);
@@ -449,8 +449,8 @@ drm_atomic_helper_check_modeset(struct drm_device *dev,
449 crtc); 449 crtc);
450 450
451 if (crtc_state->enable != !!num_connectors) { 451 if (crtc_state->enable != !!num_connectors) {
452 DRM_DEBUG_KMS("[CRTC:%d] enabled/connectors mismatch\n", 452 DRM_DEBUG_ATOMIC("[CRTC:%d] enabled/connectors mismatch\n",
453 crtc->base.id); 453 crtc->base.id);
454 454
455 return -EINVAL; 455 return -EINVAL;
456 } 456 }
@@ -497,8 +497,8 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
497 497
498 ret = funcs->atomic_check(plane, plane_state); 498 ret = funcs->atomic_check(plane, plane_state);
499 if (ret) { 499 if (ret) {
500 DRM_DEBUG_KMS("[PLANE:%d] atomic driver check failed\n", 500 DRM_DEBUG_ATOMIC("[PLANE:%d] atomic driver check failed\n",
501 plane->base.id); 501 plane->base.id);
502 return ret; 502 return ret;
503 } 503 }
504 } 504 }
@@ -517,8 +517,8 @@ drm_atomic_helper_check_planes(struct drm_device *dev,
517 517
518 ret = funcs->atomic_check(crtc, state->crtc_states[i]); 518 ret = funcs->atomic_check(crtc, state->crtc_states[i]);
519 if (ret) { 519 if (ret) {
520 DRM_DEBUG_KMS("[CRTC:%d] atomic driver check failed\n", 520 DRM_DEBUG_ATOMIC("[CRTC:%d] atomic driver check failed\n",
521 crtc->base.id); 521 crtc->base.id);
522 return ret; 522 return ret;
523 } 523 }
524 } 524 }
@@ -600,8 +600,8 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state)
600 600
601 funcs = encoder->helper_private; 601 funcs = encoder->helper_private;
602 602
603 DRM_DEBUG_KMS("disabling [ENCODER:%d:%s]\n", 603 DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n",
604 encoder->base.id, encoder->name); 604 encoder->base.id, encoder->name);
605 605
606 /* 606 /*
607 * Each encoder has at most one connector (since we always steal 607 * 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)
639 639
640 funcs = crtc->helper_private; 640 funcs = crtc->helper_private;
641 641
642 DRM_DEBUG_KMS("disabling [CRTC:%d]\n", 642 DRM_DEBUG_ATOMIC("disabling [CRTC:%d]\n",
643 crtc->base.id); 643 crtc->base.id);
644 644
645 645
646 /* Right function depends upon target state. */ 646 /* Right function depends upon target state. */
@@ -724,8 +724,8 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
724 funcs = crtc->helper_private; 724 funcs = crtc->helper_private;
725 725
726 if (crtc->state->enable) { 726 if (crtc->state->enable) {
727 DRM_DEBUG_KMS("modeset on [CRTC:%d]\n", 727 DRM_DEBUG_ATOMIC("modeset on [CRTC:%d]\n",
728 crtc->base.id); 728 crtc->base.id);
729 729
730 funcs->mode_set_nofb(crtc); 730 funcs->mode_set_nofb(crtc);
731 } 731 }
@@ -752,8 +752,8 @@ crtc_set_mode(struct drm_device *dev, struct drm_atomic_state *old_state)
752 if (!new_crtc_state->mode_changed) 752 if (!new_crtc_state->mode_changed)
753 continue; 753 continue;
754 754
755 DRM_DEBUG_KMS("modeset on [ENCODER:%d:%s]\n", 755 DRM_DEBUG_ATOMIC("modeset on [ENCODER:%d:%s]\n",
756 encoder->base.id, encoder->name); 756 encoder->base.id, encoder->name);
757 757
758 /* 758 /*
759 * Each encoder has at most one connector (since we always steal 759 * 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,
816 funcs = crtc->helper_private; 816 funcs = crtc->helper_private;
817 817
818 if (crtc->state->enable) { 818 if (crtc->state->enable) {
819 DRM_DEBUG_KMS("enabling [CRTC:%d]\n", 819 DRM_DEBUG_ATOMIC("enabling [CRTC:%d]\n",
820 crtc->base.id); 820 crtc->base.id);
821 821
822 if (funcs->enable) 822 if (funcs->enable)
823 funcs->enable(crtc); 823 funcs->enable(crtc);
@@ -842,8 +842,8 @@ void drm_atomic_helper_commit_post_planes(struct drm_device *dev,
842 encoder = connector->state->best_encoder; 842 encoder = connector->state->best_encoder;
843 funcs = encoder->helper_private; 843 funcs = encoder->helper_private;
844 844
845 DRM_DEBUG_KMS("enabling [ENCODER:%d:%s]\n", 845 DRM_DEBUG_ATOMIC("enabling [ENCODER:%d:%s]\n",
846 encoder->base.id, encoder->name); 846 encoder->base.id, encoder->name);
847 847
848 /* 848 /*
849 * Each encoder has at most one connector (since we always steal 849 * 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;
104 * PRIME: used in the prime code. 104 * PRIME: used in the prime code.
105 * This is the category used by the DRM_DEBUG_PRIME() macro. 105 * This is the category used by the DRM_DEBUG_PRIME() macro.
106 * 106 *
107 * ATOMIC: used in the atomic code.
108 * This is the category used by the DRM_DEBUG_ATOMIC() macro.
109 *
107 * Enabling verbose debug messages is done through the drm.debug parameter, 110 * Enabling verbose debug messages is done through the drm.debug parameter,
108 * each category being enabled by a bit. 111 * each category being enabled by a bit.
109 * 112 *
@@ -121,6 +124,7 @@ struct dma_buf_attachment;
121#define DRM_UT_DRIVER 0x02 124#define DRM_UT_DRIVER 0x02
122#define DRM_UT_KMS 0x04 125#define DRM_UT_KMS 0x04
123#define DRM_UT_PRIME 0x08 126#define DRM_UT_PRIME 0x08
127#define DRM_UT_ATOMIC 0x10
124 128
125extern __printf(2, 3) 129extern __printf(2, 3)
126void drm_ut_debug_printk(const char *function_name, 130void drm_ut_debug_printk(const char *function_name,
@@ -207,6 +211,11 @@ void drm_err(const char *format, ...);
207 if (unlikely(drm_debug & DRM_UT_PRIME)) \ 211 if (unlikely(drm_debug & DRM_UT_PRIME)) \
208 drm_ut_debug_printk(__func__, fmt, ##args); \ 212 drm_ut_debug_printk(__func__, fmt, ##args); \
209 } while (0) 213 } while (0)
214#define DRM_DEBUG_ATOMIC(fmt, args...) \
215 do { \
216 if (unlikely(drm_debug & DRM_UT_ATOMIC)) \
217 drm_ut_debug_printk(__func__, fmt, ##args); \
218 } while (0)
210 219
211/*@}*/ 220/*@}*/
212 221