aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3926-drm-amd-display-add-mpc-to-dtn-log.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3926-drm-amd-display-add-mpc-to-dtn-log.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3926-drm-amd-display-add-mpc-to-dtn-log.patch143
1 files changed, 143 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3926-drm-amd-display-add-mpc-to-dtn-log.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3926-drm-amd-display-add-mpc-to-dtn-log.patch
new file mode 100644
index 00000000..9f3dfd7d
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3926-drm-amd-display-add-mpc-to-dtn-log.patch
@@ -0,0 +1,143 @@
+From 5a0d587ddf25b4796fb4b3c85585bcc8ca60084f Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Wed, 24 Jan 2018 14:28:30 -0500
+Subject: [PATCH 3926/4131] drm/amd/display: add mpc to dtn log
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ .../drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c | 31 ++++++++++++++++------
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c | 17 ++++++++++++
+ drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.h | 5 ++++
+ drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h | 15 +++++++++++
+ 4 files changed, 60 insertions(+), 8 deletions(-)
+
+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 8b0f6b8..999190a 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
+@@ -121,20 +121,19 @@ void dcn10_log_hw_state(struct dc *dc)
+
+ dcn10_log_hubbub_state(dc);
+
+- DTN_INFO("HUBP:\t format \t addr_hi \t width \t height \t "
+- "rotation \t mirror \t sw_mode \t "
+- "dcc_en \t blank_en \t ttu_dis \t underflow \t "
+- "min_ttu_vblank \t qos_low_wm \t qos_high_wm \n");
+-
++ DTN_INFO("HUBP: format addr_hi width height "
++ "rotation mirror sw_mode "
++ "dcc_en blank_en ttu_dis underflow "
++ "min_ttu_vblank qos_low_wm qos_high_wm\n");
+ for (i = 0; i < pool->pipe_count; i++) {
+ struct hubp *hubp = pool->hubps[i];
+ struct dcn_hubp_state s;
+
+ hubp1_read_state(TO_DCN10_HUBP(hubp), &s);
+
+- DTN_INFO("[%d]:\t %xh \t %xh \t %d \t %d \t "
+- "%xh \t %xh \t %xh \t "
+- "%d \t %d \t %d \t %xh \t",
++ DTN_INFO("[%-2d]: %5xh %6xh %5d %6d "
++ "%7xh %5xh %6xh "
++ "%6d %8d %7d %8xh \t",
+ hubp->inst,
+ s.pixel_format,
+ s.inuse_addr_hi,
+@@ -153,6 +152,22 @@ void dcn10_log_hw_state(struct dc *dc)
+ DTN_INFO("\n");
+ }
+ DTN_INFO("\n");
++ for (i = 0; i < pool->pipe_count; i++) {
++ struct output_pixel_processor *opp = pool->opps[i];
++ struct mpcc *mpcc = opp->mpc_tree_params.opp_list;
++ struct mpcc_state s = {0};
++
++ while (mpcc) {
++ ASSERT(opp->mpc_tree_params.opp_id == opp->inst);
++ pool->mpc->funcs->read_mpcc_state(pool->mpc, mpcc->mpcc_id, &s);
++ DTN_INFO("[OPP%d - MPCC%d]: DPP%d MPCCBOT%x MODE:%d ALPHA_MODE:%d PREMULT:%d OVERLAP_ONLY:%d\n",
++ s.opp_id, mpcc->mpcc_id, s.dpp_id, s.bot_mpcc_id,
++ s.mode, s.alpha_mode, s.pre_multiplied_alpha, s.overlap_only);
++ mpcc = mpcc->mpcc_bot;
++ ASSERT(!mpcc || mpcc->mpcc_id == s.bot_mpcc_id);
++ }
++ }
++ DTN_INFO("\n");
+
+ DTN_INFO("OTG:\t v_bs \t v_be \t v_ss \t v_se \t vpol \t vmax \t vmin \t "
+ "h_bs \t h_be \t h_ss \t h_se \t hpol \t htot \t vtot \t underflow\n");
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c
+index 179890b..29e15a9 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.c
+@@ -409,7 +409,24 @@ void mpc1_init_mpcc_list_from_hw(
+ }
+ }
+
++void mpc1_read_mpcc_state(
++ struct mpc *mpc,
++ int mpcc_inst,
++ struct mpcc_state *s)
++{
++ struct dcn10_mpc *mpc10 = TO_DCN10_MPC(mpc);
++
++ REG_GET(MPCC_OPP_ID[mpcc_inst], MPCC_OPP_ID, &s->opp_id);
++ REG_GET(MPCC_TOP_SEL[mpcc_inst], MPCC_TOP_SEL, &s->dpp_id);
++ REG_GET(MPCC_BOT_SEL[mpcc_inst], MPCC_BOT_SEL, &s->bot_mpcc_id);
++ REG_GET_4(MPCC_CONTROL[mpcc_inst], MPCC_MODE, &s->mode,
++ MPCC_ALPHA_BLND_MODE, &s->alpha_mode,
++ MPCC_ALPHA_MULTIPLIED_MODE, &s->pre_multiplied_alpha,
++ MPCC_BLND_ACTIVE_OVERLAP_ONLY, &s->pre_multiplied_alpha);
++}
++
+ const struct mpc_funcs dcn10_mpc_funcs = {
++ .read_mpcc_state = mpc1_read_mpcc_state,
+ .insert_plane = mpc1_insert_plane,
+ .remove_mpcc = mpc1_remove_mpcc,
+ .mpc_init = mpc1_mpc_init,
+diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.h b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.h
+index 267a299..d3d16c4 100644
+--- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.h
++++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_mpc.h
+@@ -183,4 +183,9 @@ struct mpcc *mpc1_get_mpcc_for_dpp(
+ struct mpc_tree *tree,
+ int dpp_id);
+
++void mpc1_read_mpcc_state(
++ struct mpc *mpc,
++ int mpcc_inst,
++ struct mpcc_state *s);
++
+ #endif
+diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h b/drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
+index 23a8d5e..5caacab 100644
+--- a/drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
++++ b/drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
+@@ -105,7 +105,22 @@ struct mpc {
+ struct mpcc mpcc_array[MAX_MPCC];
+ };
+
++struct mpcc_state {
++ uint32_t opp_id;
++ uint32_t dpp_id;
++ uint32_t bot_mpcc_id;
++ uint32_t mode;
++ uint32_t alpha_mode;
++ uint32_t pre_multiplied_alpha;
++ uint32_t overlap_only;
++};
++
+ struct mpc_funcs {
++ void (*read_mpcc_state)(
++ struct mpc *mpc,
++ int mpcc_inst,
++ struct mpcc_state *s);
++
+ /*
+ * Insert DPP into MPC tree based on specified blending position.
+ * Only used for planes that are part of blending chain for OPP output
+--
+2.7.4
+