]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/i915/hdcp: use generic poll_timeout_us() instead of wait_for()
authorJani Nikula <jani.nikula@intel.com>
Thu, 28 Aug 2025 12:20:45 +0000 (15:20 +0300)
committerJani Nikula <jani.nikula@intel.com>
Thu, 4 Sep 2025 11:02:58 +0000 (14:02 +0300)
Prefer generic poll helpers over i915 custom helpers.

The functional change is losing the exponentially growing sleep of
wait_for(), which used to be 10, 20, 40, ..., 640, and 1280 us.

Use an arbitrary constant 100 us sleep instead. The timeout remains at 1
ms.

While at it, use the last failing value for debug logging instead of
reading it again.

Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Link: https://lore.kernel.org/r/2871a07337401c25ef3df44073c5e78fedc45e8e.1756383233.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/display/intel_hdcp.c

index 7af3dffa1eb0b86ae61e4e0d3a773260368149dc..910e34bd73a91eec75783dfff3b821944b3b2eae 100644 (file)
@@ -817,6 +817,7 @@ static int intel_hdcp_auth(struct intel_connector *connector)
        enum port port = dig_port->base.port;
        unsigned long r0_prime_gen_start;
        int ret, i, tries = 2;
+       u32 val;
        union {
                u32 reg[2];
                u8 shim[DRM_HDCP_AN_LEN];
@@ -905,8 +906,10 @@ static int intel_hdcp_auth(struct intel_connector *connector)
                       HDCP_CONF_AUTH_AND_ENC);
 
        /* Wait for R0 ready */
-       if (wait_for(intel_de_read(display, HDCP_STATUS(display, cpu_transcoder, port)) &
-                    (HDCP_STATUS_R0_READY | HDCP_STATUS_ENC), 1)) {
+       ret = poll_timeout_us(val = intel_de_read(display, HDCP_STATUS(display, cpu_transcoder, port)),
+                             val & (HDCP_STATUS_R0_READY | HDCP_STATUS_ENC),
+                             100, 1000, false);
+       if (ret) {
                drm_err(display->drm, "Timed out waiting for R0 ready\n");
                return -ETIMEDOUT;
        }
@@ -938,16 +941,16 @@ static int intel_hdcp_auth(struct intel_connector *connector)
                               ri.reg);
 
                /* Wait for Ri prime match */
-               if (!wait_for(intel_de_read(display, HDCP_STATUS(display, cpu_transcoder, port)) &
-                             (HDCP_STATUS_RI_MATCH | HDCP_STATUS_ENC), 1))
+               ret = poll_timeout_us(val = intel_de_read(display, HDCP_STATUS(display, cpu_transcoder, port)),
+                                     val & (HDCP_STATUS_RI_MATCH | HDCP_STATUS_ENC),
+                                     100, 1000, false);
+               if (!ret)
                        break;
        }
 
        if (i == tries) {
                drm_dbg_kms(display->drm,
-                           "Timed out waiting for Ri prime match (%x)\n",
-                           intel_de_read(display,
-                                         HDCP_STATUS(display, cpu_transcoder, port)));
+                           "Timed out waiting for Ri prime match (%x)\n", val);
                return -ETIMEDOUT;
        }