Skip to content

Commit e0d20a7

Browse files
Timur Kristófalexdeucher
authored andcommitted
drm/amd/display: Add missing encoder setup to DACnEncoderControl
Apparently the DAC encoder needs to be set up before use. The BIOS parser in DC did not support this so I assumed it was not necessary, but the DAC doesn't work without it on some GPUs. Fixes: 69b29b8 ("drm/amd/display: Hook up DAC to bios_parser_encoder_control") Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit bb5dfe2)
1 parent fd40c14 commit e0d20a7

3 files changed

Lines changed: 15 additions & 12 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -763,14 +763,14 @@ static enum bp_result bios_parser_encoder_control(
763763
return BP_RESULT_FAILURE;
764764

765765
return bp->cmd_tbl.dac1_encoder_control(
766-
bp, cntl->action == ENCODER_CONTROL_ENABLE,
766+
bp, cntl->action,
767767
cntl->pixel_clock, ATOM_DAC1_PS2);
768768
} else if (cntl->engine_id == ENGINE_ID_DACB) {
769769
if (!bp->cmd_tbl.dac2_encoder_control)
770770
return BP_RESULT_FAILURE;
771771

772772
return bp->cmd_tbl.dac2_encoder_control(
773-
bp, cntl->action == ENCODER_CONTROL_ENABLE,
773+
bp, cntl->action,
774774
cntl->pixel_clock, ATOM_DAC1_PS2);
775775
}
776776

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

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,12 +1838,12 @@ static enum bp_result select_crtc_source_v3(
18381838

18391839
static enum bp_result dac1_encoder_control_v1(
18401840
struct bios_parser *bp,
1841-
bool enable,
1841+
enum bp_encoder_control_action action,
18421842
uint32_t pixel_clock,
18431843
uint8_t dac_standard);
18441844
static enum bp_result dac2_encoder_control_v1(
18451845
struct bios_parser *bp,
1846-
bool enable,
1846+
enum bp_encoder_control_action action,
18471847
uint32_t pixel_clock,
18481848
uint8_t dac_standard);
18491849

@@ -1869,12 +1869,15 @@ static void init_dac_encoder_control(struct bios_parser *bp)
18691869

18701870
static void dac_encoder_control_prepare_params(
18711871
DAC_ENCODER_CONTROL_PS_ALLOCATION *params,
1872-
bool enable,
1872+
enum bp_encoder_control_action action,
18731873
uint32_t pixel_clock,
18741874
uint8_t dac_standard)
18751875
{
18761876
params->ucDacStandard = dac_standard;
1877-
if (enable)
1877+
if (action == ENCODER_CONTROL_SETUP ||
1878+
action == ENCODER_CONTROL_INIT)
1879+
params->ucAction = ATOM_ENCODER_INIT;
1880+
else if (action == ENCODER_CONTROL_ENABLE)
18781881
params->ucAction = ATOM_ENABLE;
18791882
else
18801883
params->ucAction = ATOM_DISABLE;
@@ -1887,7 +1890,7 @@ static void dac_encoder_control_prepare_params(
18871890

18881891
static enum bp_result dac1_encoder_control_v1(
18891892
struct bios_parser *bp,
1890-
bool enable,
1893+
enum bp_encoder_control_action action,
18911894
uint32_t pixel_clock,
18921895
uint8_t dac_standard)
18931896
{
@@ -1896,7 +1899,7 @@ static enum bp_result dac1_encoder_control_v1(
18961899

18971900
dac_encoder_control_prepare_params(
18981901
&params,
1899-
enable,
1902+
action,
19001903
pixel_clock,
19011904
dac_standard);
19021905

@@ -1908,7 +1911,7 @@ static enum bp_result dac1_encoder_control_v1(
19081911

19091912
static enum bp_result dac2_encoder_control_v1(
19101913
struct bios_parser *bp,
1911-
bool enable,
1914+
enum bp_encoder_control_action action,
19121915
uint32_t pixel_clock,
19131916
uint8_t dac_standard)
19141917
{
@@ -1917,7 +1920,7 @@ static enum bp_result dac2_encoder_control_v1(
19171920

19181921
dac_encoder_control_prepare_params(
19191922
&params,
1920-
enable,
1923+
action,
19211924
pixel_clock,
19221925
dac_standard);
19231926

drivers/gpu/drm/amd/display/dc/bios/command_table.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ struct cmd_tbl {
5757
struct bp_crtc_source_select *bp_params);
5858
enum bp_result (*dac1_encoder_control)(
5959
struct bios_parser *bp,
60-
bool enable,
60+
enum bp_encoder_control_action action,
6161
uint32_t pixel_clock,
6262
uint8_t dac_standard);
6363
enum bp_result (*dac2_encoder_control)(
6464
struct bios_parser *bp,
65-
bool enable,
65+
enum bp_encoder_control_action action,
6666
uint32_t pixel_clock,
6767
uint8_t dac_standard);
6868
enum bp_result (*dac1_output_control)(

0 commit comments

Comments
 (0)