Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c733e40c authored by Nikola Cornij's avatar Nikola Cornij Committed by Alex Deucher
Browse files

drm/amd/display: Read DP_SINK_COUNT_ESI range on HPD for DP 1.4



DP 1.4 compliance now requires that registers at DP_SINK_COUNT_ESI range
(0x2002-0x2003, 0x200c-0x200f) are read instead of DP_SINK_COUNT range
(0x200-0x2005.

Signed-off-by: default avatarNikola Cornij <nikola.cornij@amd.com>
Reviewed-by: default avatarTony Cheng <Tony.Cheng@amd.com>
Acked-by: default avatarHarry Wentland <harry.wentland@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 794550c6
Loading
Loading
Loading
Loading
+30 −5
Original line number Diff line number Diff line
@@ -1630,17 +1630,42 @@ static enum dc_status read_hpd_rx_irq_data(
	struct dc_link *link,
	union hpd_irq_data *irq_data)
{
	static enum dc_status retval;

	/* The HW reads 16 bytes from 200h on HPD,
	 * but if we get an AUX_DEFER, the HW cannot retry
	 * and this causes the CTS tests 4.3.2.1 - 3.2.4 to
	 * fail, so we now explicitly read 6 bytes which is
	 * the req from the above mentioned test cases.
	 *
	 * For DP 1.4 we need to read those from 2002h range.
	 */
	return core_link_read_dpcd(
	if (link->dpcd_caps.dpcd_rev.raw < DPCD_REV_14)
		retval = core_link_read_dpcd(
			link,
			DP_SINK_COUNT,
			irq_data->raw,
			sizeof(union hpd_irq_data));
	else {
		/* Read 2 bytes at this location,... */
		retval = core_link_read_dpcd(
			link,
			DP_SINK_COUNT_ESI,
			irq_data->raw,
			2);

		if (retval != DC_OK)
			return retval;

		/* ... then read remaining 4 at the other location */
		retval = core_link_read_dpcd(
			link,
			DP_LANE0_1_STATUS_ESI,
			&irq_data->raw[2],
			4);
	}

	return retval;
}

static bool allow_hpd_rx_irq(const struct dc_link *link)