lkml.org 
[lkml]   [2017]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.10 14/27] hwrng: omap - write registers after enabling the clock
    Date
    4.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>

    commit 45c2fdde01299b02a6e3225e848598a3c1e55539 upstream.

    Commit 383212425c926 ("hwrng: omap - Add device variant for SafeXcel
    IP-76 found in Armada 8K") added support for the SafeXcel IP-76 variant
    of the IP. This modification included getting a reference and enabling a
    clock. Unfortunately, this was done *after* writing to the
    RNG_INTMASK_REG register. This generally works fine when the driver is
    built-in because the clock might have been left enabled by the
    bootloader, but fails short when the driver is built as a module: it
    causes a system hang because a register is being accessed while the
    clock is not enabled.

    This commit fixes that by making the register access *after* enabling
    the clock.

    This issue was found by the kernelci.org testing effort.

    Fixes: 383212425c926 ("hwrng: omap - Add device variant for SafeXcel IP-76 found in Armada 8K")
    Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/char/hw_random/omap-rng.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/drivers/char/hw_random/omap-rng.c
    +++ b/drivers/char/hw_random/omap-rng.c
    @@ -397,7 +397,6 @@ static int of_get_omap_rng_device_detail
    irq, err);
    return err;
    }
    - omap_rng_write(priv, RNG_INTMASK_REG, RNG_SHUTDOWN_OFLO_MASK);

    priv->clk = of_clk_get(pdev->dev.of_node, 0);
    if (IS_ERR(priv->clk) && PTR_ERR(priv->clk) == -EPROBE_DEFER)
    @@ -408,6 +407,8 @@ static int of_get_omap_rng_device_detail
    dev_err(&pdev->dev, "unable to enable the clk, "
    "err = %d\n", err);
    }
    +
    + omap_rng_write(priv, RNG_INTMASK_REG, RNG_SHUTDOWN_OFLO_MASK);
    }
    return 0;
    }

    \
     
     \ /
      Last update: 2017-03-24 19:01    [W:3.651 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site