Commit b466ad55 authored by Peichen Huang's avatar Peichen Huang Committed by Alex Deucher
Browse files

drm/amd/display: not skip hpd irq for bw alloc mode



[WHY]
Driver only process hpd irq when a branch device or when
the link is established. It would cause some irq for bw_alloc
mode of dp tunneling are ignored.

[HOW]
Driver should process hpd irq if bw_alloc and dp tunneling
are enabled.

Reviewed-by: default avatarCruise Hung <cruise.hung@amd.com>
Signed-off-by: default avatarPeichen Huang <PeiChen.Huang@amd.com>
Signed-off-by: default avatarAurabindo Pillai <aurabindo.pillai@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent b9a21a37
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -273,17 +273,28 @@ bool link_dpia_enable_usb4_dp_bw_alloc_mode(struct dc_link *link)
 */
void link_dp_dpia_handle_bw_alloc_status(struct dc_link *link, uint8_t status)
{
	link->dpia_bw_alloc_config.estimated_bw = get_estimated_bw(link);

	if (status & DP_TUNNELING_BW_REQUEST_SUCCEEDED) {
		DC_LOG_DEBUG("%s: BW Allocation request succeeded on link(%d)",
				__func__, link->link_index);
	} else if (status & DP_TUNNELING_BW_REQUEST_FAILED) {
	}

	if (status & DP_TUNNELING_BW_REQUEST_FAILED) {
		DC_LOG_DEBUG("%s: BW Allocation request failed on link(%d)  allocated/estimated BW=%d",
				__func__, link->link_index, link->dpia_bw_alloc_config.estimated_bw);

		link_dpia_send_bw_alloc_request(link, link->dpia_bw_alloc_config.estimated_bw);
	} else if (status & DP_TUNNELING_ESTIMATED_BW_CHANGED) {
	}

	if (status & DP_TUNNELING_BW_ALLOC_CAP_CHANGED) {
		link->dpia_bw_alloc_config.bw_granularity = get_bw_granularity(link);

		DC_LOG_DEBUG("%s: Granularity changed on link(%d)  new granularity=%d",
				__func__, link->link_index, link->dpia_bw_alloc_config.bw_granularity);
	}

	if (status & DP_TUNNELING_ESTIMATED_BW_CHANGED) {
		link->dpia_bw_alloc_config.estimated_bw = get_estimated_bw(link);

		DC_LOG_DEBUG("%s: Estimated BW changed on link(%d)  new estimated BW=%d",
				__func__, link->link_index, link->dpia_bw_alloc_config.estimated_bw);
	}
+3 −1
Original line number Diff line number Diff line
@@ -398,10 +398,12 @@ bool dp_should_allow_hpd_rx_irq(const struct dc_link *link)
	 * Don't handle RX IRQ unless one of following is met:
	 * 1) The link is established (cur_link_settings != unknown)
	 * 2) We know we're dealing with a branch device, SST or MST
	 * 3) The link is bw_alloc enabled.
	 */

	if ((link->cur_link_settings.lane_count != LANE_COUNT_UNKNOWN) ||
		is_dp_branch_device(link))
		is_dp_branch_device(link) ||
		link->dpia_bw_alloc_config.bw_alloc_enabled)
		return true;

	return false;