| From 51c075fbf45e86de859b24e2c965538b41fd00ec Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 2 Feb 2026 12:25:05 +0100 |
| Subject: drm/amd/display: Initialize DAC in DCE link encoder using VBIOS |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Timur Kristóf <timur.kristof@gmail.com> |
| |
| [ Upstream commit e2a024345bce78a8e1ed7d9e84c859b05979e41e ] |
| |
| The VBIOS DAC1EncoderControl() function can initialize the DAC, |
| by writing board-specific values to certain registers. |
| Call this at link encoder hardware initialization time similarly |
| to how the equivalent UNIPHYTransmitterControl initialization |
| is done. |
| |
| This fixes DAC output on the Radeon HD 7790. |
| |
| Also remove the ENCODER_CONTROL_SETUP enum from the |
| dac_encoder_control_prepare_params function which is actually |
| not a supported operation for DAC encoders. |
| |
| Fixes: 0fbe321a93ce ("drm/amd/display: Implement DCE analog link encoders (v2)") |
| Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> |
| Tested-by: Mauro Rossi <issor.oruam@gmail.com> |
| Suggested-by: Alex Deucher <alexander.deucher@amd.com> |
| Reviewed-by: Alex Hung <alex.hung@amd.com> |
| Signed-off-by: Alex Deucher <alexander.deucher@amd.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/amd/display/dc/bios/command_table.c | 3 +-- |
| drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c | 10 ++++++++++ |
| 2 files changed, 11 insertions(+), 2 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/amd/display/dc/bios/command_table.c b/drivers/gpu/drm/amd/display/dc/bios/command_table.c |
| index 76a3559f0ddc1..b692fa37402d9 100644 |
| --- a/drivers/gpu/drm/amd/display/dc/bios/command_table.c |
| +++ b/drivers/gpu/drm/amd/display/dc/bios/command_table.c |
| @@ -1874,8 +1874,7 @@ static void dac_encoder_control_prepare_params( |
| uint8_t dac_standard) |
| { |
| params->ucDacStandard = dac_standard; |
| - if (action == ENCODER_CONTROL_SETUP || |
| - action == ENCODER_CONTROL_INIT) |
| + if (action == ENCODER_CONTROL_INIT) |
| params->ucAction = ATOM_ENCODER_INIT; |
| else if (action == ENCODER_CONTROL_ENABLE) |
| params->ucAction = ATOM_ENABLE; |
| diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c |
| index 2e742950a62c7..48a1b3b492e7f 100644 |
| --- a/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c |
| +++ b/drivers/gpu/drm/amd/display/dc/dce/dce_link_encoder.c |
| @@ -1033,6 +1033,16 @@ void dce110_link_encoder_hw_init( |
| cntl.coherent = false; |
| cntl.hpd_sel = enc110->base.hpd_source; |
| |
| + if (enc110->base.analog_engine != ENGINE_ID_UNKNOWN) { |
| + result = link_dac_encoder_control(enc110, ENCODER_CONTROL_INIT, 0); |
| + if (result != BP_RESULT_OK) { |
| + DC_LOG_ERROR("%s: Failed to execute VBIOS command table for DAC!\n", |
| + __func__); |
| + BREAK_TO_DEBUGGER(); |
| + return; |
| + } |
| + } |
| + |
| /* The code below is only applicable to encoders with a digital transmitter. */ |
| if (enc110->base.transmitter == TRANSMITTER_UNKNOWN) |
| return; |
| -- |
| 2.51.0 |
| |