Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/amd/display: Partition DPCD address space and break up transactions

[WHY]
SCR for DP 2.0 spec says that multiple LTTPRs must not be accessed in a
single AUX transaction.
There may be other places in future where breaking up AUX accesses is
necessary.

[HOW]
Partition the entire DPCD address space into blocks. When an incoming AUX
request spans multiple blocks, break up the request into multiple requests.

Signed-off-by: Wesley Chalmers <Wesley.Chalmers@amd.com>
Reviewed-by: Jun Lei <Jun.Lei@amd.com>
Acked-by: Anson Jacob <Anson.Jacob@amd.com>
Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Wesley Chalmers and committed by
Alex Deucher
9cf9498f 95ad72f4

+102 -2
+17
include/drm/drm_dp_helper.h
··· 1377 1377 #define DP_SYMBOL_ERROR_COUNT_LANE1_PHY_REPEATER1 0xf0037 /* 1.3 */ 1378 1378 #define DP_SYMBOL_ERROR_COUNT_LANE2_PHY_REPEATER1 0xf0039 /* 1.3 */ 1379 1379 #define DP_SYMBOL_ERROR_COUNT_LANE3_PHY_REPEATER1 0xf003b /* 1.3 */ 1380 + 1381 + #define __DP_FEC1_BASE 0xf0290 /* 1.4 */ 1382 + #define __DP_FEC2_BASE 0xf0298 /* 1.4 */ 1383 + #define DP_FEC_BASE(dp_phy) \ 1384 + (__DP_FEC1_BASE + ((__DP_FEC2_BASE - __DP_FEC1_BASE) * \ 1385 + ((dp_phy) - DP_PHY_LTTPR1))) 1386 + 1387 + #define DP_FEC_REG(dp_phy, fec1_reg) \ 1388 + (DP_FEC_BASE(dp_phy) - DP_FEC_BASE(DP_PHY_LTTPR1) + fec1_reg) 1389 + 1380 1390 #define DP_FEC_STATUS_PHY_REPEATER1 0xf0290 /* 1.4 */ 1391 + #define DP_FEC_STATUS_PHY_REPEATER(dp_phy) \ 1392 + DP_FEC_REG(dp_phy, DP_FEC_STATUS_PHY_REPEATER1) 1393 + 1381 1394 #define DP_FEC_ERROR_COUNT_PHY_REPEATER1 0xf0291 /* 1.4 */ 1382 1395 #define DP_FEC_CAPABILITY_PHY_REPEATER1 0xf0294 /* 1.4a */ 1396 + 1397 + #define DP_LTTPR_MAX_ADD 0xf02ff /* 1.4 */ 1398 + 1399 + #define DP_DPCD_MAX_ADD 0xfffff /* 1.4 */ 1383 1400 1384 1401 /* Repeater modes */ 1385 1402 #define DP_PHY_REPEATER_MODE_TRANSPARENT 0x55 /* 1.3 */