[Intel-gfx] [PATCH 4/5] Add support for forcing 6 bpc on DP pipes.

Jim Bride jim.bride at linux.intel.com
Mon May 2 17:52:43 UTC 2016


On Fri, Apr 29, 2016 at 06:28:14PM -0700, Manasi Navare wrote:
> From: Jim Bride <jim.bride at linux.intel.com>
> 
> For DP compliance we need to be able to control the output color
> type for the pipe associated with the DP port. To do this we rely
> on the intel_dp_test_force_bpc debugfs file and the associated value
> stored in struct intel_dp. If the debugfs file has a non-zero value
> and we're on a display port connector, then we use the value from
> debugfs to calculate the bpp for the pipe.  For cases where we are
> not on DP or there has not been an overridden value then we behave
> as normal.
> 
> Signed-off-by: Jim Bride <jim.bride at linux.intel.com>
> Signed-off-by: Manasi Navare <manasi.d.navare at intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 32 ++++++++++++++++++++++++++++++--
>  drivers/gpu/drm/i915/intel_drv.h     |  1 +
>  2 files changed, 31 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 5ffccf6..1618d36 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -12102,11 +12102,39 @@ compute_baseline_pipe_bpp(struct intel_crtc *crtc,
>  
>  	/* Clamp display bpp to EDID value */
>  	for_each_connector_in_state(state, connector, connector_state, i) {
> +		int type = 0;
> +
> +		if (connector_state->best_encoder) {
> +			struct intel_encoder *ienc;
> +
> +			ienc = to_intel_encoder(connector_state->best_encoder);
> +			type = ienc->type;
> +		}
> +
>  		if (connector_state->crtc != &crtc->base)
>  			continue;
>  
> -		connected_sink_compute_bpp(to_intel_connector(connector),
> -					   pipe_config);
> +		/* For DP compliance we need to ensure that we can override
> +		 * the computed bpp for the pipe.
> +		 */
> +		if (type == INTEL_OUTPUT_DISPLAYPORT) {
> +			struct intel_dp *intel_dp =
> +				enc_to_intel_dp(connector_state->best_encoder);
> +
> +			if (intel_dp &&
> +			    (intel_dp->compliance_force_bpc != 0)) {
> +				pipe_config->pipe_bpp =
> +					intel_dp->compliance_force_bpc*3;
> +				DRM_DEBUG_KMS("JMB Setting pipe_bpp to %d\n",
> +					      pipe_config->pipe_bpp);

I missed this before, but you should probably take the 'JMB' out of the debug
message above.

Jim

> +			} else {
> +				connected_sink_compute_bpp(to_intel_connector(connector),
> +						   pipe_config);
> +			}
> +		} else {
> +			connected_sink_compute_bpp(to_intel_connector(connector),
> +						   pipe_config);
> +		}
>  	}
>  
>  	return bpp;
> diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
> index e23eed7..10eaff8 100644
> --- a/drivers/gpu/drm/i915/intel_drv.h
> +++ b/drivers/gpu/drm/i915/intel_drv.h
> @@ -865,6 +865,7 @@ struct intel_dp {
>  	unsigned long compliance_test_type;
>  	unsigned long compliance_test_data;
>  	bool compliance_test_active;
> +	unsigned long compliance_force_bpc; /* 0 for default or bpc to use */
>  };
>  
>  struct intel_digital_port {
> -- 
> 1.9.1


More information about the Intel-gfx mailing list