diff options
Diffstat (limited to 'drivers/gpu/drm/drm_atomic.c')
| -rw-r--r-- | drivers/gpu/drm/drm_atomic.c | 192 | 
1 files changed, 107 insertions, 85 deletions
| diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c index ff1416cd609a..88cd992df356 100644 --- a/drivers/gpu/drm/drm_atomic.c +++ b/drivers/gpu/drm/drm_atomic.c @@ -74,7 +74,7 @@ int drm_crtc_commit_wait(struct drm_crtc_commit *commit)  	ret = wait_for_completion_timeout(&commit->hw_done, timeout);  	if (!ret) { -		DRM_ERROR("hw_done timed out\n"); +		drm_err(commit->crtc->dev, "hw_done timed out\n");  		return -ETIMEDOUT;  	} @@ -84,7 +84,7 @@ int drm_crtc_commit_wait(struct drm_crtc_commit *commit)  	 */  	ret = wait_for_completion_timeout(&commit->flip_done, timeout);  	if (!ret) { -		DRM_ERROR("flip_done timed out\n"); +		drm_err(commit->crtc->dev, "flip_done timed out\n");  		return -ETIMEDOUT;  	} @@ -140,7 +140,7 @@ drm_atomic_state_init(struct drm_device *dev, struct drm_atomic_state *state)  	state->dev = dev; -	DRM_DEBUG_ATOMIC("Allocated atomic state %p\n", state); +	drm_dbg_atomic(dev, "Allocated atomic state %p\n", state);  	return 0;  fail: @@ -191,7 +191,7 @@ void drm_atomic_state_default_clear(struct drm_atomic_state *state)  	struct drm_mode_config *config = &dev->mode_config;  	int i; -	DRM_DEBUG_ATOMIC("Clearing atomic state %p\n", state); +	drm_dbg_atomic(dev, "Clearing atomic state %p\n", state);  	for (i = 0; i < state->num_connector; i++) {  		struct drm_connector *connector = state->connectors[i].ptr; @@ -301,7 +301,7 @@ void __drm_atomic_state_free(struct kref *ref)  	drm_atomic_state_clear(state); -	DRM_DEBUG_ATOMIC("Freeing atomic state %p\n", state); +	drm_dbg_atomic(state->dev, "Freeing atomic state %p\n", state);  	if (config->funcs->atomic_state_free) {  		config->funcs->atomic_state_free(state); @@ -358,8 +358,8 @@ drm_atomic_get_crtc_state(struct drm_atomic_state *state,  	state->crtcs[index].ptr = crtc;  	crtc_state->state = state; -	DRM_DEBUG_ATOMIC("Added [CRTC:%d:%s] %p state to %p\n", -			 crtc->base.id, crtc->name, crtc_state, state); +	drm_dbg_atomic(state->dev, "Added [CRTC:%d:%s] %p state to %p\n", +		       crtc->base.id, crtc->name, crtc_state, state);  	return crtc_state;  } @@ -379,8 +379,9 @@ static int drm_atomic_crtc_check(const struct drm_crtc_state *old_crtc_state,  	 */  	if (new_crtc_state->active && !new_crtc_state->enable) { -		DRM_DEBUG_ATOMIC("[CRTC:%d:%s] active without enabled\n", -				 crtc->base.id, crtc->name); +		drm_dbg_atomic(crtc->dev, +			       "[CRTC:%d:%s] active without enabled\n", +			       crtc->base.id, crtc->name);  		return -EINVAL;  	} @@ -390,15 +391,17 @@ static int drm_atomic_crtc_check(const struct drm_crtc_state *old_crtc_state,  	 */  	if (drm_core_check_feature(crtc->dev, DRIVER_ATOMIC) &&  	    WARN_ON(new_crtc_state->enable && !new_crtc_state->mode_blob)) { -		DRM_DEBUG_ATOMIC("[CRTC:%d:%s] enabled without mode blob\n", -				 crtc->base.id, crtc->name); +		drm_dbg_atomic(crtc->dev, +			       "[CRTC:%d:%s] enabled without mode blob\n", +			       crtc->base.id, crtc->name);  		return -EINVAL;  	}  	if (drm_core_check_feature(crtc->dev, DRIVER_ATOMIC) &&  	    WARN_ON(!new_crtc_state->enable && new_crtc_state->mode_blob)) { -		DRM_DEBUG_ATOMIC("[CRTC:%d:%s] disabled with mode blob\n", -				 crtc->base.id, crtc->name); +		drm_dbg_atomic(crtc->dev, +			       "[CRTC:%d:%s] disabled with mode blob\n", +			       crtc->base.id, crtc->name);  		return -EINVAL;  	} @@ -414,8 +417,9 @@ static int drm_atomic_crtc_check(const struct drm_crtc_state *old_crtc_state,  	 */  	if (new_crtc_state->event &&  	    !new_crtc_state->active && !old_crtc_state->active) { -		DRM_DEBUG_ATOMIC("[CRTC:%d:%s] requesting event but off\n", -				 crtc->base.id, crtc->name); +		drm_dbg_atomic(crtc->dev, +			       "[CRTC:%d:%s] requesting event but off\n", +			       crtc->base.id, crtc->name);  		return -EINVAL;  	} @@ -460,8 +464,9 @@ static int drm_atomic_connector_check(struct drm_connector *connector,  		return 0;  	if (writeback_job->fb && !state->crtc) { -		DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] framebuffer without CRTC\n", -				 connector->base.id, connector->name); +		drm_dbg_atomic(connector->dev, +			       "[CONNECTOR:%d:%s] framebuffer without CRTC\n", +			       connector->base.id, connector->name);  		return -EINVAL;  	} @@ -470,16 +475,18 @@ static int drm_atomic_connector_check(struct drm_connector *connector,  								state->crtc);  	if (writeback_job->fb && !crtc_state->active) { -		DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] has framebuffer, but [CRTC:%d] is off\n", -				 connector->base.id, connector->name, -				 state->crtc->base.id); +		drm_dbg_atomic(connector->dev, +			       "[CONNECTOR:%d:%s] has framebuffer, but [CRTC:%d] is off\n", +			       connector->base.id, connector->name, +			       state->crtc->base.id);  		return -EINVAL;  	}  	if (!writeback_job->fb) {  		if (writeback_job->out_fence) { -			DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] requesting out-fence without framebuffer\n", -					 connector->base.id, connector->name); +			drm_dbg_atomic(connector->dev, +				       "[CONNECTOR:%d:%s] requesting out-fence without framebuffer\n", +				       connector->base.id, connector->name);  			return -EINVAL;  		} @@ -537,8 +544,8 @@ drm_atomic_get_plane_state(struct drm_atomic_state *state,  	state->planes[index].new_state = plane_state;  	plane_state->state = state; -	DRM_DEBUG_ATOMIC("Added [PLANE:%d:%s] %p state to %p\n", -			 plane->base.id, plane->name, plane_state, state); +	drm_dbg_atomic(plane->dev, "Added [PLANE:%d:%s] %p state to %p\n", +		       plane->base.id, plane->name, plane_state, state);  	if (plane_state->crtc) {  		struct drm_crtc_state *crtc_state; @@ -594,12 +601,12 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,  	/* either *both* CRTC and FB must be set, or neither */  	if (crtc && !fb) { -		DRM_DEBUG_ATOMIC("[PLANE:%d:%s] CRTC set but no FB\n", -				 plane->base.id, plane->name); +		drm_dbg_atomic(plane->dev, "[PLANE:%d:%s] CRTC set but no FB\n", +			       plane->base.id, plane->name);  		return -EINVAL;  	} else if (fb && !crtc) { -		DRM_DEBUG_ATOMIC("[PLANE:%d:%s] FB set but no CRTC\n", -				 plane->base.id, plane->name); +		drm_dbg_atomic(plane->dev, "[PLANE:%d:%s] FB set but no CRTC\n", +			       plane->base.id, plane->name);  		return -EINVAL;  	} @@ -609,9 +616,10 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,  	/* Check whether this plane is usable on this CRTC */  	if (!(plane->possible_crtcs & drm_crtc_mask(crtc))) { -		DRM_DEBUG_ATOMIC("Invalid [CRTC:%d:%s] for [PLANE:%d:%s]\n", -				 crtc->base.id, crtc->name, -				 plane->base.id, plane->name); +		drm_dbg_atomic(plane->dev, +			       "Invalid [CRTC:%d:%s] for [PLANE:%d:%s]\n", +			       crtc->base.id, crtc->name, +			       plane->base.id, plane->name);  		return -EINVAL;  	} @@ -619,9 +627,10 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,  	ret = drm_plane_check_pixel_format(plane, fb->format->format,  					   fb->modifier);  	if (ret) { -		DRM_DEBUG_ATOMIC("[PLANE:%d:%s] invalid pixel format %p4cc, modifier 0x%llx\n", -				 plane->base.id, plane->name, -				 &fb->format->format, fb->modifier); +		drm_dbg_atomic(plane->dev, +			       "[PLANE:%d:%s] invalid pixel format %p4cc, modifier 0x%llx\n", +			       plane->base.id, plane->name, +			       &fb->format->format, fb->modifier);  		return ret;  	} @@ -630,10 +639,11 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,  	    new_plane_state->crtc_x > INT_MAX - (int32_t) new_plane_state->crtc_w ||  	    new_plane_state->crtc_h > INT_MAX ||  	    new_plane_state->crtc_y > INT_MAX - (int32_t) new_plane_state->crtc_h) { -		DRM_DEBUG_ATOMIC("[PLANE:%d:%s] invalid CRTC coordinates %ux%u+%d+%d\n", -				 plane->base.id, plane->name, -				 new_plane_state->crtc_w, new_plane_state->crtc_h, -				 new_plane_state->crtc_x, new_plane_state->crtc_y); +		drm_dbg_atomic(plane->dev, +			       "[PLANE:%d:%s] invalid CRTC coordinates %ux%u+%d+%d\n", +			       plane->base.id, plane->name, +			       new_plane_state->crtc_w, new_plane_state->crtc_h, +			       new_plane_state->crtc_x, new_plane_state->crtc_y);  		return -ERANGE;  	} @@ -645,18 +655,19 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,  	    new_plane_state->src_x > fb_width - new_plane_state->src_w ||  	    new_plane_state->src_h > fb_height ||  	    new_plane_state->src_y > fb_height - new_plane_state->src_h) { -		DRM_DEBUG_ATOMIC("[PLANE:%d:%s] invalid source coordinates " -				 "%u.%06ux%u.%06u+%u.%06u+%u.%06u (fb %ux%u)\n", -				 plane->base.id, plane->name, -				 new_plane_state->src_w >> 16, -				 ((new_plane_state->src_w & 0xffff) * 15625) >> 10, -				 new_plane_state->src_h >> 16, -				 ((new_plane_state->src_h & 0xffff) * 15625) >> 10, -				 new_plane_state->src_x >> 16, -				 ((new_plane_state->src_x & 0xffff) * 15625) >> 10, -				 new_plane_state->src_y >> 16, -				 ((new_plane_state->src_y & 0xffff) * 15625) >> 10, -				 fb->width, fb->height); +		drm_dbg_atomic(plane->dev, +			       "[PLANE:%d:%s] invalid source coordinates " +			       "%u.%06ux%u.%06u+%u.%06u+%u.%06u (fb %ux%u)\n", +			       plane->base.id, plane->name, +			       new_plane_state->src_w >> 16, +			       ((new_plane_state->src_w & 0xffff) * 15625) >> 10, +			       new_plane_state->src_h >> 16, +			       ((new_plane_state->src_h & 0xffff) * 15625) >> 10, +			       new_plane_state->src_x >> 16, +			       ((new_plane_state->src_x & 0xffff) * 15625) >> 10, +			       new_plane_state->src_y >> 16, +			       ((new_plane_state->src_y & 0xffff) * 15625) >> 10, +			       fb->width, fb->height);  		return -ENOSPC;  	} @@ -671,9 +682,10 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,  		    clips->y1 < 0 ||  		    clips->x2 > fb_width ||  		    clips->y2 > fb_height) { -			DRM_DEBUG_ATOMIC("[PLANE:%d:%s] invalid damage clip %d %d %d %d\n", -					 plane->base.id, plane->name, clips->x1, -					 clips->y1, clips->x2, clips->y2); +			drm_dbg_atomic(plane->dev, +				       "[PLANE:%d:%s] invalid damage clip %d %d %d %d\n", +				       plane->base.id, plane->name, clips->x1, +				       clips->y1, clips->x2, clips->y2);  			return -EINVAL;  		}  		clips++; @@ -681,8 +693,9 @@ static int drm_atomic_plane_check(const struct drm_plane_state *old_plane_state,  	}  	if (plane_switching_crtc(old_plane_state, new_plane_state)) { -		DRM_DEBUG_ATOMIC("[PLANE:%d:%s] switching CRTC directly\n", -				 plane->base.id, plane->name); +		drm_dbg_atomic(plane->dev, +			       "[PLANE:%d:%s] switching CRTC directly\n", +			       plane->base.id, plane->name);  		return -EINVAL;  	} @@ -846,8 +859,9 @@ drm_atomic_get_private_obj_state(struct drm_atomic_state *state,  	state->num_private_objs = num_objs; -	DRM_DEBUG_ATOMIC("Added new private object %p state %p to %p\n", -			 obj, obj_state, state); +	drm_dbg_atomic(state->dev, +		       "Added new private object %p state %p to %p\n", +		       obj, obj_state, state);  	return obj_state;  } @@ -1027,7 +1041,7 @@ drm_atomic_get_connector_state(struct drm_atomic_state *state,  	state->connectors[index].ptr = connector;  	connector_state->state = state; -	DRM_DEBUG_ATOMIC("Added [CONNECTOR:%d:%s] %p state to %p\n", +	drm_dbg_atomic(connector->dev, "Added [CONNECTOR:%d:%s] %p state to %p\n",  			 connector->base.id, connector->name,  			 connector_state, state); @@ -1160,8 +1174,9 @@ drm_atomic_add_encoder_bridges(struct drm_atomic_state *state,  	if (!encoder)  		return 0; -	DRM_DEBUG_ATOMIC("Adding all bridges for [encoder:%d:%s] to %p\n", -			 encoder->base.id, encoder->name, state); +	drm_dbg_atomic(encoder->dev, +		       "Adding all bridges for [encoder:%d:%s] to %p\n", +		       encoder->base.id, encoder->name, state);  	drm_for_each_bridge_in_chain(encoder, bridge) {  		/* Skip bridges that don't implement the atomic state hooks. */ @@ -1213,8 +1228,9 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state,  	if (ret)  		return ret; -	DRM_DEBUG_ATOMIC("Adding all current connectors for [CRTC:%d:%s] to %p\n", -			 crtc->base.id, crtc->name, state); +	drm_dbg_atomic(crtc->dev, +		       "Adding all current connectors for [CRTC:%d:%s] to %p\n", +		       crtc->base.id, crtc->name, state);  	/*  	 * Changed connectors are already in @state, so only need to look @@ -1267,8 +1283,9 @@ drm_atomic_add_affected_planes(struct drm_atomic_state *state,  	WARN_ON(!drm_atomic_get_new_crtc_state(state, crtc)); -	DRM_DEBUG_ATOMIC("Adding all current planes for [CRTC:%d:%s] to %p\n", -			 crtc->base.id, crtc->name, state); +	drm_dbg_atomic(crtc->dev, +		       "Adding all current planes for [CRTC:%d:%s] to %p\n", +		       crtc->base.id, crtc->name, state);  	drm_for_each_plane_mask(plane, state->dev, old_crtc_state->plane_mask) {  		struct drm_plane_state *plane_state = @@ -1308,16 +1325,18 @@ int drm_atomic_check_only(struct drm_atomic_state *state)  	unsigned int affected_crtc = 0;  	int i, ret = 0; -	DRM_DEBUG_ATOMIC("checking %p\n", state); +	drm_dbg_atomic(dev, "checking %p\n", state); -	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) -		requested_crtc |= drm_crtc_mask(crtc); +	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) { +		if (new_crtc_state->enable) +			requested_crtc |= drm_crtc_mask(crtc); +	}  	for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) {  		ret = drm_atomic_plane_check(old_plane_state, new_plane_state);  		if (ret) { -			DRM_DEBUG_ATOMIC("[PLANE:%d:%s] atomic core check failed\n", -					 plane->base.id, plane->name); +			drm_dbg_atomic(dev, "[PLANE:%d:%s] atomic core check failed\n", +				       plane->base.id, plane->name);  			return ret;  		}  	} @@ -1325,8 +1344,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)  	for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {  		ret = drm_atomic_crtc_check(old_crtc_state, new_crtc_state);  		if (ret) { -			DRM_DEBUG_ATOMIC("[CRTC:%d:%s] atomic core check failed\n", -					 crtc->base.id, crtc->name); +			drm_dbg_atomic(dev, "[CRTC:%d:%s] atomic core check failed\n", +				       crtc->base.id, crtc->name);  			return ret;  		}  	} @@ -1334,8 +1353,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)  	for_each_new_connector_in_state(state, conn, conn_state, i) {  		ret = drm_atomic_connector_check(conn, conn_state);  		if (ret) { -			DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] atomic core check failed\n", -					 conn->base.id, conn->name); +			drm_dbg_atomic(dev, "[CONNECTOR:%d:%s] atomic core check failed\n", +				       conn->base.id, conn->name);  			return ret;  		}  	} @@ -1344,8 +1363,8 @@ int drm_atomic_check_only(struct drm_atomic_state *state)  		ret = config->funcs->atomic_check(state->dev, state);  		if (ret) { -			DRM_DEBUG_ATOMIC("atomic driver check for %p failed: %d\n", -					 state, ret); +			drm_dbg_atomic(dev, "atomic driver check for %p failed: %d\n", +				       state, ret);  			return ret;  		}  	} @@ -1353,15 +1372,17 @@ int drm_atomic_check_only(struct drm_atomic_state *state)  	if (!state->allow_modeset) {  		for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {  			if (drm_atomic_crtc_needs_modeset(new_crtc_state)) { -				DRM_DEBUG_ATOMIC("[CRTC:%d:%s] requires full modeset\n", -						 crtc->base.id, crtc->name); +				drm_dbg_atomic(dev, "[CRTC:%d:%s] requires full modeset\n", +					       crtc->base.id, crtc->name);  				return -EINVAL;  			}  		}  	} -	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) -		affected_crtc |= drm_crtc_mask(crtc); +	for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) { +		if (new_crtc_state->enable) +			affected_crtc |= drm_crtc_mask(crtc); +	}  	/*  	 * For commits that allow modesets drivers can add other CRTCs to the @@ -1374,8 +1395,9 @@ int drm_atomic_check_only(struct drm_atomic_state *state)  	 * so compositors know what's going on.  	 */  	if (affected_crtc != requested_crtc) { -		DRM_DEBUG_ATOMIC("driver added CRTC to commit: requested 0x%x, affected 0x%0x\n", -				 requested_crtc, affected_crtc); +		drm_dbg_atomic(dev, +			       "driver added CRTC to commit: requested 0x%x, affected 0x%0x\n", +			       requested_crtc, affected_crtc);  		WARN(!state->allow_modeset, "adding CRTC not allowed without modesets: requested 0x%x, affected 0x%0x\n",  		     requested_crtc, affected_crtc);  	} @@ -1407,7 +1429,7 @@ int drm_atomic_commit(struct drm_atomic_state *state)  	if (ret)  		return ret; -	DRM_DEBUG_ATOMIC("committing %p\n", state); +	drm_dbg_atomic(state->dev, "committing %p\n", state);  	return config->funcs->atomic_commit(state->dev, state, false);  } @@ -1436,7 +1458,7 @@ int drm_atomic_nonblocking_commit(struct drm_atomic_state *state)  	if (ret)  		return ret; -	DRM_DEBUG_ATOMIC("committing %p nonblocking\n", state); +	drm_dbg_atomic(state->dev, "committing %p nonblocking\n", state);  	return config->funcs->atomic_commit(state->dev, state, true);  } @@ -1633,11 +1655,11 @@ void drm_atomic_print_new_state(const struct drm_atomic_state *state,  	int i;  	if (!p) { -		DRM_ERROR("invalid drm printer\n"); +		drm_err(state->dev, "invalid drm printer\n");  		return;  	} -	DRM_DEBUG_ATOMIC("checking %p\n", state); +	drm_dbg_atomic(state->dev, "checking %p\n", state);  	for_each_new_plane_in_state(state, plane, plane_state, i)  		drm_atomic_plane_print_state(p, plane_state); |