aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3931-drm-amd-display-drop-dc_validate_guaranteed.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3931-drm-amd-display-drop-dc_validate_guaranteed.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3931-drm-amd-display-drop-dc_validate_guaranteed.patch450
1 files changed, 450 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3931-drm-amd-display-drop-dc_validate_guaranteed.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3931-drm-amd-display-drop-dc_validate_guaranteed.patch
new file mode 100644
index 00000000..ded3c121
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3931-drm-amd-display-drop-dc_validate_guaranteed.patch
@@ -0,0 +1,450 @@
+From 72d3a73a2b3b1fc954815f034c40d02ec3914636 Mon Sep 17 00:00:00 2001
+From: Julian Parkin <jparkin@amd.com>
+Date: Tue, 13 Mar 2018 15:53:13 -0400
+Subject: [PATCH 3931/4131] drm/amd/display: drop dc_validate_guaranteed
+
+Block FP16 scaling in validate_resources codepath.
+
+Signed-off-by: Julian Parkin <jparkin@amd.com>
+Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 32 --------------
+ drivers/gpu/drm/amd/display/dc/dc_stream.h | 8 ----
+ .../drm/amd/display/dc/dce100/dce100_resource.c | 33 ---------------
+ .../drm/amd/display/dc/dce110/dce110_resource.c | 33 ---------------
+ .../drm/amd/display/dc/dce112/dce112_resource.c | 33 ---------------
+ .../drm/amd/display/dc/dce112/dce112_resource.h | 5 ---
+ .../drm/amd/display/dc/dce120/dce120_resource.c | 1 -
+ .../gpu/drm/amd/display/dc/dce80/dce80_resource.c | 49 ----------------------
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c | 7 ++++
+ .../gpu/drm/amd/display/dc/dcn10/dcn10_resource.c | 31 --------------
+ drivers/gpu/drm/amd/display/dc/inc/core_types.h | 5 ---
+ drivers/gpu/drm/amd/display/dc/inc/resource.h | 4 --
+ 12 files changed, 7 insertions(+), 234 deletions(-)
+
+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 ba3487e..cae78ee 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+@@ -1599,18 +1599,6 @@ enum dc_status dc_remove_stream_from_ctx(
+ return DC_OK;
+ }
+
+-static void copy_pipe_ctx(
+- const struct pipe_ctx *from_pipe_ctx, struct pipe_ctx *to_pipe_ctx)
+-{
+- struct dc_plane_state *plane_state = to_pipe_ctx->plane_state;
+- struct dc_stream_state *stream = to_pipe_ctx->stream;
+-
+- *to_pipe_ctx = *from_pipe_ctx;
+- to_pipe_ctx->stream = stream;
+- if (plane_state != NULL)
+- to_pipe_ctx->plane_state = plane_state;
+-}
+-
+ static struct dc_stream_state *find_pll_sharable_stream(
+ struct dc_stream_state *stream_needs_pll,
+ struct dc_state *context)
+@@ -1752,26 +1740,6 @@ enum dc_status resource_map_pool_resources(
+ return DC_ERROR_UNEXPECTED;
+ }
+
+-/* first stream in the context is used to populate the rest */
+-void validate_guaranteed_copy_streams(
+- struct dc_state *context,
+- int max_streams)
+-{
+- int i;
+-
+- for (i = 1; i < max_streams; i++) {
+- context->streams[i] = context->streams[0];
+-
+- copy_pipe_ctx(&context->res_ctx.pipe_ctx[0],
+- &context->res_ctx.pipe_ctx[i]);
+- context->res_ctx.pipe_ctx[i].stream =
+- context->res_ctx.pipe_ctx[0].stream;
+-
+- dc_stream_retain(context->streams[i]);
+- context->stream_count++;
+- }
+-}
+-
+ void dc_resource_state_copy_construct_current(
+ const struct dc *dc,
+ struct dc_state *dst_ctx)
+diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h b/drivers/gpu/drm/amd/display/dc/dc_stream.h
+index d017df5..3a7093e 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc_stream.h
++++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h
+@@ -209,14 +209,6 @@ bool dc_add_all_planes_for_stream(
+ enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream);
+
+ /*
+- * This function takes a stream and checks if it is guaranteed to be supported.
+- * Guaranteed means that MAX_COFUNC similar streams are supported.
+- *
+- * After this call:
+- * No hardware is programmed for call. Only validation is done.
+- */
+-
+-/*
+ * Set up streams and links associated to drive sinks
+ * The streams parameter is an absolute set of all active streams.
+ *
+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 3092f76..38ec0d6 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c
+@@ -733,38 +733,6 @@ enum dc_status dce100_add_stream_to_ctx(
+ return result;
+ }
+
+-enum dc_status dce100_validate_guaranteed(
+- struct dc *dc,
+- struct dc_stream_state *dc_stream,
+- struct dc_state *context)
+-{
+- enum dc_status result = DC_ERROR_UNEXPECTED;
+-
+- context->streams[0] = dc_stream;
+- dc_stream_retain(context->streams[0]);
+- context->stream_count++;
+-
+- result = resource_map_pool_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = resource_map_clock_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = build_mapped_resource(dc, context, dc_stream);
+-
+- if (result == DC_OK) {
+- validate_guaranteed_copy_streams(
+- context, dc->caps.max_streams);
+- result = resource_build_scaling_params_for_context(dc, context);
+- }
+-
+- if (result == DC_OK)
+- if (!dce100_validate_bandwidth(dc, context))
+- result = DC_FAIL_BANDWIDTH_VALIDATE;
+-
+- return result;
+-}
+-
+ static void dce100_destroy_resource_pool(struct resource_pool **pool)
+ {
+ struct dce110_resource_pool *dce110_pool = TO_DCE110_RES_POOL(*pool);
+@@ -786,7 +754,6 @@ enum dc_status dce100_validate_plane(const struct dc_plane_state *plane_state, s
+ static const struct resource_funcs dce100_res_pool_funcs = {
+ .destroy = dce100_destroy_resource_pool,
+ .link_enc_create = dce100_link_encoder_create,
+- .validate_guaranteed = dce100_validate_guaranteed,
+ .validate_bandwidth = dce100_validate_bandwidth,
+ .validate_plane = dce100_validate_plane,
+ .add_stream_to_ctx = dce100_add_stream_to_ctx,
+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 b1f14be..ee33786 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce110/dce110_resource.c
+@@ -930,38 +930,6 @@ static enum dc_status dce110_add_stream_to_ctx(
+ return result;
+ }
+
+-static enum dc_status dce110_validate_guaranteed(
+- struct dc *dc,
+- struct dc_stream_state *dc_stream,
+- struct dc_state *context)
+-{
+- enum dc_status result = DC_ERROR_UNEXPECTED;
+-
+- context->streams[0] = dc_stream;
+- dc_stream_retain(context->streams[0]);
+- context->stream_count++;
+-
+- result = resource_map_pool_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = resource_map_clock_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = build_mapped_resource(dc, context, dc_stream);
+-
+- if (result == DC_OK) {
+- validate_guaranteed_copy_streams(
+- context, dc->caps.max_streams);
+- result = resource_build_scaling_params_for_context(dc, context);
+- }
+-
+- if (result == DC_OK)
+- if (!dce110_validate_bandwidth(dc, context))
+- result = DC_FAIL_BANDWIDTH_VALIDATE;
+-
+- return result;
+-}
+-
+ static struct pipe_ctx *dce110_acquire_underlay(
+ struct dc_state *context,
+ const struct resource_pool *pool,
+@@ -1036,7 +1004,6 @@ static void dce110_destroy_resource_pool(struct resource_pool **pool)
+ static const struct resource_funcs dce110_res_pool_funcs = {
+ .destroy = dce110_destroy_resource_pool,
+ .link_enc_create = dce110_link_encoder_create,
+- .validate_guaranteed = dce110_validate_guaranteed,
+ .validate_bandwidth = dce110_validate_bandwidth,
+ .validate_plane = dce110_validate_plane,
+ .acquire_idle_pipe_for_layer = dce110_acquire_underlay,
+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 cd1e3f7..0a47663 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.c
+@@ -867,38 +867,6 @@ enum dc_status dce112_add_stream_to_ctx(
+ return result;
+ }
+
+-enum dc_status dce112_validate_guaranteed(
+- struct dc *dc,
+- struct dc_stream_state *stream,
+- struct dc_state *context)
+-{
+- enum dc_status result = DC_ERROR_UNEXPECTED;
+-
+- context->streams[0] = stream;
+- dc_stream_retain(context->streams[0]);
+- context->stream_count++;
+-
+- result = resource_map_pool_resources(dc, context, stream);
+-
+- if (result == DC_OK)
+- result = resource_map_phy_clock_resources(dc, context, stream);
+-
+- if (result == DC_OK)
+- result = build_mapped_resource(dc, context, stream);
+-
+- if (result == DC_OK) {
+- validate_guaranteed_copy_streams(
+- context, dc->caps.max_streams);
+- result = resource_build_scaling_params_for_context(dc, context);
+- }
+-
+- if (result == DC_OK)
+- if (!dce112_validate_bandwidth(dc, context))
+- result = DC_FAIL_BANDWIDTH_VALIDATE;
+-
+- return result;
+-}
+-
+ enum dc_status dce112_validate_global(
+ struct dc *dc,
+ struct dc_state *context)
+@@ -921,7 +889,6 @@ static void dce112_destroy_resource_pool(struct resource_pool **pool)
+ static const struct resource_funcs dce112_res_pool_funcs = {
+ .destroy = dce112_destroy_resource_pool,
+ .link_enc_create = dce112_link_encoder_create,
+- .validate_guaranteed = dce112_validate_guaranteed,
+ .validate_bandwidth = dce112_validate_bandwidth,
+ .validate_plane = dce100_validate_plane,
+ .add_stream_to_ctx = dce112_add_stream_to_ctx,
+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 d5c19d3..95a4033 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.h
++++ b/drivers/gpu/drm/amd/display/dc/dce112/dce112_resource.h
+@@ -42,11 +42,6 @@ enum dc_status dce112_validate_with_context(
+ struct dc_state *context,
+ struct dc_state *old_context);
+
+-enum dc_status dce112_validate_guaranteed(
+- struct dc *dc,
+- struct dc_stream_state *dc_stream,
+- struct dc_state *context);
+-
+ bool dce112_validate_bandwidth(
+ struct dc *dc,
+ struct dc_state *context);
+diff --git a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
+index 4659a4b..567e6b4 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce120/dce120_resource.c
+@@ -684,7 +684,6 @@ static void dce120_destroy_resource_pool(struct resource_pool **pool)
+ static const struct resource_funcs dce120_res_pool_funcs = {
+ .destroy = dce120_destroy_resource_pool,
+ .link_enc_create = dce120_link_encoder_create,
+- .validate_guaranteed = dce112_validate_guaranteed,
+ .validate_bandwidth = dce112_validate_bandwidth,
+ .validate_plane = dce100_validate_plane,
+ .add_stream_to_ctx = dce112_add_stream_to_ctx
+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 5d854a3..48a0689 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dce80/dce80_resource.c
+@@ -691,23 +691,6 @@ static void destruct(struct dce110_resource_pool *pool)
+ }
+ }
+
+-static enum dc_status build_mapped_resource(
+- const struct dc *dc,
+- struct dc_state *context,
+- struct dc_stream_state *stream)
+-{
+- struct pipe_ctx *pipe_ctx = resource_get_head_pipe_for_stream(&context->res_ctx, stream);
+-
+- if (!pipe_ctx)
+- return DC_ERROR_UNEXPECTED;
+-
+- dce110_resource_build_pipe_hw_param(pipe_ctx);
+-
+- resource_build_info_frame(pipe_ctx);
+-
+- return DC_OK;
+-}
+-
+ bool dce80_validate_bandwidth(
+ struct dc *dc,
+ struct dc_state *context)
+@@ -749,37 +732,6 @@ enum dc_status dce80_validate_global(
+ return DC_OK;
+ }
+
+-enum dc_status dce80_validate_guaranteed(
+- struct dc *dc,
+- struct dc_stream_state *dc_stream,
+- struct dc_state *context)
+-{
+- enum dc_status result = DC_ERROR_UNEXPECTED;
+-
+- context->streams[0] = dc_stream;
+- dc_stream_retain(context->streams[0]);
+- context->stream_count++;
+-
+- result = resource_map_pool_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = resource_map_clock_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = build_mapped_resource(dc, context, dc_stream);
+-
+- if (result == DC_OK) {
+- validate_guaranteed_copy_streams(
+- context, dc->caps.max_streams);
+- result = resource_build_scaling_params_for_context(dc, context);
+- }
+-
+- if (result == DC_OK)
+- result = dce80_validate_bandwidth(dc, context);
+-
+- return result;
+-}
+-
+ static void dce80_destroy_resource_pool(struct resource_pool **pool)
+ {
+ struct dce110_resource_pool *dce110_pool = TO_DCE110_RES_POOL(*pool);
+@@ -792,7 +744,6 @@ static void dce80_destroy_resource_pool(struct resource_pool **pool)
+ static const struct resource_funcs dce80_res_pool_funcs = {
+ .destroy = dce80_destroy_resource_pool,
+ .link_enc_create = dce80_link_encoder_create,
+- .validate_guaranteed = dce80_validate_guaranteed,
+ .validate_bandwidth = dce80_validate_bandwidth,
+ .validate_plane = dce100_validate_plane,
+ .add_stream_to_ctx = dce100_add_stream_to_ctx,
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c
+index 3356125..5f40a73 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_dpp.c
+@@ -121,6 +121,13 @@ bool dpp_get_optimal_number_of_taps(
+ else
+ pixel_width = scl_data->viewport.width;
+
++ /* Some ASICs does not support FP16 scaling, so we reject modes require this*/
++ if (scl_data->viewport.width != scl_data->h_active &&
++ scl_data->viewport.height != scl_data->v_active &&
++ dpp->caps->dscl_data_proc_format == DSCL_DATA_PRCESSING_FIXED_FORMAT &&
++ scl_data->format == PIXEL_FORMAT_FP16)
++ return false;
++
+ /* TODO: add lb check */
+
+ /* No support for programming ratio of 4, drop to 3.99999.. */
+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 02bd664..a3fe343 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_resource.c
+@@ -918,36 +918,6 @@ enum dc_status dcn10_add_stream_to_ctx(
+ return result;
+ }
+
+-enum dc_status dcn10_validate_guaranteed(
+- struct dc *dc,
+- struct dc_stream_state *dc_stream,
+- struct dc_state *context)
+-{
+- enum dc_status result = DC_ERROR_UNEXPECTED;
+-
+- context->streams[0] = dc_stream;
+- dc_stream_retain(context->streams[0]);
+- context->stream_count++;
+-
+- result = resource_map_pool_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = resource_map_phy_clock_resources(dc, context, dc_stream);
+-
+- if (result == DC_OK)
+- result = build_mapped_resource(dc, context, dc_stream);
+-
+- if (result == DC_OK) {
+- validate_guaranteed_copy_streams(
+- context, dc->caps.max_streams);
+- result = resource_build_scaling_params_for_context(dc, context);
+- }
+- if (result == DC_OK && !dcn_validate_bandwidth(dc, context))
+- return DC_FAIL_BANDWIDTH_VALIDATE;
+-
+- return result;
+-}
+-
+ static struct pipe_ctx *dcn10_acquire_idle_pipe_for_layer(
+ struct dc_state *context,
+ const struct resource_pool *pool,
+@@ -1233,7 +1203,6 @@ static struct dc_cap_funcs cap_funcs = {
+ static struct resource_funcs dcn10_res_pool_funcs = {
+ .destroy = dcn10_destroy_resource_pool,
+ .link_enc_create = dcn10_link_encoder_create,
+- .validate_guaranteed = dcn10_validate_guaranteed,
+ .validate_bandwidth = dcn_validate_bandwidth,
+ .acquire_idle_pipe_for_layer = dcn10_acquire_idle_pipe_for_layer,
+ .validate_plane = dcn10_validate_plane,
+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 55f56bf..a94942d 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h
+@@ -95,11 +95,6 @@ struct resource_funcs {
+ struct link_encoder *(*link_enc_create)(
+ const struct encoder_init_data *init);
+
+- enum dc_status (*validate_guaranteed)(
+- struct dc *dc,
+- struct dc_stream_state *stream,
+- struct dc_state *context);
+-
+ bool (*validate_bandwidth)(
+ struct dc *dc,
+ struct dc_state *context);
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/resource.h b/drivers/gpu/drm/amd/display/dc/inc/resource.h
+index 5467332f..640a647 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/resource.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/resource.h
+@@ -139,10 +139,6 @@ bool resource_validate_attach_surfaces(
+ struct dc_state *context,
+ const struct resource_pool *pool);
+
+-void validate_guaranteed_copy_streams(
+- struct dc_state *context,
+- int max_streams);
+-
+ void resource_validate_ctx_update_pointer_after_copy(
+ const struct dc_state *src_ctx,
+ struct dc_state *dst_ctx);
+--
+2.7.4
+