OSDN Git Service

drm/amd/display: Add Missing HPO Stream Encoder Function Hook
authorFangzhi Zuo <Jerry.Zuo@amd.com>
Tue, 25 Jan 2022 05:57:36 +0000 (00:57 -0500)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 27 Jan 2022 20:48:04 +0000 (15:48 -0500)
[Why]
configure_dp_hpo_throttled_vcp_size() was missing promotion before, but it was covered by
not calling the missing function hook in the old interface hpo_dp_link_encoder->funcs.

Recent refactor replaces with new caller link_hwss->set_throttled_vcp_size
which needs that hook, and that causes null ptr hang.

Signed-off-by: Fangzhi Zuo <Jerry.Zuo@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hpo_dp_stream_encoder.c
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_hpo_dp_stream_encoder.h

index 5065904..23621ff 100644 (file)
@@ -710,6 +710,16 @@ static void dcn31_hpo_dp_stream_enc_read_state(
        }
 }
 
+static void dcn31_set_hblank_min_symbol_width(
+               struct hpo_dp_stream_encoder *enc,
+               uint16_t width)
+{
+       struct dcn31_hpo_dp_stream_encoder *enc3 = DCN3_1_HPO_DP_STREAM_ENC_FROM_HPO_STREAM_ENC(enc);
+
+       REG_SET(DP_SYM32_ENC_HBLANK_CONTROL, 0,
+                       HBLANK_MINIMUM_SYMBOL_WIDTH, width);
+}
+
 static const struct hpo_dp_stream_encoder_funcs dcn30_str_enc_funcs = {
        .enable_stream = dcn31_hpo_dp_stream_enc_enable_stream,
        .dp_unblank = dcn31_hpo_dp_stream_enc_dp_unblank,
@@ -725,6 +735,7 @@ static const struct hpo_dp_stream_encoder_funcs dcn30_str_enc_funcs = {
        .dp_audio_enable = dcn31_hpo_dp_stream_enc_audio_enable,
        .dp_audio_disable = dcn31_hpo_dp_stream_enc_audio_disable,
        .read_state = dcn31_hpo_dp_stream_enc_read_state,
+       .set_hblank_min_symbol_width = dcn31_set_hblank_min_symbol_width,
 };
 
 void dcn31_hpo_dp_stream_encoder_construct(
index 70b94fc..7c77c71 100644 (file)
@@ -80,7 +80,8 @@
        SRI(DP_SYM32_ENC_SDP_GSP_CONTROL11, DP_SYM32_ENC, id),\
        SRI(DP_SYM32_ENC_SDP_METADATA_PACKET_CONTROL, DP_SYM32_ENC, id),\
        SRI(DP_SYM32_ENC_SDP_AUDIO_CONTROL0, DP_SYM32_ENC, id),\
-       SRI(DP_SYM32_ENC_VID_CRC_CONTROL, DP_SYM32_ENC, id)
+       SRI(DP_SYM32_ENC_VID_CRC_CONTROL, DP_SYM32_ENC, id), \
+       SRI(DP_SYM32_ENC_HBLANK_CONTROL, DP_SYM32_ENC, id)
 
 #define DCN3_1_HPO_DP_STREAM_ENC_REGS \
        uint32_t DP_STREAM_MAPPER_CONTROL0;\
        uint32_t DP_SYM32_ENC_SDP_GSP_CONTROL11;\
        uint32_t DP_SYM32_ENC_SDP_METADATA_PACKET_CONTROL;\
        uint32_t DP_SYM32_ENC_SDP_AUDIO_CONTROL0;\
-       uint32_t DP_SYM32_ENC_VID_CRC_CONTROL
+       uint32_t DP_SYM32_ENC_VID_CRC_CONTROL;\
+       uint32_t DP_SYM32_ENC_HBLANK_CONTROL
 
 
 #define DCN3_1_HPO_DP_STREAM_ENC_MASK_SH_LIST(mask_sh)\
        type GSP_SOF_REFERENCE;\
        type METADATA_PACKET_ENABLE;\
        type CRC_ENABLE;\
-       type CRC_CONT_MODE_ENABLE
+       type CRC_CONT_MODE_ENABLE;\
+       type HBLANK_MINIMUM_SYMBOL_WIDTH
 
 
 struct dcn31_hpo_dp_stream_encoder_registers {