diff options
Diffstat (limited to 'drivers/gpu/drm/vc4')
| -rw-r--r-- | drivers/gpu/drm/vc4/vc4_plane.c | 25 | 
1 files changed, 12 insertions, 13 deletions
| diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c index cfb50fedfa2b..a3275fa66b7b 100644 --- a/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c @@ -297,6 +297,9 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)  	vc4_state->y_scaling[0] = vc4_get_scaling_mode(vc4_state->src_h[0],  						       vc4_state->crtc_h); +	vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE && +			       vc4_state->y_scaling[0] == VC4_SCALING_NONE); +  	if (num_planes > 1) {  		vc4_state->is_yuv = true; @@ -312,24 +315,17 @@ static int vc4_plane_setup_clipping_and_scaling(struct drm_plane_state *state)  			vc4_get_scaling_mode(vc4_state->src_h[1],  					     vc4_state->crtc_h); -		/* YUV conversion requires that scaling be enabled, -		 * even on a plane that's otherwise 1:1.  Choose TPZ -		 * for simplicity. +		/* YUV conversion requires that horizontal scaling be enabled, +		 * even on a plane that's otherwise 1:1. Looks like only PPF +		 * works in that case, so let's pick that one.  		 */ -		if (vc4_state->x_scaling[0] == VC4_SCALING_NONE) -			vc4_state->x_scaling[0] = VC4_SCALING_TPZ; -		if (vc4_state->y_scaling[0] == VC4_SCALING_NONE) -			vc4_state->y_scaling[0] = VC4_SCALING_TPZ; +		if (vc4_state->is_unity) +			vc4_state->x_scaling[0] = VC4_SCALING_PPF;  	} else {  		vc4_state->x_scaling[1] = VC4_SCALING_NONE;  		vc4_state->y_scaling[1] = VC4_SCALING_NONE;  	} -	vc4_state->is_unity = (vc4_state->x_scaling[0] == VC4_SCALING_NONE && -			       vc4_state->y_scaling[0] == VC4_SCALING_NONE && -			       vc4_state->x_scaling[1] == VC4_SCALING_NONE && -			       vc4_state->y_scaling[1] == VC4_SCALING_NONE); -  	/* No configuring scaling on the cursor plane, since it gets  	   non-vblank-synced updates, and scaling requires requires  	   LBM changes which have to be vblank-synced. @@ -672,7 +668,10 @@ static int vc4_plane_mode_set(struct drm_plane *plane,  		vc4_dlist_write(vc4_state, SCALER_CSC2_ITR_R_601_5);  	} -	if (!vc4_state->is_unity) { +	if (vc4_state->x_scaling[0] != VC4_SCALING_NONE || +	    vc4_state->x_scaling[1] != VC4_SCALING_NONE || +	    vc4_state->y_scaling[0] != VC4_SCALING_NONE || +	    vc4_state->y_scaling[1] != VC4_SCALING_NONE) {  		/* LBM Base Address. */  		if (vc4_state->y_scaling[0] != VC4_SCALING_NONE ||  		    vc4_state->y_scaling[1] != VC4_SCALING_NONE) { |