From: Charlene Liu <[email protected]>

Signed-off-by: Charlene Liu <[email protected]>
Acked-by: Harry Wentland <[email protected]>
Reviewed-by: Charlene Liu <[email protected]>
---
 drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c | 21 ++++++++++++++++++++-
 drivers/gpu/drm/amd/display/dc/dc.h              |  2 +-
 drivers/gpu/drm/amd/display/dc/dc_dp_types.h     |  8 ++++++--
 drivers/gpu/drm/amd/display/dc/dc_types.h        | 20 ++++++++++++++++++++
 4 files changed, 47 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c 
b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
index 4ef3fec44d2d..953e201dc6bc 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
@@ -1951,14 +1951,33 @@ static void get_active_converter_info(
                        link->dpcd_caps.dongle_type =
                                DISPLAY_DONGLE_DP_HDMI_CONVERTER;
 
+                       link->dpcd_caps.dongle_caps.dongle_type = 
link->dpcd_caps.dongle_type;
                        if (ds_port.fields.DETAILED_CAPS) {
 
                                union dwnstream_port_caps_byte3_hdmi
                                        hdmi_caps = {.raw = det_caps[3] };
+                               union dwnstream_port_caps_byte1
+                                       hdmi_color_caps = {.raw = det_caps[2] };
+                               
link->dpcd_caps.dongle_caps.dp_hdmi_max_pixel_clk =
+                                       det_caps[1] * 25000;
 
-                               link->dpcd_caps.is_dp_hdmi_s3d_converter =
+                               
link->dpcd_caps.dongle_caps.is_dp_hdmi_s3d_converter =
                                        hdmi_caps.bits.FRAME_SEQ_TO_FRAME_PACK;
+                               
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr422_pass_through =
+                                       hdmi_caps.bits.YCrCr422_PASS_THROUGH;
+                               
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr420_pass_through =
+                                       hdmi_caps.bits.YCrCr420_PASS_THROUGH;
+                               
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr422_converter =
+                                       hdmi_caps.bits.YCrCr422_CONVERSION;
+                               
link->dpcd_caps.dongle_caps.is_dp_hdmi_ycbcr420_converter =
+                                       hdmi_caps.bits.YCrCr420_CONVERSION;
+
+                               link->dpcd_caps.dongle_caps.dp_hdmi_max_bpc =
+                                       
hdmi_color_caps.bits.MAX_BITS_PER_COLOR_COMPONENT;
+
+                               link->dpcd_caps.dongle_caps.extendedCapValid = 
true;
                        }
+
                        break;
                }
        }
diff --git a/drivers/gpu/drm/amd/display/dc/dc.h 
b/drivers/gpu/drm/amd/display/dc/dc.h
index 1b3fd79ce624..d35fa01024f8 100644
--- a/drivers/gpu/drm/amd/display/dc/dc.h
+++ b/drivers/gpu/drm/amd/display/dc/dc.h
@@ -623,7 +623,7 @@ struct dpcd_caps {
        union sink_count sink_count;
        /* If dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER,
        indicates 'Frame Sequential-to-lllFrame Pack' conversion capability.*/
-       bool is_dp_hdmi_s3d_converter;
+       struct dc_dongle_caps dongle_caps;
 
        bool allow_invalid_MSA_timing_param;
        bool panel_mode_edp;
diff --git a/drivers/gpu/drm/amd/display/dc/dc_dp_types.h 
b/drivers/gpu/drm/amd/display/dc/dc_dp_types.h
index cd2323a71760..77e2de69cca3 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_dp_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_dp_types.h
@@ -255,7 +255,7 @@ enum dpcd_downstream_port_detailed_type {
        DOWN_STREAM_DETAILED_DP_PLUS_PLUS
 };
 
-union dwnstream_port_caps_byte2 {
+union dwnstream_port_caps_byte1 {
        struct {
                uint8_t MAX_BITS_PER_COLOR_COMPONENT:2;
                uint8_t RESERVED:6;
@@ -287,7 +287,11 @@ union dwnstream_port_caps_byte3_dvi {
 union dwnstream_port_caps_byte3_hdmi {
        struct {
                uint8_t FRAME_SEQ_TO_FRAME_PACK:1;
-               uint8_t RESERVED:7;
+               uint8_t YCrCr422_PASS_THROUGH:1;
+               uint8_t YCrCr420_PASS_THROUGH:1;
+               uint8_t YCrCr422_CONVERSION:1;
+               uint8_t YCrCr420_CONVERSION:1;
+               uint8_t RESERVED:3;
        } bits;
        uint8_t raw;
 };
diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h 
b/drivers/gpu/drm/amd/display/dc/dc_types.h
index e0436e317341..2ba02b50bc18 100644
--- a/drivers/gpu/drm/amd/display/dc/dc_types.h
+++ b/drivers/gpu/drm/amd/display/dc/dc_types.h
@@ -338,6 +338,26 @@ enum {
        LAYER_INDEX_PRIMARY = -1,
 };
 
+enum dpcd_downstream_port_max_bpc {
+       DOWN_STREAM_MAX_8BPC = 0,
+       DOWN_STREAM_MAX_10BPC,
+       DOWN_STREAM_MAX_12BPC,
+       DOWN_STREAM_MAX_16BPC
+};
+struct dc_dongle_caps {
+       /* dongle type (DP converter, CV smart dongle) */
+       enum display_dongle_type dongle_type;
+       bool extendedCapValid;
+       /* If dongle_type == DISPLAY_DONGLE_DP_HDMI_CONVERTER,
+       indicates 'Frame Sequential-to-lllFrame Pack' conversion capability.*/
+       bool is_dp_hdmi_s3d_converter;
+       bool is_dp_hdmi_ycbcr422_pass_through;
+       bool is_dp_hdmi_ycbcr420_pass_through;
+       bool is_dp_hdmi_ycbcr422_converter;
+       bool is_dp_hdmi_ycbcr420_converter;
+       uint32_t dp_hdmi_max_bpc;
+       uint32_t dp_hdmi_max_pixel_clk;
+};
 /* Scaling format */
 enum scaling_transformation {
        SCALING_TRANSFORMATION_UNINITIALIZED,
-- 
2.11.0

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to