mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 07:03:03 +02:00
drm/amd/display: Disable FEC when powering down encoders
[why & how] VBIOS DMCUB FW can enable FEC for capable eDPs, but S/W DC state is only updated for link0 when transitioning into OS with driver loaded. This causes issues when the eDP is immediately hidden and DIG0 is assigned to another link that does not support FEC. Driver will attempt to disable FEC but FEC enablement occurs based on the link state, which does not have fec_state updated since it is a different link. Thus, FEC disablement on DIG0 will get skipped and cause no light up. Reviewed-by: Karen Chen <karen.chen@amd.com> Signed-off-by: Ovidiu Bunea <ovidiu.bunea@amd.com> Signed-off-by: Matthew Stewart <matthew.stewart2@amd.com> Tested-by: Dan Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
9427828839
commit
8cee62904c
|
|
@ -59,6 +59,7 @@
|
|||
#include "dc_state_priv.h"
|
||||
#include "dpcd_defs.h"
|
||||
#include "dsc.h"
|
||||
#include "dc_dp_types.h"
|
||||
/* include DCE11 register header files */
|
||||
#include "dce/dce_11_0_d.h"
|
||||
#include "dce/dce_11_0_sh_mask.h"
|
||||
|
|
@ -1759,20 +1760,25 @@ static void power_down_encoders(struct dc *dc)
|
|||
int i;
|
||||
|
||||
for (i = 0; i < dc->link_count; i++) {
|
||||
enum signal_type signal = dc->links[i]->connector_signal;
|
||||
|
||||
dc->link_srv->blank_dp_stream(dc->links[i], false);
|
||||
struct dc_link *link = dc->links[i];
|
||||
struct link_encoder *link_enc = link->link_enc;
|
||||
enum signal_type signal = link->connector_signal;
|
||||
|
||||
dc->link_srv->blank_dp_stream(link, false);
|
||||
if (signal != SIGNAL_TYPE_EDP)
|
||||
signal = SIGNAL_TYPE_NONE;
|
||||
|
||||
if (dc->links[i]->ep_type == DISPLAY_ENDPOINT_PHY)
|
||||
dc->links[i]->link_enc->funcs->disable_output(
|
||||
dc->links[i]->link_enc, signal);
|
||||
if (link->ep_type == DISPLAY_ENDPOINT_PHY)
|
||||
link_enc->funcs->disable_output(link_enc, signal);
|
||||
|
||||
dc->links[i]->link_status.link_active = false;
|
||||
memset(&dc->links[i]->cur_link_settings, 0,
|
||||
sizeof(dc->links[i]->cur_link_settings));
|
||||
if (link->fec_state == dc_link_fec_enabled) {
|
||||
link_enc->funcs->fec_set_enable(link_enc, false);
|
||||
link_enc->funcs->fec_set_ready(link_enc, false);
|
||||
link->fec_state = dc_link_fec_not_ready;
|
||||
}
|
||||
|
||||
link->link_status.link_active = false;
|
||||
memset(&link->cur_link_settings, 0, sizeof(link->cur_link_settings));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user