diff options
| author | Joshua Aberback <joshua.aberback@amd.com> | 2019-04-01 22:18:29 +0300 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2019-04-15 08:22:11 +0300 | 
| commit | afcd526b1ba9dbc5707f9bd8d2d032ae62e337dc (patch) | |
| tree | fed373baa9e3bb1521d2a22d1621b4dd4c7eaeab | |
| parent | c14a005c1621c3b995ac9df8bf93bb4de8a3e446 (diff) | |
| download | linux-afcd526b1ba9dbc5707f9bd8d2d032ae62e337dc.tar.xz | |
drm/amd/display: Add fast_validate parameter
Add a fast_validate parameter in dc_validate_global_state for future use
Signed-off-by: Joshua Aberback <joshua.aberback@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet Lakha@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
11 files changed, 29 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 42e643c9b6bc..054681113d71 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6647,7 +6647,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,  		if (ret)  			goto fail; -		if (dc_validate_global_state(dc, dm_state->context) != DC_OK) { +		if (dc_validate_global_state(dc, dm_state->context, false) != DC_OK) {  			ret = -EINVAL;  			goto fail;  		} diff --git a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c index 8843361e842d..d7aece82e4fe 100644 --- a/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c +++ b/drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c @@ -701,7 +701,8 @@ static void hack_bounding_box(struct dcn_bw_internal_vars *v,  bool dcn_validate_bandwidth(  		struct dc *dc, -		struct dc_state *context) +		struct dc_state *context, +		bool fast_validate)  {  	const struct resource_pool *pool = dc->res_pool;  	struct dcn_bw_internal_vars *v = &context->dcn_bw_vars; @@ -1013,8 +1014,9 @@ bool dcn_validate_bandwidth(  		mode_support_and_system_configuration(v);  	} -	if (v->voltage_level != 5) { +	if (v->voltage_level != number_of_states_plus_one && !fast_validate) {  		float bw_consumed = v->total_bandwidth_consumed_gbyte_per_second; +  		if (bw_consumed < v->fabric_and_dram_bandwidth_vmin0p65)  			bw_consumed = v->fabric_and_dram_bandwidth_vmin0p65;  		else if (bw_consumed < v->fabric_and_dram_bandwidth_vmid0p72) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c index 3830e6ce1355..eac7186e4f08 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c @@ -2067,12 +2067,14 @@ void dc_resource_state_construct(   * Checks HW resource availability and bandwidth requirement.   * @dc: dc struct for this driver   * @new_ctx: state to be validated + * @fast_validate: set to true if only yes/no to support matters   *   * Return: DC_OK if the result can be programmed.  Otherwise, an error code.   */  enum dc_status dc_validate_global_state(  		struct dc *dc, -		struct dc_state *new_ctx) +		struct dc_state *new_ctx, +		bool fast_validate)  {  	enum dc_status result = DC_ERROR_UNEXPECTED;  	int i, j; @@ -2127,7 +2129,7 @@ enum dc_status dc_validate_global_state(  	result = resource_build_scaling_params_for_context(dc, new_ctx);  	if (result == DC_OK) -		if (!dc->res_pool->funcs->validate_bandwidth(dc, new_ctx)) +		if (!dc->res_pool->funcs->validate_bandwidth(dc, new_ctx, fast_validate))  			result = DC_FAIL_BANDWIDTH_VALIDATE;  	return result; diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h index c0b1defde65e..978ce365b4a7 100644 --- a/drivers/gpu/drm/amd/display/dc/dc.h +++ b/drivers/gpu/drm/amd/display/dc/dc.h @@ -658,9 +658,14 @@ enum dc_status dc_validate_plane(struct dc *dc, const struct dc_plane_state *pla  void get_clock_requirements_for_state(struct dc_state *state, struct AsicStateEx *info); +/* + * fast_validate: we return after determining if we can support the new state, + * but before we populate the programming info + */  enum dc_status dc_validate_global_state(  		struct dc *dc, -		struct dc_state *new_ctx); +		struct dc_state *new_ctx, +		bool fast_validate);  void dc_resource_state_construct( diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c index f38ea29b3377..e938bf9986d3 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c @@ -778,7 +778,8 @@ static enum dc_status build_mapped_resource(  bool dce100_validate_bandwidth(  	struct dc  *dc, -	struct dc_state *context) +	struct dc_state *context, +	bool fast_validate)  {  	int i;  	bool at_least_one_pipe = false; diff --git a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c index d5ebc4538711..dcd04e9ea76b 100644 --- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c @@ -903,7 +903,8 @@ static enum dc_status build_mapped_resource(  static bool dce110_validate_bandwidth(  	struct dc *dc, -	struct dc_state *context) +	struct dc_state *context, +	bool fast_validate)  {  	bool result = false; diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c index afbc82b87982..a480b15f6885 100644 --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c @@ -826,7 +826,8 @@ static enum dc_status build_mapped_resource(  bool dce112_validate_bandwidth(  	struct dc *dc, -	struct dc_state *context) +	struct dc_state *context, +	bool fast_validate)  {  	bool result = false; diff --git a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.h b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.h index 95a403396219..1f57ebc6f9b4 100644 --- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.h +++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.h @@ -44,7 +44,8 @@ enum dc_status dce112_validate_with_context(  bool dce112_validate_bandwidth(  	struct dc *dc, -	struct dc_state *context); +	struct dc_state *context, +	bool fast_validate);  enum dc_status dce112_add_stream_to_ctx(  		struct dc *dc, diff --git a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c index 9569f3af12a3..27d0cc394963 100644 --- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c @@ -812,7 +812,8 @@ static void destruct(struct dce110_resource_pool *pool)  bool dce80_validate_bandwidth(  	struct dc *dc, -	struct dc_state *context) +	struct dc_state *context, +	bool fast_validate)  {  	int i;  	bool at_least_one_pipe = false; diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_types.h b/drivers/gpu/drm/amd/display/dc/inc/core_types.h index 827541e34ee2..88a82a23d259 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h +++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h @@ -97,7 +97,8 @@ struct resource_funcs {  			const struct encoder_init_data *init);  	bool (*validate_bandwidth)(  					struct dc *dc, -					struct dc_state *context); +					struct dc_state *context, +					bool fast_validate);  	enum dc_status (*validate_global)(  		struct dc *dc, diff --git a/drivers/gpu/drm/amd/display/dc/inc/dcn_calcs.h b/drivers/gpu/drm/amd/display/dc/inc/dcn_calcs.h index 86ec3f69c765..263c09630c06 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/dcn_calcs.h +++ b/drivers/gpu/drm/amd/display/dc/inc/dcn_calcs.h @@ -621,7 +621,8 @@ extern const struct dcn_ip_params dcn10_ip_defaults;  bool dcn_validate_bandwidth(  		struct dc *dc, -		struct dc_state *context); +		struct dc_state *context, +		bool fast_validate);  unsigned int dcn_find_dcfclk_suits_all(  	const struct dc *dc,  | 
