diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0669-drm-amd-display-Move-stream-validations-into-seperat.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/0669-drm-amd-display-Move-stream-validations-into-seperat.patch | 604 |
1 files changed, 604 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0669-drm-amd-display-Move-stream-validations-into-seperat.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0669-drm-amd-display-Move-stream-validations-into-seperat.patch new file mode 100644 index 00000000..ef5b6e4b --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0669-drm-amd-display-Move-stream-validations-into-seperat.patch @@ -0,0 +1,604 @@ +From ac64b2650d78e05a572aa7d43c12c6652b57a2f7 Mon Sep 17 00:00:00 2001 +From: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Date: Fri, 21 Jul 2017 16:34:36 -0400 +Subject: [PATCH 0669/4131] drm/amd/display: Move stream validations into + seperate function. + +Stateless streams validations (not require resource population) +moved into hook to be called directly from DM. + +Call dc_validate_stream be before validate_with_context for +non Linux APIs + +Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky@amd.com> +Reviewed-by: Harry Wentland <Harry.Wentland@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc.c | 24 +++++++++ + drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 61 +++++++++++++++------- + drivers/gpu/drm/amd/display/dc/dc.h | 2 + + .../gpu/drm/amd/display/dc/dce/dce_link_encoder.c | 7 ++- + .../gpu/drm/amd/display/dc/dce/dce_link_encoder.h | 2 +- + .../drm/amd/display/dc/dce100/dce100_resource.c | 24 ++------- + .../drm/amd/display/dc/dce110/dce110_resource.c | 23 ++------ + .../drm/amd/display/dc/dce112/dce112_resource.c | 25 ++------- + .../gpu/drm/amd/display/dc/dce80/dce80_resource.c | 25 ++------- + .../gpu/drm/amd/display/dc/dcn10/dcn10_resource.c | 25 ++------- + .../gpu/drm/amd/display/dc/inc/hw/link_encoder.h | 2 +- + .../amd/display/dc/virtual/virtual_link_encoder.c | 2 +- + 12 files changed, 90 insertions(+), 132 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c +index 7921880..9c2faf8 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c +@@ -664,6 +664,20 @@ static bool is_validation_required( + return false; + } + ++static bool validate_streams ( ++ const struct dc *dc, ++ const struct dc_validation_set set[], ++ int set_count) ++{ ++ int i; ++ ++ for (i = 0; i < set_count; i++) ++ if (!dc_validate_stream(dc, set[i].stream)) ++ return false; ++ ++ return true; ++} ++ + struct validate_context *dc_get_validate_context( + const struct dc *dc, + const struct dc_validation_set set[], +@@ -673,6 +687,7 @@ struct validate_context *dc_get_validate_context( + enum dc_status result = DC_ERROR_UNEXPECTED; + struct validate_context *context; + ++ + context = dm_alloc(sizeof(struct validate_context)); + if (context == NULL) + goto context_alloc_fail; +@@ -711,6 +726,9 @@ bool dc_validate_resources( + enum dc_status result = DC_ERROR_UNEXPECTED; + struct validate_context *context; + ++ if (!validate_streams(dc, set, set_count)) ++ return false; ++ + context = dm_alloc(sizeof(struct validate_context)); + if (context == NULL) + goto context_alloc_fail; +@@ -742,6 +760,9 @@ bool dc_validate_guaranteed( + enum dc_status result = DC_ERROR_UNEXPECTED; + struct validate_context *context; + ++ if (!dc_validate_stream(dc, stream)) ++ return false; ++ + context = dm_alloc(sizeof(struct validate_context)); + if (context == NULL) + goto context_alloc_fail; +@@ -1044,6 +1065,9 @@ bool dc_commit_streams( + + } + ++ if (!validate_streams(dc, set, stream_count)) ++ return false; ++ + context = dm_alloc(sizeof(struct validate_context)); + if (context == NULL) + goto context_alloc_fail; +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 71723fb..32a24e8 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c +@@ -1416,23 +1416,17 @@ static int get_norm_pix_clk(const struct dc_crtc_timing *timing) + return normalized_pix_clk; + } + +-static void calculate_phy_pix_clks(struct validate_context *context) ++static void calculate_phy_pix_clks(struct core_stream *stream) + { +- int i; +- +- for (i = 0; i < context->stream_count; i++) { +- struct core_stream *stream = context->streams[i]; +- +- update_stream_signal(stream); +- +- /* update actual pixel clock on all streams */ +- if (dc_is_hdmi_signal(stream->signal)) +- stream->phy_pix_clk = get_norm_pix_clk( +- &stream->public.timing); +- else +- stream->phy_pix_clk = +- stream->public.timing.pix_clk_khz; +- } ++ update_stream_signal(stream); ++ ++ /* update actual pixel clock on all streams */ ++ if (dc_is_hdmi_signal(stream->signal)) ++ stream->phy_pix_clk = get_norm_pix_clk( ++ &stream->public.timing); ++ else ++ stream->phy_pix_clk = ++ stream->public.timing.pix_clk_khz; + } + + enum dc_status resource_map_pool_resources( +@@ -1443,8 +1437,6 @@ enum dc_status resource_map_pool_resources( + const struct resource_pool *pool = dc->res_pool; + int i, j; + +- calculate_phy_pix_clks(context); +- + for (i = 0; old_context && i < context->stream_count; i++) { + struct core_stream *stream = context->streams[i]; + +@@ -2516,3 +2508,36 @@ void resource_build_bit_depth_reduction_params(const struct core_stream *stream, + + fmt_bit_depth->pixel_encoding = pixel_encoding; + } ++ ++bool dc_validate_stream(const struct dc *dc, const struct dc_stream *stream) ++{ ++ struct core_dc *core_dc = DC_TO_CORE(dc); ++ struct dc_context *dc_ctx = core_dc->ctx; ++ struct core_stream *core_stream = DC_STREAM_TO_CORE(stream); ++ struct core_link *link = core_stream->sink->link; ++ struct timing_generator *tg = core_dc->res_pool->timing_generators[0]; ++ enum dc_status res = DC_OK; ++ ++ calculate_phy_pix_clks(core_stream); ++ ++ if (!tg->funcs->validate_timing(tg, &core_stream->public.timing)) ++ res = DC_FAIL_CONTROLLER_VALIDATE; ++ ++ if (res == DC_OK) ++ if (!link->link_enc->funcs->validate_output_with_stream( ++ link->link_enc, core_stream)) ++ res = DC_FAIL_ENC_VALIDATE; ++ ++ /* TODO: validate audio ASIC caps, encoder */ ++ ++ if (res == DC_OK) ++ res = dc_link_validate_mode_timing(core_stream, ++ link, ++ &core_stream->public.timing); ++ ++ if (res != DC_OK) ++ DC_ERROR("Failed validation for stream %p, err:%d, !\n", ++ stream, res); ++ ++ return res == DC_OK; ++} +diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h +index 5523bb6..f250e87 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc.h ++++ b/drivers/gpu/drm/amd/display/dc/dc.h +@@ -559,6 +559,8 @@ struct dc_validation_set { + uint8_t surface_count; + }; + ++bool dc_validate_stream(const struct dc *dc, const struct dc_stream *stream); ++ + /* + * This function takes a set of resources and checks that they are cofunctional. + * +diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c +index 318673d..aff0a44 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c ++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c +@@ -1009,19 +1009,18 @@ bool dce110_link_encoder_construct( + + bool dce110_link_encoder_validate_output_with_stream( + struct link_encoder *enc, +- struct pipe_ctx *pipe_ctx) ++ const struct core_stream *stream) + { +- struct core_stream *stream = pipe_ctx->stream; + struct dce110_link_encoder *enc110 = TO_DCE110_LINK_ENC(enc); + bool is_valid; + +- switch (pipe_ctx->stream->signal) { ++ switch (stream->signal) { + case SIGNAL_TYPE_DVI_SINGLE_LINK: + case SIGNAL_TYPE_DVI_DUAL_LINK: + is_valid = dce110_link_encoder_validate_dvi_output( + enc110, + stream->sink->link->connector_signal, +- pipe_ctx->stream->signal, ++ stream->signal, + &stream->public.timing); + break; + case SIGNAL_TYPE_HDMI_TYPE_A: +diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h +index fd6ba7e..ded6c61 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h ++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.h +@@ -199,7 +199,7 @@ bool dce110_link_encoder_validate_wireless_output( + + bool dce110_link_encoder_validate_output_with_stream( + struct link_encoder *enc, +- struct pipe_ctx *pipe_ctx); ++ const struct core_stream *stream); + + /****************** HW programming ************************/ + +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 6938158..3d25a90 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +@@ -651,7 +651,7 @@ static void destruct(struct dce110_resource_pool *pool) + dal_irq_service_destroy(&pool->base.irqs); + } + +-static enum dc_status validate_mapped_resource( ++static enum dc_status build_mapped_resource( + const struct core_dc *dc, + struct validate_context *context, + struct validate_context *old_context) +@@ -661,7 +661,6 @@ static enum dc_status validate_mapped_resource( + + for (i = 0; i < context->stream_count; i++) { + struct core_stream *stream = context->streams[i]; +- struct dc_link *link = stream->sink->link; + + if (old_context && resource_is_stream_unchanged(old_context, stream)) + continue; +@@ -673,28 +672,11 @@ static enum dc_status validate_mapped_resource( + if (context->res_ctx.pipe_ctx[j].stream != stream) + continue; + +- if (!pipe_ctx->tg->funcs->validate_timing( +- pipe_ctx->tg, &stream->public.timing)) +- return DC_FAIL_CONTROLLER_VALIDATE; +- + status = dce110_resource_build_pipe_hw_param(pipe_ctx); + + if (status != DC_OK) + return status; + +- if (!link->link_enc->funcs->validate_output_with_stream( +- link->link_enc, +- pipe_ctx)) +- return DC_FAIL_ENC_VALIDATE; +- +- /* TODO: validate audio ASIC caps, encoder */ +- status = dc_link_validate_mode_timing(stream, +- link, +- &stream->public.timing); +- +- if (status != DC_OK) +- return status; +- + resource_build_info_frame(pipe_ctx); + + /* do not need to validate non root pipes */ +@@ -769,7 +751,7 @@ enum dc_status dce100_validate_with_context( + } + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, old_context); ++ result = build_mapped_resource(dc, context, old_context); + + if (result == DC_OK) + result = resource_build_scaling_params_for_context(dc, context); +@@ -798,7 +780,7 @@ enum dc_status dce100_validate_guaranteed( + result = resource_map_clock_resources(dc, context, NULL); + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, NULL); ++ result = build_mapped_resource(dc, context, NULL); + + if (result == DC_OK) { + validate_guaranteed_copy_streams( +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 015306a..c773351 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c +@@ -771,7 +771,7 @@ static bool is_surface_pixel_format_supported(struct pipe_ctx *pipe_ctx, unsigne + return true; + } + +-static enum dc_status validate_mapped_resource( ++static enum dc_status build_mapped_resource( + const struct core_dc *dc, + struct validate_context *context, + struct validate_context *old_context) +@@ -781,7 +781,6 @@ static enum dc_status validate_mapped_resource( + + for (i = 0; i < context->stream_count; i++) { + struct core_stream *stream = context->streams[i]; +- struct dc_link *link = stream->sink->link; + + if (old_context && resource_is_stream_unchanged(old_context, stream)) + continue; +@@ -797,29 +796,13 @@ static enum dc_status validate_mapped_resource( + dc->res_pool->underlay_pipe_index)) + return DC_SURFACE_PIXEL_FORMAT_UNSUPPORTED; + +- if (!pipe_ctx->tg->funcs->validate_timing( +- pipe_ctx->tg, &stream->public.timing)) +- return DC_FAIL_CONTROLLER_VALIDATE; +- + status = dce110_resource_build_pipe_hw_param(pipe_ctx); + + if (status != DC_OK) + return status; + +- if (!link->link_enc->funcs->validate_output_with_stream( +- link->link_enc, +- pipe_ctx)) +- return DC_FAIL_ENC_VALIDATE; +- + /* TODO: validate audio ASIC caps, encoder */ + +- status = dc_link_validate_mode_timing(stream, +- link, +- &stream->public.timing); +- +- if (status != DC_OK) +- return status; +- + resource_build_info_frame(pipe_ctx); + + /* do not need to validate non root pipes */ +@@ -976,7 +959,7 @@ enum dc_status dce110_validate_with_context( + } + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, old_context); ++ result = build_mapped_resource(dc, context, old_context); + + if (result == DC_OK) + result = resource_build_scaling_params_for_context(dc, context); +@@ -1005,7 +988,7 @@ enum dc_status dce110_validate_guaranteed( + result = resource_map_clock_resources(dc, context, NULL); + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, NULL); ++ result = build_mapped_resource(dc, context, NULL); + + if (result == DC_OK) { + validate_guaranteed_copy_streams( +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 ca1e13e..19cd999 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c +@@ -720,7 +720,7 @@ static struct clock_source *find_matching_pll( + return 0; + } + +-static enum dc_status validate_mapped_resource( ++static enum dc_status build_mapped_resource( + const struct core_dc *dc, + struct validate_context *context, + struct validate_context *old_context) +@@ -730,7 +730,6 @@ static enum dc_status validate_mapped_resource( + + for (i = 0; i < context->stream_count; i++) { + struct core_stream *stream = context->streams[i]; +- struct dc_link *link = stream->sink->link; + + if (old_context && resource_is_stream_unchanged(old_context, stream)) + continue; +@@ -742,29 +741,11 @@ static enum dc_status validate_mapped_resource( + if (context->res_ctx.pipe_ctx[j].stream != stream) + continue; + +- if (!pipe_ctx->tg->funcs->validate_timing( +- pipe_ctx->tg, &stream->public.timing)) +- return DC_FAIL_CONTROLLER_VALIDATE; +- + status = dce110_resource_build_pipe_hw_param(pipe_ctx); + + if (status != DC_OK) + return status; + +- if (!link->link_enc->funcs->validate_output_with_stream( +- link->link_enc, +- pipe_ctx)) +- return DC_FAIL_ENC_VALIDATE; +- +- /* TODO: validate audio ASIC caps, encoder */ +- +- status = dc_link_validate_mode_timing(stream, +- link, +- &stream->public.timing); +- +- if (status != DC_OK) +- return status; +- + resource_build_info_frame(pipe_ctx); + + /* do not need to validate non root pipes */ +@@ -952,7 +933,7 @@ enum dc_status dce112_validate_with_context( + } + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, old_context); ++ result = build_mapped_resource(dc, context, old_context); + + if (result == DC_OK) + result = resource_build_scaling_params_for_context(dc, context); +@@ -981,7 +962,7 @@ enum dc_status dce112_validate_guaranteed( + result = resource_map_phy_clock_resources(dc, context, NULL); + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, NULL); ++ result = build_mapped_resource(dc, context, NULL); + + if (result == DC_OK) { + validate_guaranteed_copy_streams( +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 b2319db..0123006 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c +@@ -667,7 +667,7 @@ static void destruct(struct dce110_resource_pool *pool) + } + } + +-static enum dc_status validate_mapped_resource( ++static enum dc_status build_mapped_resource( + const struct core_dc *dc, + struct validate_context *context, + struct validate_context *old_context) +@@ -677,7 +677,6 @@ static enum dc_status validate_mapped_resource( + + for (i = 0; i < context->stream_count; i++) { + struct core_stream *stream = context->streams[i]; +- struct dc_link *link = stream->sink->link; + + if (old_context && resource_is_stream_unchanged(old_context, stream)) + continue; +@@ -689,29 +688,11 @@ static enum dc_status validate_mapped_resource( + if (context->res_ctx.pipe_ctx[j].stream != stream) + continue; + +- if (!pipe_ctx->tg->funcs->validate_timing( +- pipe_ctx->tg, &stream->public.timing)) +- return DC_FAIL_CONTROLLER_VALIDATE; +- + status = dce110_resource_build_pipe_hw_param(pipe_ctx); + + if (status != DC_OK) + return status; + +- if (!link->link_enc->funcs->validate_output_with_stream( +- link->link_enc, +- pipe_ctx)) +- return DC_FAIL_ENC_VALIDATE; +- +- /* TODO: validate audio ASIC caps, encoder */ +- +- status = dc_link_validate_mode_timing(stream, +- link, +- &stream->public.timing); +- +- if (status != DC_OK) +- return status; +- + resource_build_info_frame(pipe_ctx); + + /* do not need to validate non root pipes */ +@@ -786,7 +767,7 @@ enum dc_status dce80_validate_with_context( + } + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, old_context); ++ result = build_mapped_resource(dc, context, old_context); + + if (result == DC_OK) + result = resource_build_scaling_params_for_context(dc, context); +@@ -814,7 +795,7 @@ enum dc_status dce80_validate_guaranteed( + result = resource_map_clock_resources(dc, context, NULL); + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, NULL); ++ result = build_mapped_resource(dc, context, NULL); + + if (result == DC_OK) { + validate_guaranteed_copy_streams( +diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +index 0110a43..b901ef9 100644 +--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c ++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c +@@ -835,7 +835,7 @@ static enum dc_status build_pipe_hw_param(struct pipe_ctx *pipe_ctx) + return DC_OK; + } + +-static enum dc_status validate_mapped_resource( ++static enum dc_status build_mapped_resource( + const struct core_dc *dc, + struct validate_context *context, + struct validate_context *old_context) +@@ -845,7 +845,6 @@ static enum dc_status validate_mapped_resource( + + for (i = 0; i < context->stream_count; i++) { + struct core_stream *stream = context->streams[i]; +- struct dc_link *link = stream->sink->link; + + if (old_context && resource_is_stream_unchanged(old_context, stream)) { + if (stream != NULL && old_context->streams[i] != NULL) { +@@ -870,29 +869,11 @@ static enum dc_status validate_mapped_resource( + if (context->res_ctx.pipe_ctx[j].stream != stream) + continue; + +- +- if (!pipe_ctx->tg->funcs->validate_timing( +- pipe_ctx->tg, &stream->public.timing)) +- return DC_FAIL_CONTROLLER_VALIDATE; +- + status = build_pipe_hw_param(pipe_ctx); + + if (status != DC_OK) + return status; + +- if (!link->link_enc->funcs->validate_output_with_stream( +- link->link_enc, pipe_ctx)) +- return DC_FAIL_ENC_VALIDATE; +- +- /* TODO: validate audio ASIC caps, encoder */ +- +- status = dc_link_validate_mode_timing( +- stream, link, &stream->public.timing); +- +- if (status != DC_OK) +- return status; +- +- + /* do not need to validate non root pipes */ + break; + } +@@ -928,7 +909,7 @@ enum dc_status dcn10_validate_with_context( + if (result != DC_OK) + return result; + +- result = validate_mapped_resource(dc, context, old_context); ++ result = build_mapped_resource(dc, context, old_context); + if (result != DC_OK) + return result; + +@@ -963,7 +944,7 @@ enum dc_status dcn10_validate_guaranteed( + result = resource_map_phy_clock_resources(dc, context, NULL); + + if (result == DC_OK) +- result = validate_mapped_resource(dc, context, NULL); ++ result = build_mapped_resource(dc, context, NULL); + + if (result == DC_OK) { + validate_guaranteed_copy_streams( +diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h b/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h +index d330d38..0ee7387 100644 +--- a/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h ++++ b/drivers/gpu/drm/amd/display/dc/inc/hw/link_encoder.h +@@ -94,7 +94,7 @@ struct link_encoder { + + struct link_encoder_funcs { + bool (*validate_output_with_stream)( +- struct link_encoder *enc, struct pipe_ctx *pipe_ctx); ++ struct link_encoder *enc, const struct core_stream *stream); + void (*hw_init)(struct link_encoder *enc); + void (*setup)(struct link_encoder *enc, + enum signal_type signal); +diff --git a/drivers/gpu/drm/amd/display/dc/virtual/virtual_link_encoder.c b/drivers/gpu/drm/amd/display/dc/virtual/virtual_link_encoder.c +index 12df499..d312874 100644 +--- a/drivers/gpu/drm/amd/display/dc/virtual/virtual_link_encoder.c ++++ b/drivers/gpu/drm/amd/display/dc/virtual/virtual_link_encoder.c +@@ -30,7 +30,7 @@ + + static bool virtual_link_encoder_validate_output_with_stream( + struct link_encoder *enc, +- struct pipe_ctx *pipe_ctx) { return true; } ++ const struct core_stream *stream) { return true; } + + static void virtual_link_encoder_hw_init(struct link_encoder *enc) {} + +-- +2.7.4 + |