From: Martin Leung <martin.le...@amd.com>

This reverts commit 571662266db3 ("drm/amd/display: Reduce Stack Usage by 
moving 'audio_output' into 'stream_res' v4")

Reason for revert: Causes DP compliance errors

Acked-by: Wayne Lin <wayne....@amd.com>
Signed-off-by: Martin Leung <martin.le...@amd.com>
Signed-off-by: Ray Wu <ray...@amd.com>
---
 .../amd/display/dc/hwss/dce110/dce110_hwseq.c | 32 +++++++++++--------
 .../gpu/drm/amd/display/dc/inc/core_types.h   |  5 ++-
 .../display/dc/link/accessories/link_dp_cts.c | 13 ++++----
 .../dc/resource/dcn31/dcn31_resource.c        |  5 +--
 .../dc/resource/dcn31/dcn31_resource.h        |  3 +-
 5 files changed, 31 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c 
b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
index ea904d52af20..7b4a04704312 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
@@ -1601,17 +1601,19 @@ enum dc_status dce110_apply_single_controller_ctx_to_hw(
        }
 
        if (pipe_ctx->stream_res.audio != NULL) {
-               build_audio_output(context, pipe_ctx, 
&pipe_ctx->stream_res.audio_output);
+               struct audio_output audio_output = {0};
 
-               link_hwss->setup_audio_output(pipe_ctx, 
&pipe_ctx->stream_res.audio_output,
+               build_audio_output(context, pipe_ctx, &audio_output);
+
+               link_hwss->setup_audio_output(pipe_ctx, &audio_output,
                                pipe_ctx->stream_res.audio->inst);
 
                pipe_ctx->stream_res.audio->funcs->az_configure(
                                pipe_ctx->stream_res.audio,
                                pipe_ctx->stream->signal,
-                               &pipe_ctx->stream_res.audio_output.crtc_info,
+                               &audio_output.crtc_info,
                                &pipe_ctx->stream->audio_info,
-                               
&pipe_ctx->stream_res.audio_output.dp_link_info);
+                               &audio_output.dp_link_info);
 
                if (dc->config.disable_hbr_audio_dp2)
                        if 
(pipe_ctx->stream_res.audio->funcs->az_disable_hbr_audio &&
@@ -2385,7 +2387,9 @@ static void dce110_setup_audio_dto(
                if (pipe_ctx->stream->signal != SIGNAL_TYPE_HDMI_TYPE_A)
                        continue;
                if (pipe_ctx->stream_res.audio != NULL) {
-                       build_audio_output(context, pipe_ctx, 
&pipe_ctx->stream_res.audio_output);
+                       struct audio_output audio_output;
+
+                       build_audio_output(context, pipe_ctx, &audio_output);
 
                        if (dc->res_pool->dccg && 
dc->res_pool->dccg->funcs->set_audio_dtbclk_dto) {
                                struct dtbclk_dto_params dto_params = {0};
@@ -2396,14 +2400,14 @@ static void dce110_setup_audio_dto(
                                
pipe_ctx->stream_res.audio->funcs->wall_dto_setup(
                                                pipe_ctx->stream_res.audio,
                                                pipe_ctx->stream->signal,
-                                               
&pipe_ctx->stream_res.audio_output.crtc_info,
-                                               
&pipe_ctx->stream_res.audio_output.pll_info);
+                                               &audio_output.crtc_info,
+                                               &audio_output.pll_info);
                        } else
                                
pipe_ctx->stream_res.audio->funcs->wall_dto_setup(
                                        pipe_ctx->stream_res.audio,
                                        pipe_ctx->stream->signal,
-                                       
&pipe_ctx->stream_res.audio_output.crtc_info,
-                                       
&pipe_ctx->stream_res.audio_output.pll_info);
+                                       &audio_output.crtc_info,
+                                       &audio_output.pll_info);
                        break;
                }
        }
@@ -2423,15 +2427,15 @@ static void dce110_setup_audio_dto(
                                continue;
 
                        if (pipe_ctx->stream_res.audio != NULL) {
-                               build_audio_output(context,
-                                                  pipe_ctx,
-                                                  
&pipe_ctx->stream_res.audio_output);
+                               struct audio_output audio_output = {0};
+
+                               build_audio_output(context, pipe_ctx, 
&audio_output);
 
                                
pipe_ctx->stream_res.audio->funcs->wall_dto_setup(
                                        pipe_ctx->stream_res.audio,
                                        pipe_ctx->stream->signal,
-                                       
&pipe_ctx->stream_res.audio_output.crtc_info,
-                                       
&pipe_ctx->stream_res.audio_output.pll_info);
+                                       &audio_output.crtc_info,
+                                       &audio_output.pll_info);
                                break;
                        }
                }
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 f49549147d99..d11893f8c916 100644
--- a/drivers/gpu/drm/amd/display/dc/inc/core_types.h
+++ b/drivers/gpu/drm/amd/display/dc/inc/core_types.h
@@ -228,7 +228,8 @@ struct resource_funcs {
        enum dc_status (*update_dc_state_for_encoder_switch)(struct dc_link 
*link,
                struct dc_link_settings *link_setting,
                uint8_t pipe_count,
-               struct pipe_ctx *pipes);
+               struct pipe_ctx *pipes,
+               struct audio_output *audio_output);
 };
 
 struct audio_support{
@@ -360,8 +361,6 @@ struct stream_resource {
        uint8_t gsl_group;
 
        struct test_pattern_params test_pattern_params;
-
-       struct audio_output audio_output;
 };
 
 struct plane_resource {
diff --git a/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c 
b/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c
index 23f41c99fa38..9e33bf937a69 100644
--- a/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c
+++ b/drivers/gpu/drm/amd/display/dc/link/accessories/link_dp_cts.c
@@ -75,7 +75,7 @@ static void dp_retrain_link_dp_test(struct dc_link *link,
        bool is_hpo_acquired;
        uint8_t count;
        int i;
-
+       struct audio_output audio_output[MAX_PIPES];
        struct dc_stream_state *streams_on_link[MAX_PIPES];
        int num_streams_on_link = 0;
 
@@ -101,7 +101,7 @@ static void dp_retrain_link_dp_test(struct dc_link *link,
        if (needs_divider_update && 
link->dc->res_pool->funcs->update_dc_state_for_encoder_switch) {
                
link->dc->res_pool->funcs->update_dc_state_for_encoder_switch(link,
                                link_setting, count,
-                               *pipes);
+                               *pipes, &audio_output[0]);
                for (i = 0; i < count; i++) {
                        pipes[i]->clock_source->funcs->program_pix_clk(
                                        pipes[i]->clock_source,
@@ -113,16 +113,15 @@ static void dp_retrain_link_dp_test(struct dc_link *link,
                                const struct link_hwss *link_hwss = 
get_link_hwss(
                                        link, &pipes[i]->link_res);
 
-                               link_hwss->setup_audio_output(pipes[i],
-                                                             
&pipes[i]->stream_res.audio_output,
-                                                             
pipes[i]->stream_res.audio->inst);
+                               link_hwss->setup_audio_output(pipes[i], 
&audio_output[i],
+                                               
pipes[i]->stream_res.audio->inst);
 
                                pipes[i]->stream_res.audio->funcs->az_configure(
                                                pipes[i]->stream_res.audio,
                                                pipes[i]->stream->signal,
-                                               
&pipes[i]->stream_res.audio_output.crtc_info,
+                                               &audio_output[i].crtc_info,
                                                &pipes[i]->stream->audio_info,
-                                               
&pipes[i]->stream_res.audio_output.dp_link_info);
+                                               &audio_output[i].dp_link_info);
 
                                if (link->dc->config.disable_hbr_audio_dp2 &&
                                                
pipes[i]->stream_res.audio->funcs->az_disable_hbr_audio &&
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c 
b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
index ca17e5d8fdc2..3ed7f50554e2 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
@@ -2239,7 +2239,8 @@ struct resource_pool *dcn31_create_resource_pool(
 enum dc_status dcn31_update_dc_state_for_encoder_switch(struct dc_link *link,
        struct dc_link_settings *link_setting,
        uint8_t pipe_count,
-       struct pipe_ctx *pipes)
+       struct pipe_ctx *pipes,
+       struct audio_output *audio_output)
 {
        struct dc_state *state = link->dc->current_state;
        int i;
@@ -2254,7 +2255,7 @@ enum dc_status 
dcn31_update_dc_state_for_encoder_switch(struct dc_link *link,
 
                // Setup audio
                if (pipes[i].stream_res.audio != NULL)
-                       build_audio_output(state, &pipes[i], 
&pipes[i].stream_res.audio_output);
+                       build_audio_output(state, &pipes[i], &audio_output[i]);
        }
 #else
        /* This DCN requires rate divider updates and audio reprogramming to 
allow DP1<-->DP2 link rate switching,
diff --git a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.h 
b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.h
index 7e8fde65528f..c32c85ef0ba4 100644
--- a/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.h
+++ b/drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.h
@@ -69,7 +69,8 @@ unsigned int dcn31_get_det_buffer_size(
 enum dc_status dcn31_update_dc_state_for_encoder_switch(struct dc_link *link,
        struct dc_link_settings *link_setting,
        uint8_t pipe_count,
-       struct pipe_ctx *pipes);
+       struct pipe_ctx *pipes,
+       struct audio_output *audio_output);
 
 /*temp: B0 specific before switch to dcn313 headers*/
 #ifndef regPHYPLLF_PIXCLK_RESYNC_CNTL
-- 
2.43.0

Reply via email to