lkml.org 
[lkml]   [2012]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 4/7] ARM: LPC32xx: clock.c: jiffies wrapping
    Date
    This patch fixes the jiffies wrapping bug in clock.c.

    It corrects the timeout computation based on jiffies, uses time_before() for
    correct wrapping handling and replaces a binary "&" which should really be a
    logical "&&" in a truth expression.

    Signed-off-by: Roland Stigge <stigge@antcom.de>
    Acked-by: Wolfram Sang <w.sang@pengutronix.de>
    Tested-by: Wolfram Sang <w.sang@pengutronix.de>

    diff --git a/arch/arm/mach-lpc32xx/clock.c b/arch/arm/mach-lpc32xx/clock.c
    index 8e79313..f64c9a1 100644
    --- a/arch/arm/mach-lpc32xx/clock.c
    +++ b/arch/arm/mach-lpc32xx/clock.c
    @@ -128,7 +128,7 @@ static struct clk osc_32KHz = {
    static int local_pll397_enable(struct clk *clk, int enable)
    {
    u32 reg;
    - unsigned long timeout = 1 + msecs_to_jiffies(10);
    + unsigned long timeout = jiffies + msecs_to_jiffies(10);

    reg = __raw_readl(LPC32XX_CLKPWR_PLL397_CTRL);

    @@ -143,7 +143,7 @@ static int local_pll397_enable(struct clk *clk, int enable)
    /* Wait for PLL397 lock */
    while (((__raw_readl(LPC32XX_CLKPWR_PLL397_CTRL) &
    LPC32XX_CLKPWR_SYSCTRL_PLL397_STS) == 0) &&
    - (timeout > jiffies))
    + time_before(jiffies, timeout))
    cpu_relax();

    if ((__raw_readl(LPC32XX_CLKPWR_PLL397_CTRL) &
    @@ -157,7 +157,7 @@ static int local_pll397_enable(struct clk *clk, int enable)
    static int local_oscmain_enable(struct clk *clk, int enable)
    {
    u32 reg;
    - unsigned long timeout = 1 + msecs_to_jiffies(10);
    + unsigned long timeout = jiffies + msecs_to_jiffies(10);

    reg = __raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL);

    @@ -172,7 +172,7 @@ static int local_oscmain_enable(struct clk *clk, int enable)
    /* Wait for main oscillator to start */
    while (((__raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL) &
    LPC32XX_CLKPWR_MOSC_DISABLE) != 0) &&
    - (timeout > jiffies))
    + time_before(jiffies, timeout))
    cpu_relax();

    if ((__raw_readl(LPC32XX_CLKPWR_MAIN_OSC_CTRL) &
    @@ -384,7 +384,7 @@ static int local_usbpll_enable(struct clk *clk, int enable)
    {
    u32 reg;
    int ret = -ENODEV;
    - unsigned long timeout = 1 + msecs_to_jiffies(10);
    + unsigned long timeout = jiffies + msecs_to_jiffies(10);

    reg = __raw_readl(LPC32XX_CLKPWR_USB_CTRL);

    @@ -397,7 +397,7 @@ static int local_usbpll_enable(struct clk *clk, int enable)
    __raw_writel(reg, LPC32XX_CLKPWR_USB_CTRL);

    /* Wait for PLL lock */
    - while ((timeout > jiffies) & (ret == -ENODEV)) {
    + while (time_before(jiffies, timeout) && (ret == -ENODEV)) {
    reg = __raw_readl(LPC32XX_CLKPWR_USB_CTRL);
    if (reg & LPC32XX_CLKPWR_USBCTRL_PLL_STS)
    ret = 0;

    \
     
     \ /
      Last update: 2012-02-02 20:23    [W:0.020 / U:33.420 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site