aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2021-07-28 18:28:56 +0800
committerBin Meng <bmeng.cn@gmail.com>2021-08-02 15:11:40 +0800
commit4dc82797585d87b61ec7b11bf54f8d302532cd55 (patch)
tree859732c04118c794ef4044b4c10570b77865643b
parent5371593aed56ee11cbb6cc6ac8d058fcd9b8f58c (diff)
downloadu-boot-4dc82797585d87b61ec7b11bf54f8d302532cd55.zip
u-boot-4dc82797585d87b61ec7b11bf54f8d302532cd55.tar.gz
u-boot-4dc82797585d87b61ec7b11bf54f8d302532cd55.tar.bz2
spi: ich: Limit slave->max_read_size
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>
-rw-r--r--drivers/spi/ich.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c
index 3d49c22..08d54e8 100644
--- a/drivers/spi/ich.c
+++ b/drivers/spi/ich.c
@@ -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