OSDN Git Service

drm/amd/display: Fail validation if building scaling params fails
authorSung Lee <sung.lee@amd.com>
Wed, 22 Apr 2020 22:07:54 +0000 (18:07 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Tue, 28 Apr 2020 20:18:06 +0000 (16:18 -0400)
[WHY & HOW]
If building scaling parameters fails, validation
should also fail.

Signed-off-by: Sung Lee <sung.lee@amd.com>
Reviewed-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Acked-by: Aurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.c
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_resource.h

index f41fc32..3a8a4c5 100644 (file)
@@ -1936,7 +1936,7 @@ bool dcn20_split_stream_for_odm(
        return true;
 }
 
-void dcn20_split_stream_for_mpc(
+bool dcn20_split_stream_for_mpc(
                struct resource_context *res_ctx,
                const struct resource_pool *pool,
                struct pipe_ctx *primary_pipe,
@@ -1965,8 +1965,11 @@ void dcn20_split_stream_for_mpc(
        secondary_pipe->top_pipe = primary_pipe;
 
        ASSERT(primary_pipe->plane_state);
-       resource_build_scaling_params(primary_pipe);
-       resource_build_scaling_params(secondary_pipe);
+       if (!resource_build_scaling_params(primary_pipe) ||
+                       !resource_build_scaling_params(secondary_pipe))
+               return false;
+
+       return true;
 }
 
 void dcn20_populate_dml_writeback_from_context(
@@ -2796,9 +2799,10 @@ bool dcn20_fast_validate_bw(
                                                goto validate_fail;
                                        dcn20_build_mapped_resource(dc, context, pipe->stream);
                                } else
-                                       dcn20_split_stream_for_mpc(
-                                               &context->res_ctx, dc->res_pool,
-                                               pipe, hsplit_pipe);
+                                       if (!dcn20_split_stream_for_mpc(
+                                                       &context->res_ctx, dc->res_pool,
+                                                       pipe, hsplit_pipe))
+                                               goto validate_fail;
                                pipe_split_from[hsplit_pipe->pipe_idx] = pipe_idx;
                        }
                } else if (hsplit_pipe && hsplit_pipe->plane_state == pipe->plane_state) {
index 9d5bff9..578265c 100644 (file)
@@ -129,7 +129,7 @@ void dcn20_release_dsc(struct resource_context *res_ctx,
                        const struct resource_pool *pool,
                        struct display_stream_compressor **dsc);
 bool dcn20_validate_dsc(struct dc *dc, struct dc_state *new_ctx);
-void dcn20_split_stream_for_mpc(
+bool dcn20_split_stream_for_mpc(
                struct resource_context *res_ctx,
                const struct resource_pool *pool,
                struct pipe_ctx *primary_pipe,