]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spi: mvebu_a3700_spi: Fix clock prescale computation
authorMarek Behún <marek.behun@nic.cz>
Tue, 23 Jul 2019 14:49:32 +0000 (16:49 +0200)
committerJagan Teki <jagan@amarulasolutions.com>
Mon, 16 Sep 2019 02:39:22 +0000 (08:09 +0530)
The prescaler value computation can yield wrong result if given 0x1f at
the beginning: the value is computed to be 0x20, but the maximum value
the register can hold 0x1f, so the actual stored value in this case is
0, which is obviously wrong.
Set the upper bound of the value to 0x1f with the min macro.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
drivers/spi/mvebu_a3700_spi.c

index feeafdceaa618680de3f41a5c8945b4e200a124a..99ad505f24e4daf3c964596a5fdb3a8667b1cc6c 100644 (file)
@@ -181,10 +181,9 @@ static int mvebu_spi_set_speed(struct udevice *bus, uint hz)
        data = readl(&reg->cfg);
 
        prescale = DIV_ROUND_UP(clk_get_rate(&plat->clk), hz);
-       if (prescale > 0x1f)
-               prescale = 0x1f;
-       else if (prescale > 0xf)
+       if (prescale > 0xf)
                prescale = 0x10 + (prescale + 1) / 2;
+       prescale = min(prescale, 0x1fu);
 
        data &= ~MVEBU_SPI_A3700_CLK_PRESCALE_MASK;
        data |= prescale & MVEBU_SPI_A3700_CLK_PRESCALE_MASK;