Merge tag 'drm-intel-next-fixes-2024-11-21' of https://gitlab.freedesktop.org/drm/i915/kernel into drm-next

- Fix when the first read and write are retried [hdcp] (Suraj Kandpal)

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Tvrtko Ursulin <tursulin@igalia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/Zz7xWbodMn9zZD_C@linux
This commit is contained in:
Dave Airlie
2024-11-27 11:04:06 +10:00

View File

@@ -1503,6 +1503,8 @@ static int hdcp2_deauthenticate_port(struct intel_connector *connector)
static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
{
struct intel_display *display = to_intel_display(connector);
struct intel_digital_port *dig_port =
intel_attached_dig_port(connector);
struct intel_hdcp *hdcp = &connector->hdcp;
union {
struct hdcp2_ake_init ake_init;
@@ -1513,30 +1515,36 @@ static int hdcp2_authentication_key_exchange(struct intel_connector *connector)
} msgs;
const struct intel_hdcp_shim *shim = hdcp->shim;
size_t size;
int ret, i;
int ret, i, max_retries;
/* Init for seq_num */
hdcp->seq_num_v = 0;
hdcp->seq_num_m = 0;
if (intel_encoder_is_dp(&dig_port->base) ||
intel_encoder_is_mst(&dig_port->base))
max_retries = 10;
else
max_retries = 1;
ret = hdcp2_prepare_ake_init(connector, &msgs.ake_init);
if (ret < 0)
return ret;
/*
* Retry the first read and write to downstream at least 10 times
* with a 50ms delay if not hdcp2 capable(dock decides to stop advertising
* hdcp2 capability for some reason). The reason being that
* during suspend resume dock usually keeps the HDCP2 registers inaccesible
* causing AUX error. This wouldn't be a big problem if the userspace
* just kept retrying with some delay while it continues to play low
* value content but most userpace applications end up throwing an error
* when it receives one from KMD. This makes sure we give the dock
* and the sink devices to complete its power cycle and then try HDCP
* authentication. The values of 10 and delay of 50ms was decided based
* on multiple trial and errors.
* with a 50ms delay if not hdcp2 capable for DP/DPMST encoders
* (dock decides to stop advertising hdcp2 capability for some reason).
* The reason being that during suspend resume dock usually keeps the
* HDCP2 registers inaccesible causing AUX error. This wouldn't be a
* big problem if the userspace just kept retrying with some delay while
* it continues to play low value content but most userpace applications
* end up throwing an error when it receives one from KMD. This makes
* sure we give the dock and the sink devices to complete its power cycle
* and then try HDCP authentication. The values of 10 and delay of 50ms
* was decided based on multiple trial and errors.
*/
for (i = 0; i < 10; i++) {
for (i = 0; i < max_retries; i++) {
if (!intel_hdcp2_get_capability(connector)) {
msleep(50);
continue;