clk: at91: utmi: add timeout for utmi lock
authorEugen Hristev <eugen.hristev@microchip.com>
Fri, 3 Aug 2018 09:10:49 +0000 (12:10 +0300)
committerTom Rini <trini@konsulko.com>
Mon, 13 Aug 2018 18:03:57 +0000 (14:03 -0400)
In case the slow clock is not properly configured, the UTMI clock
cannot lock the PLL, because UPLLCOUNT will "wait X slow clock cycles".
In this case U-boot will loop indefinitely.
Added a timeout in this case, to start U-boot even if UTMI clock is
not enabled, so the user can use different media if needed, or investigate.

Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
drivers/clk/at91/clk-utmi.c

index 0b562610a2ef79c29a903a1fe35d072c21896bb9..e8506099fd323a4f54813818f682d84ecc134cdc 100644 (file)
@@ -28,6 +28,7 @@ static int utmi_clk_enable(struct clk *clk)
        u32 utmi_ref_clk_freq;
        u32 tmp;
        int err;
+       int timeout = 2000000;
 
        if (readl(&pmc->sr) & AT91_PMC_LOCKU)
                return 0;
@@ -85,8 +86,12 @@ static int utmi_clk_enable(struct clk *clk)
               AT91_PMC_BIASEN;
        writel(tmp, &pmc->uckr);
 
-       while (!(readl(&pmc->sr) & AT91_PMC_LOCKU))
+       while ((--timeout) && !(readl(&pmc->sr) & AT91_PMC_LOCKU))
                ;
+       if (!timeout) {
+               printf("UTMICK: timeout waiting for UPLL lock\n");
+               return -ETIMEDOUT;
+       }
 
        return 0;
 }