mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 23:21:46 +00:00
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: Nikola Cornij <nikola.cornij@amd.com> Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> Acked-by: Harry Wentland <harry.wentland@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
794550c6ea
commit
c733e40c74
1 changed files with 30 additions and 5 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue