]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spi: mtk_spim: prevent global pll clock override
authorNicolò Veronese <nicveronese@gmail.com>
Tue, 3 Oct 2023 22:14:26 +0000 (00:14 +0200)
committerTom Rini <trini@konsulko.com>
Wed, 11 Oct 2023 17:21:33 +0000 (13:21 -0400)
With commit 793e62301180 ("spi: mtk_spim: get spi clk rate only once") a
new system to calculate the SPI clocks has been added.

Unfortunately, the do_div macro overrides the global priv->pll_clk_rate
field. This will cause to have a reduced clock rate on each subsequent
SPI call.

Signed-off-by: Valerio 'ftp21' Mancini <ftp21@ftp21.eu>
Signed-off-by: Nicolò Veronese <nicveronese@gmail.com>
drivers/spi/mtk_spim.c

index 418e586b91d98950c257af0cc2ed48b77f25967f..90f4c3cecb934002b1fbc27a7067c7f2ef0b0a42 100644 (file)
@@ -409,7 +409,7 @@ static int mtk_spim_transfer_wait(struct spi_slave *slave,
 {
        struct udevice *bus = dev_get_parent(slave->dev);
        struct mtk_spim_priv *priv = dev_get_priv(bus);
-       u32 sck_l, sck_h, clk_count, reg;
+       u32 pll_clk, sck_l, sck_h, clk_count, reg;
        ulong us = 1;
        int ret = 0;
 
@@ -418,11 +418,12 @@ static int mtk_spim_transfer_wait(struct spi_slave *slave,
        else
                clk_count = op->data.nbytes;
 
+       pll_clk = priv->pll_clk_rate;
        sck_l = readl(priv->base + SPI_CFG2_REG) >> SPI_CFG2_SCK_LOW_OFFSET;
        sck_h = readl(priv->base + SPI_CFG2_REG) & SPI_CFG2_SCK_HIGH_MASK;
-       do_div(priv->pll_clk_rate, sck_l + sck_h + 2);
+       do_div(pll_clk, sck_l + sck_h + 2);
 
-       us = CLK_TO_US(priv->pll_clk_rate, clk_count * 8);
+       us = CLK_TO_US(pll_clk, clk_count * 8);
        us += 1000 * 1000; /* 1s tolerance */
 
        if (us > UINT_MAX)