Commit 10a36226 authored by Wayne Lin's avatar Wayne Lin Committed by Alex Deucher

drm/amd/display: Revert "drm/amd/display: Add flag to detect dpms force off during HPD"

This reverts commit 035f5496.

The reverted commit was trying to fix side effect brought by
commit 3c4d55c9 ("drm/amd/display: turn DPMS off on connector unplug")

However,
* This reverted commit will have mst case never call dm_set_dpms_off()
  which conflicts the idea of original commit 3c4d55c9 ("drm/amd/display: turn DPMS off on connector unplug")
  That's due to dm_crtc_state is always null since the input parameter
  aconnector is the root device (source) of mst topology.  It's not an
  end stream sink within the mst topology.
* Setting dpms off should be triggered by usermode. Besdies, it seems
  usermode does release relevant resource for mst & non-mst case when
  unplug connecotr now. Which means we no longer need both commits now:
  commit 3c4d55c9 ("drm/amd/display: turn DPMS off on connector unplug")
  commit 035f5496 ("drm/amd/display: Add flag to detect dpms force off during HPD")
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Reviewed-by: default avatarAurabindo Jayamohanan Pillai <Aurabindo.Pillai@amd.com>
Acked-by: default avatarRodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Acked-by: default avatarLyude Paul <lyude@redhat.com>
Signed-off-by: default avatarWayne Lin <Wayne.Lin@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 4dd905fd
...@@ -2583,7 +2583,7 @@ static void dm_gpureset_commit_state(struct dc_state *dc_state, ...@@ -2583,7 +2583,7 @@ static void dm_gpureset_commit_state(struct dc_state *dc_state,
return; return;
} }
static void dm_set_dpms_off(struct dc_link *link, struct dm_crtc_state *acrtc_state) static void dm_set_dpms_off(struct dc_link *link)
{ {
struct dc_stream_state *stream_state; struct dc_stream_state *stream_state;
struct amdgpu_dm_connector *aconnector = link->priv; struct amdgpu_dm_connector *aconnector = link->priv;
...@@ -2604,7 +2604,6 @@ static void dm_set_dpms_off(struct dc_link *link, struct dm_crtc_state *acrtc_st ...@@ -2604,7 +2604,6 @@ static void dm_set_dpms_off(struct dc_link *link, struct dm_crtc_state *acrtc_st
} }
stream_update.stream = stream_state; stream_update.stream = stream_state;
acrtc_state->force_dpms_off = true;
dc_commit_updates_for_stream(stream_state->ctx->dc, NULL, 0, dc_commit_updates_for_stream(stream_state->ctx->dc, NULL, 0,
stream_state, &stream_update, stream_state, &stream_update,
stream_state->ctx->dc->current_state); stream_state->ctx->dc->current_state);
...@@ -3061,16 +3060,13 @@ static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector) ...@@ -3061,16 +3060,13 @@ static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector)
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
enum dc_connection_type new_connection_type = dc_connection_none; enum dc_connection_type new_connection_type = dc_connection_none;
struct amdgpu_device *adev = drm_to_adev(dev); struct amdgpu_device *adev = drm_to_adev(dev);
#ifdef CONFIG_DRM_AMD_DC_HDCP
struct dm_connector_state *dm_con_state = to_dm_connector_state(connector->state); struct dm_connector_state *dm_con_state = to_dm_connector_state(connector->state);
struct dm_crtc_state *dm_crtc_state = NULL; #endif
if (adev->dm.disable_hpd_irq) if (adev->dm.disable_hpd_irq)
return; return;
if (dm_con_state->base.state && dm_con_state->base.crtc)
dm_crtc_state = to_dm_crtc_state(drm_atomic_get_crtc_state(
dm_con_state->base.state,
dm_con_state->base.crtc));
/* /*
* In case of failure or MST no need to update connector status or notify the OS * In case of failure or MST no need to update connector status or notify the OS
* since (for MST case) MST does this in its own context. * since (for MST case) MST does this in its own context.
...@@ -3101,9 +3097,8 @@ static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector) ...@@ -3101,9 +3097,8 @@ static void handle_hpd_irq_helper(struct amdgpu_dm_connector *aconnector)
} else if (dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD)) { } else if (dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD)) {
if (new_connection_type == dc_connection_none && if (new_connection_type == dc_connection_none &&
aconnector->dc_link->type == dc_connection_none && aconnector->dc_link->type == dc_connection_none)
dm_crtc_state) dm_set_dpms_off(aconnector->dc_link);
dm_set_dpms_off(aconnector->dc_link, dm_crtc_state);
amdgpu_dm_update_connector_after_detect(aconnector); amdgpu_dm_update_connector_after_detect(aconnector);
...@@ -6840,7 +6835,6 @@ dm_crtc_duplicate_state(struct drm_crtc *crtc) ...@@ -6840,7 +6835,6 @@ dm_crtc_duplicate_state(struct drm_crtc *crtc)
state->freesync_config = cur->freesync_config; state->freesync_config = cur->freesync_config;
state->cm_has_degamma = cur->cm_has_degamma; state->cm_has_degamma = cur->cm_has_degamma;
state->cm_is_degamma_srgb = cur->cm_is_degamma_srgb; state->cm_is_degamma_srgb = cur->cm_is_degamma_srgb;
state->force_dpms_off = cur->force_dpms_off;
state->mpo_requested = cur->mpo_requested; state->mpo_requested = cur->mpo_requested;
/* TODO Duplicate dc_stream after objects are stream object is flattened */ /* TODO Duplicate dc_stream after objects are stream object is flattened */
...@@ -9579,8 +9573,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state, ...@@ -9579,8 +9573,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
* and rely on sending it from software. * and rely on sending it from software.
*/ */
if (acrtc_attach->base.state->event && if (acrtc_attach->base.state->event &&
acrtc_state->active_planes > 0 && acrtc_state->active_planes > 0) {
!acrtc_state->force_dpms_off) {
drm_crtc_vblank_get(pcrtc); drm_crtc_vblank_get(pcrtc);
spin_lock_irqsave(&pcrtc->dev->event_lock, flags); spin_lock_irqsave(&pcrtc->dev->event_lock, flags);
......
...@@ -639,8 +639,6 @@ struct dm_crtc_state { ...@@ -639,8 +639,6 @@ struct dm_crtc_state {
bool dsc_force_changed; bool dsc_force_changed;
bool vrr_supported; bool vrr_supported;
bool force_dpms_off;
struct mod_freesync_config freesync_config; struct mod_freesync_config freesync_config;
struct dc_info_packet vrr_infopacket; struct dc_info_packet vrr_infopacket;
......
...@@ -448,7 +448,6 @@ static void update_config(void *handle, struct cp_psp_stream_config *config) ...@@ -448,7 +448,6 @@ static void update_config(void *handle, struct cp_psp_stream_config *config)
struct mod_hdcp_display *display = &hdcp_work[link_index].display; struct mod_hdcp_display *display = &hdcp_work[link_index].display;
struct mod_hdcp_link *link = &hdcp_work[link_index].link; struct mod_hdcp_link *link = &hdcp_work[link_index].link;
struct drm_connector_state *conn_state; struct drm_connector_state *conn_state;
struct dc_sink *sink = NULL;
bool link_is_hdcp14 = false; bool link_is_hdcp14 = false;
if (config->dpms_off) { if (config->dpms_off) {
...@@ -462,13 +461,8 @@ static void update_config(void *handle, struct cp_psp_stream_config *config) ...@@ -462,13 +461,8 @@ static void update_config(void *handle, struct cp_psp_stream_config *config)
display->index = aconnector->base.index; display->index = aconnector->base.index;
display->state = MOD_HDCP_DISPLAY_ACTIVE; display->state = MOD_HDCP_DISPLAY_ACTIVE;
if (aconnector->dc_sink) if (aconnector->dc_sink != NULL)
sink = aconnector->dc_sink; link->mode = mod_hdcp_signal_type_to_operation_mode(aconnector->dc_sink->sink_signal);
else if (aconnector->dc_em_sink)
sink = aconnector->dc_em_sink;
if (sink != NULL)
link->mode = mod_hdcp_signal_type_to_operation_mode(sink->sink_signal);
display->controller = CONTROLLER_ID_D0 + config->otg_inst; display->controller = CONTROLLER_ID_D0 + config->otg_inst;
display->dig_fe = config->dig_fe; display->dig_fe = config->dig_fe;
...@@ -478,8 +472,9 @@ static void update_config(void *handle, struct cp_psp_stream_config *config) ...@@ -478,8 +472,9 @@ static void update_config(void *handle, struct cp_psp_stream_config *config)
link->link_enc_idx = config->link_enc_idx; link->link_enc_idx = config->link_enc_idx;
link->dio_output_id = config->dio_output_idx; link->dio_output_id = config->dio_output_idx;
link->phy_idx = config->phy_idx; link->phy_idx = config->phy_idx;
if (sink)
link_is_hdcp14 = dc_link_is_hdcp14(aconnector->dc_link, sink->sink_signal); link->hdcp_supported_informational = dc_link_is_hdcp14(aconnector->dc_link,
aconnector->dc_sink->sink_signal) ? 1 : 0;
link->hdcp_supported_informational = link_is_hdcp14; link->hdcp_supported_informational = link_is_hdcp14;
link->dp.rev = aconnector->dc_link->dpcd_caps.dpcd_rev.raw; link->dp.rev = aconnector->dc_link->dpcd_caps.dpcd_rev.raw;
link->dp.assr_enabled = config->assr_enabled; link->dp.assr_enabled = config->assr_enabled;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment