* [PATCH v2 1/1] ARM: imx: clk-pllv3: improve the timeout waiting method
@ 2013-07-16 2:23 Peter Chen
2013-07-16 6:45 ` Sascha Hauer
2013-07-16 7:04 ` Shawn Guo
0 siblings, 2 replies; 3+ messages in thread
From: Peter Chen @ 2013-07-16 2:23 UTC (permalink / raw)
To: linux-arm-kernel
There are two improvements for this commit:
- Add comparing pll lock condition after while loop. It can
fix potential fake timeout problem caused by the code is just
scheduled out before compare the timeout, and the time of
scheduling out are more than one jiffies.
- Move timeout assignment more close to compare the timeout.
It can reduce the possibility the code is scheduled out, and
the timeout can be more precise.
Signed-off-by: Peter Chen <peter.chen@freescale.com>
---
Changes for v2:
- Add more description for this improvement according to
Fabio's suggstion.
- Add comparsion after while loop according to Sascha's
suggestion.
arch/arm/mach-imx/clk-pllv3.c | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-imx/clk-pllv3.c b/arch/arm/mach-imx/clk-pllv3.c
index 36aac94..4499db5 100644
--- a/arch/arm/mach-imx/clk-pllv3.c
+++ b/arch/arm/mach-imx/clk-pllv3.c
@@ -50,7 +50,7 @@ struct clk_pllv3 {
static int clk_pllv3_prepare(struct clk_hw *hw)
{
struct clk_pllv3 *pll = to_clk_pllv3(hw);
- unsigned long timeout = jiffies + msecs_to_jiffies(10);
+ unsigned long timeout;
u32 val;
val = readl_relaxed(pll->base);
@@ -61,12 +61,19 @@ static int clk_pllv3_prepare(struct clk_hw *hw)
val &= ~BM_PLL_POWER;
writel_relaxed(val, pll->base);
+ timeout = jiffies + msecs_to_jiffies(10);
/* Wait for PLL to lock */
- while (!(readl_relaxed(pll->base) & BM_PLL_LOCK))
+ do {
+ if (readl_relaxed(pll->base) & BM_PLL_LOCK)
+ break;
if (time_after(jiffies, timeout))
- return -ETIMEDOUT;
+ break;
+ } while (1);
- return 0;
+ if (readl_relaxed(pll->base) & BM_PLL_LOCK)
+ return 0;
+ else
+ return -ETIMEDOUT;
}
static void clk_pllv3_unprepare(struct clk_hw *hw)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v2 1/1] ARM: imx: clk-pllv3: improve the timeout waiting method
2013-07-16 2:23 [PATCH v2 1/1] ARM: imx: clk-pllv3: improve the timeout waiting method Peter Chen
@ 2013-07-16 6:45 ` Sascha Hauer
2013-07-16 7:04 ` Shawn Guo
1 sibling, 0 replies; 3+ messages in thread
From: Sascha Hauer @ 2013-07-16 6:45 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Jul 16, 2013 at 10:23:20AM +0800, Peter Chen wrote:
> There are two improvements for this commit:
>
> - Add comparing pll lock condition after while loop. It can
> fix potential fake timeout problem caused by the code is just
> scheduled out before compare the timeout, and the time of
> scheduling out are more than one jiffies.
>
> - Move timeout assignment more close to compare the timeout.
> It can reduce the possibility the code is scheduled out, and
> the timeout can be more precise.
>
> Signed-off-by: Peter Chen <peter.chen@freescale.com>
Acked-by: Sascha Hauer <s.hauer@pengutronix.de>
Sascha
> ---
>
> Changes for v2:
> - Add more description for this improvement according to
> Fabio's suggstion.
> - Add comparsion after while loop according to Sascha's
> suggestion.
>
> arch/arm/mach-imx/clk-pllv3.c | 15 +++++++++++----
> 1 files changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-imx/clk-pllv3.c b/arch/arm/mach-imx/clk-pllv3.c
> index 36aac94..4499db5 100644
> --- a/arch/arm/mach-imx/clk-pllv3.c
> +++ b/arch/arm/mach-imx/clk-pllv3.c
> @@ -50,7 +50,7 @@ struct clk_pllv3 {
> static int clk_pllv3_prepare(struct clk_hw *hw)
> {
> struct clk_pllv3 *pll = to_clk_pllv3(hw);
> - unsigned long timeout = jiffies + msecs_to_jiffies(10);
> + unsigned long timeout;
> u32 val;
>
> val = readl_relaxed(pll->base);
> @@ -61,12 +61,19 @@ static int clk_pllv3_prepare(struct clk_hw *hw)
> val &= ~BM_PLL_POWER;
> writel_relaxed(val, pll->base);
>
> + timeout = jiffies + msecs_to_jiffies(10);
> /* Wait for PLL to lock */
> - while (!(readl_relaxed(pll->base) & BM_PLL_LOCK))
> + do {
> + if (readl_relaxed(pll->base) & BM_PLL_LOCK)
> + break;
> if (time_after(jiffies, timeout))
> - return -ETIMEDOUT;
> + break;
> + } while (1);
>
> - return 0;
> + if (readl_relaxed(pll->base) & BM_PLL_LOCK)
> + return 0;
> + else
> + return -ETIMEDOUT;
> }
>
> static void clk_pllv3_unprepare(struct clk_hw *hw)
> --
> 1.7.0.4
>
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 1/1] ARM: imx: clk-pllv3: improve the timeout waiting method
2013-07-16 2:23 [PATCH v2 1/1] ARM: imx: clk-pllv3: improve the timeout waiting method Peter Chen
2013-07-16 6:45 ` Sascha Hauer
@ 2013-07-16 7:04 ` Shawn Guo
1 sibling, 0 replies; 3+ messages in thread
From: Shawn Guo @ 2013-07-16 7:04 UTC (permalink / raw)
To: linux-arm-kernel
On Tue, Jul 16, 2013 at 10:23:20AM +0800, Peter Chen wrote:
> There are two improvements for this commit:
>
> - Add comparing pll lock condition after while loop. It can
> fix potential fake timeout problem caused by the code is just
> scheduled out before compare the timeout, and the time of
> scheduling out are more than one jiffies.
>
> - Move timeout assignment more close to compare the timeout.
> It can reduce the possibility the code is scheduled out, and
> the timeout can be more precise.
>
> Signed-off-by: Peter Chen <peter.chen@freescale.com>
Applied, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-07-16 7:04 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-16 2:23 [PATCH v2 1/1] ARM: imx: clk-pllv3: improve the timeout waiting method Peter Chen
2013-07-16 6:45 ` Sascha Hauer
2013-07-16 7:04 ` Shawn Guo
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).