From: Joshua Aberback <joshua.aberb...@amd.com>

Add a fast_validate parameter in dc_validate_global_state for future use

Change-Id: If7a7ea618ba85bdddc8ee4419cd01e2fae3fda93
Signed-off-by: Joshua Aberback <joshua.aberb...@amd.com>
Reviewed-by: Tony Cheng <tony.ch...@amd.com>
Acked-by: Bhawanpreet Lakha <Bhawanpreet la...@amd.com>
---
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c       | 2 +-
 drivers/gpu/drm/amd/display/dc/calcs/dcn_calcs.c        | 6 ++++--
 drivers/gpu/drm/amd/display/dc/core/dc_resource.c       | 6 ++++--
 drivers/gpu/drm/amd/display/dc/dc.h                     | 7 ++++++-
 drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c | 3 ++-
 drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c | 3 ++-
 drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c | 3 ++-
 drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.h | 3 ++-
 drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c   | 3 ++-
 drivers/gpu/drm/amd/display/dc/inc/core_types.h         | 3 ++-
 drivers/gpu/drm/amd/display/dc/inc/dcn_calcs.h          | 3 ++-
 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 6aef4a3574db..bb7f6bc80830 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6738,7 +6738,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 4222ffed11ff..72bebd7523b8 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -675,9 +675,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,
-- 
2.17.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to