aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1967-drm-amd-display-add-null-checks-and-set-update-flags.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1967-drm-amd-display-add-null-checks-and-set-update-flags.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1967-drm-amd-display-add-null-checks-and-set-update-flags.patch189
1 files changed, 189 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1967-drm-amd-display-add-null-checks-and-set-update-flags.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1967-drm-amd-display-add-null-checks-and-set-update-flags.patch
new file mode 100644
index 00000000..75d20804
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/1967-drm-amd-display-add-null-checks-and-set-update-flags.patch
@@ -0,0 +1,189 @@
+From 843381a18f3004706ab25183e5155fa2ae491bf4 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Mon, 8 Apr 2019 14:56:29 -0400
+Subject: [PATCH 1967/2940] drm/amd/display: add null checks and set update
+ flags
+
+* add plane state null checks
+* add and set update surface flags
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Eric Bernstein <Eric.Bernstein@amd.com>
+Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 6 ++++++
+ .../gpu/drm/amd/display/dc/core/dc_resource.c | 1 -
+ drivers/gpu/drm/amd/display/dc/dc.h | 2 ++
+ .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 13 +++++-------
+ .../amd/display/dc/dcn10/dcn10_hw_sequencer.h | 2 ++
+ .../gpu/drm/amd/display/dc/inc/core_types.h | 20 +++++++++++++++++++
+ 6 files changed, 35 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index fd57fd1faccb..6d65526bce64 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -1370,6 +1370,9 @@ static enum surface_update_type get_plane_info_update_type(const struct dc_surfa
+ if (u->plane_info->global_alpha_value != u->surface->global_alpha_value)
+ update_flags->bits.global_alpha_change = 1;
+
++ if (u->plane_info->sdr_white_level != u->surface->sdr_white_level)
++ update_flags->bits.sdr_white_level = 1;
++
+ if (u->plane_info->dcc.enable != u->surface->dcc.enable
+ || u->plane_info->dcc.grph.independent_64b_blks != u->surface->dcc.grph.independent_64b_blks
+ || u->plane_info->dcc.grph.meta_pitch != u->surface->dcc.grph.meta_pitch)
+@@ -1473,6 +1476,9 @@ static enum surface_update_type det_surface_update(const struct dc *dc,
+
+ update_flags->raw = 0; // Reset all flags
+
++ if (u->flip_addr)
++ update_flags->bits.addr_update = 1;
++
+ if (!is_surface_in_context(context, u->surface)) {
+ update_flags->bits.new_plane = 1;
+ return UPDATE_TYPE_FULL;
+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 58ce7a6b914c..36346f6ceb9a 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+@@ -2501,7 +2501,6 @@ void dc_resource_state_copy_construct(
+
+ if (cur_pipe->bottom_pipe)
+ cur_pipe->bottom_pipe = &dst_ctx->res_ctx.pipe_ctx[cur_pipe->bottom_pipe->pipe_idx];
+-
+ }
+
+ for (i = 0; i < dst_ctx->stream_count; i++) {
+diff --git a/drivers/gpu/drm/amd/display/dc/dc.h b/drivers/gpu/drm/amd/display/dc/dc.h
+index 35f50431892f..8795e29ea888 100644
+--- a/drivers/gpu/drm/amd/display/dc/dc.h
++++ b/drivers/gpu/drm/amd/display/dc/dc.h
+@@ -555,12 +555,14 @@ struct dc_plane_status {
+ union surface_update_flags {
+
+ struct {
++ uint32_t addr_update:1;
+ /* Medium updates */
+ uint32_t dcc_change:1;
+ uint32_t color_space_change:1;
+ uint32_t horizontal_mirror_change:1;
+ uint32_t per_pixel_alpha_change:1;
+ uint32_t global_alpha_change:1;
++ uint32_t sdr_white_level:1;
+ uint32_t rotation_change:1;
+ uint32_t swizzle_change:1;
+ uint32_t scaling_change:1;
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+index 2aa6da562d37..58d3fd742eab 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
+@@ -1754,7 +1754,7 @@ static void dcn10_program_output_csc(struct dc *dc,
+
+ bool is_lower_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
+ {
+- if (pipe_ctx->plane_state->visible)
++ if (pipe_ctx->plane_state && pipe_ctx->plane_state->visible)
+ return true;
+ if (pipe_ctx->bottom_pipe && is_lower_pipe_tree_visible(pipe_ctx->bottom_pipe))
+ return true;
+@@ -1763,7 +1763,7 @@ bool is_lower_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
+
+ bool is_upper_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
+ {
+- if (pipe_ctx->plane_state->visible)
++ if (pipe_ctx->plane_state && pipe_ctx->plane_state->visible)
+ return true;
+ if (pipe_ctx->top_pipe && is_upper_pipe_tree_visible(pipe_ctx->top_pipe))
+ return true;
+@@ -1772,7 +1772,7 @@ bool is_upper_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
+
+ bool is_pipe_tree_visible(struct pipe_ctx *pipe_ctx)
+ {
+- if (pipe_ctx->plane_state->visible)
++ if (pipe_ctx->plane_state && pipe_ctx->plane_state->visible)
+ return true;
+ if (pipe_ctx->top_pipe && is_upper_pipe_tree_visible(pipe_ctx->top_pipe))
+ return true;
+@@ -1918,7 +1918,7 @@ static uint16_t fixed_point_to_int_frac(
+ return result;
+ }
+
+-void build_prescale_params(struct dc_bias_and_scale *bias_and_scale,
++void dcn10_build_prescale_params(struct dc_bias_and_scale *bias_and_scale,
+ const struct dc_plane_state *plane_state)
+ {
+ if (plane_state->format >= SURFACE_PIXEL_FORMAT_VIDEO_BEGIN
+@@ -1951,7 +1951,7 @@ static void update_dpp(struct dpp *dpp, struct dc_plane_state *plane_state)
+ plane_state->color_space);
+
+ //set scale and bias registers
+- build_prescale_params(&bns_params, plane_state);
++ dcn10_build_prescale_params(&bns_params, plane_state);
+ if (dpp->funcs->dpp_program_bias_and_scale)
+ dpp->funcs->dpp_program_bias_and_scale(dpp, &bns_params);
+ }
+@@ -2640,9 +2640,6 @@ static void dcn10_wait_for_mpcc_disconnect(
+ res_pool->mpc->funcs->wait_for_idle(res_pool->mpc, mpcc_inst);
+ pipe_ctx->stream_res.opp->mpcc_disconnect_pending[mpcc_inst] = false;
+ hubp->funcs->set_blank(hubp, true);
+- /*DC_LOG_ERROR(dc->ctx->logger,
+- "[debug_mpo: wait_for_mpcc finished waiting on mpcc %d]\n",
+- i);*/
+ }
+ }
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.h
+index 4b3b27a5d23b..ef94d6b15843 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.h
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.h
+@@ -83,6 +83,8 @@ struct pipe_ctx *find_top_pipe_for_stream(
+
+ int get_vupdate_offset_from_vsync(struct pipe_ctx *pipe_ctx);
+
++void dcn10_build_prescale_params(struct dc_bias_and_scale *bias_and_scale,
++ const struct dc_plane_state *plane_state);
+ void lock_all_pipes(struct dc *dc,
+ struct dc_state *context,
+ bool lock);
+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 6f5ab05d6467..d61efa068c9a 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h
+@@ -212,6 +212,25 @@ struct plane_resource {
+ struct dcn_fe_bandwidth bw;
+ };
+
++union pipe_update_flags {
++ struct {
++ uint32_t enable : 1;
++ uint32_t disable : 1;
++ uint32_t odm : 1;
++ uint32_t global_sync : 1;
++ uint32_t opp_changed : 1;
++ uint32_t tg_changed : 1;
++ uint32_t mpcc : 1;
++ uint32_t dppclk : 1;
++ uint32_t hubp_interdependent : 1;
++ uint32_t hubp_rq_dlg_ttu : 1;
++ uint32_t gamut_remap : 1;
++ uint32_t scaler : 1;
++ uint32_t viewport : 1;
++ } bits;
++ uint32_t raw;
++};
++
+ struct pipe_ctx {
+ struct dc_plane_state *plane_state;
+ struct dc_stream_state *stream;
+@@ -234,6 +253,7 @@ struct pipe_ctx {
+ struct _vcs_dpi_display_rq_regs_st rq_regs;
+ struct _vcs_dpi_display_pipe_dest_params_st pipe_dlg_param;
+ #endif
++ union pipe_update_flags update_flags;
+ };
+
+ struct resource_context {
+--
+2.17.1
+