@@ -1503,6 +1503,8 @@ static int hdcp2_deauthenticate_port(struct intel_connector *connector)
1503
1503
static int hdcp2_authentication_key_exchange (struct intel_connector * connector )
1504
1504
{
1505
1505
struct intel_display * display = to_intel_display (connector );
1506
+ struct intel_digital_port * dig_port =
1507
+ intel_attached_dig_port (connector );
1506
1508
struct intel_hdcp * hdcp = & connector -> hdcp ;
1507
1509
union {
1508
1510
struct hdcp2_ake_init ake_init ;
@@ -1513,30 +1515,36 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
1513
1515
} msgs ;
1514
1516
const struct intel_hdcp_shim * shim = hdcp -> shim ;
1515
1517
size_t size ;
1516
- int ret , i ;
1518
+ int ret , i , max_retries ;
1517
1519
1518
1520
/* Init for seq_num */
1519
1521
hdcp -> seq_num_v = 0 ;
1520
1522
hdcp -> seq_num_m = 0 ;
1521
1523
1524
+ if (intel_encoder_is_dp (& dig_port -> base ) ||
1525
+ intel_encoder_is_mst (& dig_port -> base ))
1526
+ max_retries = 10 ;
1527
+ else
1528
+ max_retries = 1 ;
1529
+
1522
1530
ret = hdcp2_prepare_ake_init (connector , & msgs .ake_init );
1523
1531
if (ret < 0 )
1524
1532
return ret ;
1525
1533
1526
1534
/*
1527
1535
* Retry the first read and write to downstream at least 10 times
1528
- * with a 50ms delay if not hdcp2 capable(dock decides to stop advertising
1529
- * hdcp2 capability for some reason). The reason being that
1530
- * during suspend resume dock usually keeps the HDCP2 registers inaccesible
1531
- * causing AUX error. This wouldn't be a big problem if the userspace
1532
- * just kept retrying with some delay while it continues to play low
1533
- * value content but most userpace applications end up throwing an error
1534
- * when it receives one from KMD. This makes sure we give the dock
1535
- * and the sink devices to complete its power cycle and then try HDCP
1536
- * authentication. The values of 10 and delay of 50ms was decided based
1537
- * on multiple trial and errors.
1536
+ * with a 50ms delay if not hdcp2 capable for DP/DPMST encoders
1537
+ * (dock decides to stop advertising hdcp2 capability for some reason).
1538
+ * The reason being that during suspend resume dock usually keeps the
1539
+ * HDCP2 registers inaccesible causing AUX error. This wouldn't be a
1540
+ * big problem if the userspace just kept retrying with some delay while
1541
+ * it continues to play low value content but most userpace applications
1542
+ * end up throwing an error when it receives one from KMD. This makes
1543
+ * sure we give the dock and the sink devices to complete its power cycle
1544
+ * and then try HDCP authentication. The values of 10 and delay of 50ms
1545
+ * was decided based on multiple trial and errors.
1538
1546
*/
1539
- for (i = 0 ; i < 10 ; i ++ ) {
1547
+ for (i = 0 ; i < max_retries ; i ++ ) {
1540
1548
if (!intel_hdcp2_get_capability (connector )) {
1541
1549
msleep (50 );
1542
1550
continue ;
0 commit comments