From: Karthi Kandasamy <karthi.kandas...@amd.com>

[WHY]
Ensure AVI infoframe updates from stream updates are applied to the active
stream so OS overrides are not lost.

[HOW]
Copy avi_infopacket to stream when valid flag is set.
Follow existing infopacket copy pattern and perform a basic validity check 
before assignment.

Reviewed-by: Aric Cyr <aric....@amd.com>
Signed-off-by: Karthi Kandasamy <karthi.kandas...@amd.com>
Signed-off-by: Ivan Lipski <ivan.lip...@amd.com>
---
 drivers/gpu/drm/amd/display/dc/core/dc.c          | 7 ++++++-
 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 6 ++++++
 drivers/gpu/drm/amd/display/dc/dc_stream.h        | 3 +++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c 
b/drivers/gpu/drm/amd/display/dc/core/dc.c
index c4dd52ed377d..974d63af1c70 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -3313,6 +3313,9 @@ static void copy_stream_update_to_stream(struct dc *dc,
        if (update->adaptive_sync_infopacket)
                stream->adaptive_sync_infopacket = 
*update->adaptive_sync_infopacket;
 
+       if (update->avi_infopacket)
+               stream->avi_infopacket = *update->avi_infopacket;
+
        if (update->dither_option)
                stream->dither_option = *update->dither_option;
 
@@ -3607,7 +3610,8 @@ static void commit_planes_do_stream_update(struct dc *dc,
                                        stream_update->vsp_infopacket ||
                                        stream_update->hfvsif_infopacket ||
                                        stream_update->adaptive_sync_infopacket 
||
-                                       stream_update->vtem_infopacket) {
+                                       stream_update->vtem_infopacket ||
+                                       stream_update->avi_infopacket) {
                                resource_build_info_frame(pipe_ctx);
                                dc->hwss.update_info_frame(pipe_ctx);
 
@@ -5079,6 +5083,7 @@ static bool full_update_required(struct dc *dc,
                        stream_update->hfvsif_infopacket ||
                        stream_update->vtem_infopacket ||
                        stream_update->adaptive_sync_infopacket ||
+                       stream_update->avi_infopacket ||
                        stream_update->dpms_off ||
                        stream_update->allow_freesync ||
                        stream_update->vrr_active_variable ||
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 cbca3c67f439..bc5dedf5f60c 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -4410,8 +4410,14 @@ static void set_avi_info_frame(
        unsigned int fr_ind = pipe_ctx->stream->timing.fr_index;
        enum dc_timing_3d_format format;
 
+       if (stream->avi_infopacket.valid) {
+               *info_packet = stream->avi_infopacket;
+               return;
+       }
+
        memset(&hdmi_info, 0, sizeof(union hdmi_info_packet));
 
+
        color_space = pipe_ctx->stream->output_color_space;
        if (color_space == COLOR_SPACE_UNKNOWN)
                color_space = (stream->timing.pixel_encoding == 
PIXEL_ENCODING_RGB) ?
diff --git a/drivers/gpu/drm/amd/display/dc/dc_stream.h 
b/drivers/gpu/drm/amd/display/dc/dc_stream.h
index 5fc6fea211de..76cf9fdedab0 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_stream.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_stream.h
@@ -203,6 +203,7 @@ struct dc_stream_state {
        struct dc_info_packet hfvsif_infopacket;
        struct dc_info_packet vtem_infopacket;
        struct dc_info_packet adaptive_sync_infopacket;
+       struct dc_info_packet avi_infopacket;
        uint8_t dsc_packed_pps[128];
        struct rect src; /* composition area */
        struct rect dst; /* stream addressable area */
@@ -335,6 +336,8 @@ struct dc_stream_update {
        struct dc_info_packet *hfvsif_infopacket;
        struct dc_info_packet *vtem_infopacket;
        struct dc_info_packet *adaptive_sync_infopacket;
+       struct dc_info_packet *avi_infopacket;
+
        bool *dpms_off;
        bool integer_scaling_update;
        bool *allow_freesync;
-- 
2.43.0

Reply via email to