On Thu, 2025-08-28 at 15:20 +0300, Jani Nikula wrote:
> 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.
> 
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_hdcp.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_hdcp.c
> b/drivers/gpu/drm/i915/display/intel_hdcp.c
> index 0c98e50501a6..d6a105959d26 100644
> --- a/drivers/gpu/drm/i915/display/intel_hdcp.c
> +++ b/drivers/gpu/drm/i915/display/intel_hdcp.c
> @@ -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;

You can return ret here?

Anyways:

Reviewed-by: Jouni Högander <jouni.hogan...@intel.com>

>       }
> @@ -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;
>       }
>  

Reply via email to