Commit afcd526b authored by Joshua Aberback's avatar Joshua Aberback Committed by Alex Deucher

drm/amd/display: Add fast_validate parameter

Add a fast_validate parameter in dc_validate_global_state for future use
Signed-off-by: default avatarJoshua Aberback <joshua.aberback@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet Lakha@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent c14a005c
...@@ -6647,7 +6647,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, ...@@ -6647,7 +6647,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
if (ret) if (ret)
goto fail; 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; ret = -EINVAL;
goto fail; goto fail;
} }
......
...@@ -701,7 +701,8 @@ static void hack_bounding_box(struct dcn_bw_internal_vars *v, ...@@ -701,7 +701,8 @@ static void hack_bounding_box(struct dcn_bw_internal_vars *v,
bool dcn_validate_bandwidth( bool dcn_validate_bandwidth(
struct dc *dc, struct dc *dc,
struct dc_state *context) struct dc_state *context,
bool fast_validate)
{ {
const struct resource_pool *pool = dc->res_pool; const struct resource_pool *pool = dc->res_pool;
struct dcn_bw_internal_vars *v = &context->dcn_bw_vars; struct dcn_bw_internal_vars *v = &context->dcn_bw_vars;
...@@ -1013,8 +1014,9 @@ bool dcn_validate_bandwidth( ...@@ -1013,8 +1014,9 @@ bool dcn_validate_bandwidth(
mode_support_and_system_configuration(v); 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; float bw_consumed = v->total_bandwidth_consumed_gbyte_per_second;
if (bw_consumed < v->fabric_and_dram_bandwidth_vmin0p65) if (bw_consumed < v->fabric_and_dram_bandwidth_vmin0p65)
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) else if (bw_consumed < v->fabric_and_dram_bandwidth_vmid0p72)
......
...@@ -2067,12 +2067,14 @@ void dc_resource_state_construct( ...@@ -2067,12 +2067,14 @@ void dc_resource_state_construct(
* Checks HW resource availability and bandwidth requirement. * Checks HW resource availability and bandwidth requirement.
* @dc: dc struct for this driver * @dc: dc struct for this driver
* @new_ctx: state to be validated * @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. * Return: DC_OK if the result can be programmed. Otherwise, an error code.
*/ */
enum dc_status dc_validate_global_state( enum dc_status dc_validate_global_state(
struct dc *dc, struct dc *dc,
struct dc_state *new_ctx) struct dc_state *new_ctx,
bool fast_validate)
{ {
enum dc_status result = DC_ERROR_UNEXPECTED; enum dc_status result = DC_ERROR_UNEXPECTED;
int i, j; int i, j;
...@@ -2127,7 +2129,7 @@ enum dc_status dc_validate_global_state( ...@@ -2127,7 +2129,7 @@ enum dc_status dc_validate_global_state(
result = resource_build_scaling_params_for_context(dc, new_ctx); result = resource_build_scaling_params_for_context(dc, new_ctx);
if (result == DC_OK) 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; result = DC_FAIL_BANDWIDTH_VALIDATE;
return result; return result;
......
...@@ -658,9 +658,14 @@ enum dc_status dc_validate_plane(struct dc *dc, const struct dc_plane_state *pla ...@@ -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); 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( enum dc_status dc_validate_global_state(
struct dc *dc, struct dc *dc,
struct dc_state *new_ctx); struct dc_state *new_ctx,
bool fast_validate);
void dc_resource_state_construct( void dc_resource_state_construct(
......
...@@ -778,7 +778,8 @@ static enum dc_status build_mapped_resource( ...@@ -778,7 +778,8 @@ static enum dc_status build_mapped_resource(
bool dce100_validate_bandwidth( bool dce100_validate_bandwidth(
struct dc *dc, struct dc *dc,
struct dc_state *context) struct dc_state *context,
bool fast_validate)
{ {
int i; int i;
bool at_least_one_pipe = false; bool at_least_one_pipe = false;
......
...@@ -903,7 +903,8 @@ static enum dc_status build_mapped_resource( ...@@ -903,7 +903,8 @@ static enum dc_status build_mapped_resource(
static bool dce110_validate_bandwidth( static bool dce110_validate_bandwidth(
struct dc *dc, struct dc *dc,
struct dc_state *context) struct dc_state *context,
bool fast_validate)
{ {
bool result = false; bool result = false;
......
...@@ -826,7 +826,8 @@ static enum dc_status build_mapped_resource( ...@@ -826,7 +826,8 @@ static enum dc_status build_mapped_resource(
bool dce112_validate_bandwidth( bool dce112_validate_bandwidth(
struct dc *dc, struct dc *dc,
struct dc_state *context) struct dc_state *context,
bool fast_validate)
{ {
bool result = false; bool result = false;
......
...@@ -44,7 +44,8 @@ enum dc_status dce112_validate_with_context( ...@@ -44,7 +44,8 @@ enum dc_status dce112_validate_with_context(
bool dce112_validate_bandwidth( bool dce112_validate_bandwidth(
struct dc *dc, struct dc *dc,
struct dc_state *context); struct dc_state *context,
bool fast_validate);
enum dc_status dce112_add_stream_to_ctx( enum dc_status dce112_add_stream_to_ctx(
struct dc *dc, struct dc *dc,
......
...@@ -812,7 +812,8 @@ static void destruct(struct dce110_resource_pool *pool) ...@@ -812,7 +812,8 @@ static void destruct(struct dce110_resource_pool *pool)
bool dce80_validate_bandwidth( bool dce80_validate_bandwidth(
struct dc *dc, struct dc *dc,
struct dc_state *context) struct dc_state *context,
bool fast_validate)
{ {
int i; int i;
bool at_least_one_pipe = false; bool at_least_one_pipe = false;
......
...@@ -97,7 +97,8 @@ struct resource_funcs { ...@@ -97,7 +97,8 @@ struct resource_funcs {
const struct encoder_init_data *init); const struct encoder_init_data *init);
bool (*validate_bandwidth)( bool (*validate_bandwidth)(
struct dc *dc, struct dc *dc,
struct dc_state *context); struct dc_state *context,
bool fast_validate);
enum dc_status (*validate_global)( enum dc_status (*validate_global)(
struct dc *dc, struct dc *dc,
......
...@@ -621,7 +621,8 @@ extern const struct dcn_ip_params dcn10_ip_defaults; ...@@ -621,7 +621,8 @@ extern const struct dcn_ip_params dcn10_ip_defaults;
bool dcn_validate_bandwidth( bool dcn_validate_bandwidth(
struct dc *dc, struct dc *dc,
struct dc_state *context); struct dc_state *context,
bool fast_validate);
unsigned int dcn_find_dcfclk_suits_all( unsigned int dcn_find_dcfclk_suits_all(
const struct dc *dc, const struct dc *dc,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment