Commit 72bb5030 authored by hersen wu's avatar hersen wu Committed by Alex Deucher
Browse files

drm/amd/display: Reboot while unplug hdcp enabled dp from mst hub



[Why]
event_property_update does not check NULL pointer

[How]
check aconnector->base.state equals NULL

Reviewed-by: default avatarBhawanpreet Lakha <Bhawanpreet.Lakha@amd.com>
Acked-by: default avatarAlex Hung <alex.hung@amd.com>
Signed-off-by: default avatarhersen wu <hersenxs.wu@amd.com>
Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent f46e3f28
Loading
Loading
Loading
Loading
+22 −12
Original line number Diff line number Diff line
@@ -302,7 +302,7 @@ static void event_property_update(struct work_struct *work)
	mutex_lock(&hdcp_work->mutex);


	if (aconnector->base.state->commit) {
	if (aconnector->base.state && aconnector->base.state->commit) {
		ret = wait_for_completion_interruptible_timeout(&aconnector->base.state->commit->hw_done, 10 * HZ);

		if (ret == 0) {
@@ -311,17 +311,25 @@ static void event_property_update(struct work_struct *work)
		}
	}

	if (aconnector->base.state) {
		if (hdcp_work->encryption_status != MOD_HDCP_ENCRYPTION_STATUS_HDCP_OFF) {
		if (aconnector->base.state->hdcp_content_type == DRM_MODE_HDCP_CONTENT_TYPE0 &&
		    hdcp_work->encryption_status <= MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE0_ON)
			drm_hdcp_update_content_protection(&aconnector->base, DRM_MODE_CONTENT_PROTECTION_ENABLED);
		else if (aconnector->base.state->hdcp_content_type == DRM_MODE_HDCP_CONTENT_TYPE1 &&
			 hdcp_work->encryption_status == MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE1_ON)
			drm_hdcp_update_content_protection(&aconnector->base, DRM_MODE_CONTENT_PROTECTION_ENABLED);
			if (aconnector->base.state->hdcp_content_type ==
				DRM_MODE_HDCP_CONTENT_TYPE0 &&
			hdcp_work->encryption_status <=
				MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE0_ON)
				drm_hdcp_update_content_protection(&aconnector->base,
					DRM_MODE_CONTENT_PROTECTION_ENABLED);
			else if (aconnector->base.state->hdcp_content_type ==
					DRM_MODE_HDCP_CONTENT_TYPE1 &&
				hdcp_work->encryption_status ==
					MOD_HDCP_ENCRYPTION_STATUS_HDCP2_TYPE1_ON)
				drm_hdcp_update_content_protection(&aconnector->base,
					DRM_MODE_CONTENT_PROTECTION_ENABLED);
		} else {
		drm_hdcp_update_content_protection(&aconnector->base, DRM_MODE_CONTENT_PROTECTION_DESIRED);
			drm_hdcp_update_content_protection(&aconnector->base,
				DRM_MODE_CONTENT_PROTECTION_DESIRED);
		}
	}


	mutex_unlock(&hdcp_work->mutex);
	drm_modeset_unlock(&dev->mode_config.connection_mutex);
@@ -495,7 +503,9 @@ static void update_config(void *handle, struct cp_psp_stream_config *config)
			(!!aconnector->base.state) ? aconnector->base.state->content_protection : -1,
			(!!aconnector->base.state) ? aconnector->base.state->hdcp_content_type : -1);

	hdcp_update_display(hdcp_work, link_index, aconnector, conn_state->hdcp_content_type, false);
	if (conn_state)
		hdcp_update_display(hdcp_work, link_index, aconnector,
			conn_state->hdcp_content_type, false);
}