Skip to content

Commit d6a4e5e

Browse files
Igor Kravchenkoalexdeucher
authored andcommitted
drm/amd/display: Display goes blank after inst
[why] Display goes blank after driver installation. Aux tuning parameters must be used for 2.x only. Wrong dc_golden_table offset was used. [How] Implement a new enc3_hw_init function without VBIOS constants usage to be called for 3.x Calculate dc_golden_table offset using sum of base dce_info offset and golden table offset Signed-off-by: Igor Kravchenko <[email protected]> Reviewed-by: Aric Cyr <[email protected]> Acked-by: Aurabindo Pillai <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent ab2cf4c commit d6a4e5e

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2101,7 +2101,7 @@ static struct atom_dc_golden_table_v1 *bios_get_golden_table(
21012101
DATA_TABLES(dce_info));
21022102
if (!disp_cntl_tbl_4_4)
21032103
return NULL;
2104-
dc_golden_offset = disp_cntl_tbl_4_4->dc_golden_table_offset;
2104+
dc_golden_offset = DATA_TABLES(dce_info) + disp_cntl_tbl_4_4->dc_golden_table_offset;
21052105
*dc_golden_table_ver = disp_cntl_tbl_4_4->dc_golden_table_ver;
21062106
break;
21072107
}
@@ -2115,7 +2115,7 @@ static struct atom_dc_golden_table_v1 *bios_get_golden_table(
21152115
return NULL;
21162116

21172117
return GET_IMAGE(struct atom_dc_golden_table_v1,
2118-
dc_golden_offset);
2118+
dc_golden_offset);
21192119
}
21202120

21212121
static enum bp_result bios_get_atom_dc_golden_table(

drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dio_link_encoder.c

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ static const struct link_encoder_funcs dcn30_link_enc_funcs = {
6262
.read_state = link_enc2_read_state,
6363
.validate_output_with_stream =
6464
dcn30_link_encoder_validate_output_with_stream,
65-
.hw_init = enc2_hw_init,
65+
.hw_init = enc3_hw_init,
6666
.setup = dcn10_link_encoder_setup,
6767
.enable_tmds_output = dcn10_link_encoder_enable_tmds_output,
6868
.enable_dp_output = dcn20_link_encoder_enable_dp_output,
@@ -203,3 +203,54 @@ void dcn30_link_encoder_construct(
203203
enc10->base.features.flags.bits.HDMI_6GB_EN = 0;
204204
}
205205
}
206+
207+
#define AUX_REG(reg)\
208+
(enc10->aux_regs->reg)
209+
210+
#define AUX_REG_READ(reg_name) \
211+
dm_read_reg(CTX, AUX_REG(reg_name))
212+
213+
#define AUX_REG_WRITE(reg_name, val) \
214+
dm_write_reg(CTX, AUX_REG(reg_name), val)
215+
void enc3_hw_init(struct link_encoder *enc)
216+
{
217+
struct dcn10_link_encoder *enc10 = TO_DCN10_LINK_ENC(enc);
218+
219+
/*
220+
00 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__1to2 : 1/2
221+
01 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__3to4 : 3/4
222+
02 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__7to8 : 7/8
223+
03 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__15to16 : 15/16
224+
04 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__31to32 : 31/32
225+
05 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__63to64 : 63/64
226+
06 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__127to128 : 127/128
227+
07 - DP_AUX_DPHY_RX_DETECTION_THRESHOLD__255to256 : 255/256
228+
*/
229+
230+
/*
231+
AUX_REG_UPDATE_5(AUX_DPHY_RX_CONTROL0,
232+
AUX_RX_START_WINDOW = 1 [6:4]
233+
AUX_RX_RECEIVE_WINDOW = 1 default is 2 [10:8]
234+
AUX_RX_HALF_SYM_DETECT_LEN = 1 [13:12] default is 1
235+
AUX_RX_TRANSITION_FILTER_EN = 1 [16] default is 1
236+
AUX_RX_ALLOW_BELOW_THRESHOLD_PHASE_DETECT [17] is 0 default is 0
237+
AUX_RX_ALLOW_BELOW_THRESHOLD_START [18] is 1 default is 1
238+
AUX_RX_ALLOW_BELOW_THRESHOLD_STOP [19] is 1 default is 1
239+
AUX_RX_PHASE_DETECT_LEN, [21,20] = 0x3 default is 3
240+
AUX_RX_DETECTION_THRESHOLD [30:28] = 1
241+
*/
242+
AUX_REG_WRITE(AUX_DPHY_RX_CONTROL0, 0x103d1110);
243+
244+
AUX_REG_WRITE(AUX_DPHY_TX_CONTROL, 0x21c7a);
245+
246+
//AUX_DPHY_TX_REF_CONTROL'AUX_TX_REF_DIV HW default is 0x32;
247+
// Set AUX_TX_REF_DIV Divider to generate 2 MHz reference from refclk
248+
// 27MHz -> 0xd
249+
// 100MHz -> 0x32
250+
// 48MHz -> 0x18
251+
252+
// Set TMDS_CTL0 to 1. This is a legacy setting.
253+
REG_UPDATE(TMDS_CTL_BITS, TMDS_CTL0, 1);
254+
255+
dcn10_aux_initialize(enc10);
256+
}

drivers/gpu/drm/amd/display/dc/dcn30/dcn30_dio_link_encoder.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,6 @@ void dcn30_link_encoder_construct(
7373
const struct dcn10_link_enc_shift *link_shift,
7474
const struct dcn10_link_enc_mask *link_mask);
7575

76+
void enc3_hw_init(struct link_encoder *enc);
77+
7678
#endif /* __DC_LINK_ENCODER__DCN30_H__ */

0 commit comments

Comments
 (0)