Message ID | 20200129163821.1547295-1-heiko@sntech.de (mailing list archive) |
---|---|
State | Awaiting Upstream, archived |
Headers | show |
Series | [v3,1/3] clk: rockchip: convert rk3399 pll type to use readl_poll_timeout | expand |
Quoting Heiko Stuebner (2020-01-29 08:38:19) > From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com> > > Instead of open coding the polling of the lock status, use the > handy readl_poll_timeout for this. As the pll locking is normally > blazingly fast and we don't want to incur additional delays, we're > not doing any sleeps similar to for example the imx clk-pllv4 > and define a very safe but still short timeout of 1ms. > > Suggested-by: Stephen Boyd <sboyd@kernel.org> > Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com> > --- Reviewed-by: Stephen Boyd <sboyd@kernel.org>
Am Mittwoch, 29. Januar 2020, 17:38:19 CET schrieb Heiko Stuebner: > From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com> > > Instead of open coding the polling of the lock status, use the > handy readl_poll_timeout for this. As the pll locking is normally > blazingly fast and we don't want to incur additional delays, we're > not doing any sleeps similar to for example the imx clk-pllv4 > and define a very safe but still short timeout of 1ms. > > Suggested-by: Stephen Boyd <sboyd@kernel.org> > Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com> applied all 3 for 5.7 with Stephen's Review
diff --git a/drivers/clk/rockchip/clk-pll.c b/drivers/clk/rockchip/clk-pll.c index 198417d56300..6fd52895e7b6 100644 --- a/drivers/clk/rockchip/clk-pll.c +++ b/drivers/clk/rockchip/clk-pll.c @@ -585,19 +585,20 @@ static const struct clk_ops rockchip_rk3066_pll_clk_ops = { static int rockchip_rk3399_pll_wait_lock(struct rockchip_clk_pll *pll) { u32 pllcon; - int delay = 24000000; + int ret; - /* poll check the lock status in rk3399 xPLLCON2 */ - while (delay > 0) { - pllcon = readl_relaxed(pll->reg_base + RK3399_PLLCON(2)); - if (pllcon & RK3399_PLLCON2_LOCK_STATUS) - return 0; + /* + * Lock time typical 250, max 500 input clock cycles @24MHz + * So define a very safe maximum of 1000us, meaning 24000 cycles. + */ + ret = readl_relaxed_poll_timeout(pll->reg_base + RK3399_PLLCON(2), + pllcon, + pllcon & RK3399_PLLCON2_LOCK_STATUS, + 0, 1000); + if (ret) + pr_err("%s: timeout waiting for pll to lock\n", __func__); - delay--; - } - - pr_err("%s: timeout waiting for pll to lock\n", __func__); - return -ETIMEDOUT; + return ret; } static void rockchip_rk3399_pll_get_params(struct rockchip_clk_pll *pll,