]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/amd/display: Add option to retrieve detile buffer size
authorSung Lee <Sung.Lee@amd.com>
Thu, 14 Nov 2024 19:18:13 +0000 (14:18 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 14 Dec 2024 19:04:11 +0000 (20:04 +0100)
[ Upstream commit 6a7fd76b949efe40fb6d6677f480e624e0cb6e40 ]

[WHY]
For better power profiling knowing the detile
buffer size at a given point in time
would be useful.

[HOW]
Add interface to retrieve detile buffer from
dc state.

Cc: Mario Limonciello <mario.limonciello@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Reviewed-by: Aric Cyr <aric.cyr@amd.com>
Signed-off-by: Sung Lee <Sung.Lee@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/gpu/drm/amd/display/dc/core/dc.c
drivers/gpu/drm/amd/display/dc/dc.h
drivers/gpu/drm/amd/display/dc/inc/core_types.h
drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.h
drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c

index a6911bb2cf0c6c12e1b009ae2e6b92f8057879c0..9f570d447c209908720a84aafa797acabfded3a7 100644 (file)
@@ -6006,3 +6006,21 @@ struct dc_power_profile dc_get_power_profile_for_dc_state(const struct dc_state
 
        return profile;
 }
+
+/*
+ **********************************************************************************
+ * dc_get_det_buffer_size_from_state() - extracts detile buffer size from dc state
+ *
+ * Called when DM wants to log detile buffer size from dc_state
+ *
+ **********************************************************************************
+ */
+unsigned int dc_get_det_buffer_size_from_state(const struct dc_state *context)
+{
+       struct dc *dc = context->clk_mgr->ctx->dc;
+
+       if (dc->res_pool->funcs->get_det_buffer_size)
+               return dc->res_pool->funcs->get_det_buffer_size(context);
+       else
+               return 0;
+}
index 25385aa09ed5db9552cce0bb3d887184104f48c9..7c163aa7e8bd2d0613291066854fdb2a61ebd390 100644 (file)
@@ -2544,6 +2544,8 @@ struct dc_power_profile {
 
 struct dc_power_profile dc_get_power_profile_for_dc_state(const struct dc_state *context);
 
+unsigned int dc_get_det_buffer_size_from_state(const struct dc_state *context);
+
 /* DSC Interfaces */
 #include "dc_dsc.h"
 
index bfb8b8502d20264a944813e698d515be27e68f02..e1e3142cdc00ac009fc4cdabe05e279085fcb8a8 100644 (file)
@@ -215,6 +215,7 @@ struct resource_funcs {
 
        void (*get_panel_config_defaults)(struct dc_panel_config *panel_config);
        void (*build_pipe_pix_clk_params)(struct pipe_ctx *pipe_ctx);
+       unsigned int (*get_det_buffer_size)(const struct dc_state *context);
 };
 
 struct audio_support{
index ac8cb20e2e3b642d2f7a8faad35297e97cdaf5d7..80386f698ae4dee5c25f66e63e5db9c72990893d 100644 (file)
@@ -1721,6 +1721,12 @@ int dcn31_populate_dml_pipes_from_context(
        return pipe_cnt;
 }
 
+unsigned int dcn31_get_det_buffer_size(
+       const struct dc_state *context)
+{
+       return context->bw_ctx.dml.ip.det_buffer_size_kbytes;
+}
+
 void dcn31_calculate_wm_and_dlg(
                struct dc *dc, struct dc_state *context,
                display_e2e_pipe_params_st *pipes,
@@ -1843,6 +1849,7 @@ static struct resource_funcs dcn31_res_pool_funcs = {
        .update_bw_bounding_box = dcn31_update_bw_bounding_box,
        .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
        .get_panel_config_defaults = dcn31_get_panel_config_defaults,
+       .get_det_buffer_size = dcn31_get_det_buffer_size,
 };
 
 static struct clock_source *dcn30_clock_source_create(
index 901436591ed45c29556c2f447ac22c0632128519..551ad912f7bea86058aa0216189acefac27d6cbe 100644 (file)
@@ -63,6 +63,9 @@ struct resource_pool *dcn31_create_resource_pool(
                const struct dc_init_data *init_data,
                struct dc *dc);
 
+unsigned int dcn31_get_det_buffer_size(
+       const struct dc_state *context);
+
 /*temp: B0 specific before switch to dcn313 headers*/
 #ifndef regPHYPLLF_PIXCLK_RESYNC_CNTL
 #define regPHYPLLF_PIXCLK_RESYNC_CNTL 0x007e
index 169924d0a8393ee60fb34669db45ccad53ff635d..01d95108ce662bcfd3d32f5f9e132ab11c5130de 100644 (file)
@@ -1778,6 +1778,7 @@ static struct resource_funcs dcn314_res_pool_funcs = {
        .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
        .get_panel_config_defaults = dcn314_get_panel_config_defaults,
        .get_preferred_eng_id_dpia = dcn314_get_preferred_eng_id_dpia,
+       .get_det_buffer_size = dcn31_get_det_buffer_size,
 };
 
 static struct clock_source *dcn30_clock_source_create(
index 3f4b9dba4112440f5408485f3621f5536bb992c3..f2ce687c0e03caea06e90bea65cf4c0e68496df7 100644 (file)
@@ -1840,6 +1840,7 @@ static struct resource_funcs dcn315_res_pool_funcs = {
        .update_bw_bounding_box = dcn315_update_bw_bounding_box,
        .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
        .get_panel_config_defaults = dcn315_get_panel_config_defaults,
+       .get_det_buffer_size = dcn31_get_det_buffer_size,
 };
 
 static bool dcn315_resource_construct(
index 5fd52c5fcee4585d95dd592ba922930f529c56a0..af82e13029c9e42ab69a6272d2280bc30fc29ce1 100644 (file)
@@ -1720,6 +1720,7 @@ static struct resource_funcs dcn316_res_pool_funcs = {
        .update_bw_bounding_box = dcn316_update_bw_bounding_box,
        .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
        .get_panel_config_defaults = dcn316_get_panel_config_defaults,
+       .get_det_buffer_size = dcn31_get_det_buffer_size,
 };
 
 static bool dcn316_resource_construct(
index ed3238edaf7913df93a7881c5559b0c479fd2c0d..d0c4693c12241b34dd524d0b9ce5dcdd271e6828 100644 (file)
@@ -1779,6 +1779,7 @@ static struct resource_funcs dcn35_res_pool_funcs = {
        .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
        .get_panel_config_defaults = dcn35_get_panel_config_defaults,
        .get_preferred_eng_id_dpia = dcn35_get_preferred_eng_id_dpia,
+       .get_det_buffer_size = dcn31_get_det_buffer_size,
 };
 
 static bool dcn35_resource_construct(
index c274861e83c73637d333de3a47f7052d3e8e9b9c..575c0aa12229cf73e0bc4a71bb9fe2450c7a36b6 100644 (file)
@@ -1758,6 +1758,7 @@ static struct resource_funcs dcn351_res_pool_funcs = {
        .patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
        .get_panel_config_defaults = dcn35_get_panel_config_defaults,
        .get_preferred_eng_id_dpia = dcn351_get_preferred_eng_id_dpia,
+       .get_det_buffer_size = dcn31_get_det_buffer_size,
 };
 
 static bool dcn351_resource_construct(