]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spi: ich: Limit slave->max_read_size
authorBin Meng <bmeng.cn@gmail.com>
Wed, 28 Jul 2021 10:28:56 +0000 (18:28 +0800)
committerBin Meng <bmeng.cn@gmail.com>
Mon, 2 Aug 2021 07:11:40 +0000 (15:11 +0800)
Since commit 43c145b8b3ee ("spi: ich: Correct max-size bug in ich_spi_adjust_size()")
(in v2020.04-rc1), SPI flash read no longer works with ICH SPI controller
in software sequencer mode.

ICH controller can only transfer a small number of bytes at once.
Before commit 43c145b8b3ee, the logic happens to make sure data.nbytes
is limited to slave->max_write_size but after commit 43c145b8b3ee
data.nbytes is no longer limited because slave->max_read_size is not
initialized with a valid number.

Fixes: 43c145b8b3ee ("spi: ich: Correct max-size bug in ich_spi_adjust_size()")
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/spi/ich.c

index 3d49c22a9da47dd43e21d2ae1f7e4830afa53e93..08d54e86f45d7d27f57159adcb3a37002a2435e3 100644 (file)
@@ -918,12 +918,14 @@ static int ich_spi_child_pre_probe(struct udevice *dev)
        struct spi_slave *slave = dev_get_parent_priv(dev);
 
        /*
-        * Yes this controller can only write a small number of bytes at
+        * Yes this controller can only transfer a small number of bytes at
         * once! The limit is typically 64 bytes. For hardware sequencing a
         * a loop is used to get around this.
         */
-       if (!plat->hwseq)
+       if (!plat->hwseq) {
+               slave->max_read_size = priv->databytes;
                slave->max_write_size = priv->databytes;
+       }
        /*
         * ICH 7 SPI controller only supports array read command
         * and byte program command for SST flash