|
|
@@ -632,6 +632,10 @@ static ssize_t intel_spi_read(struct spi_nor *nor, loff_t from, size_t len,
|
|
|
while (len > 0) {
|
|
|
block_size = min_t(size_t, len, INTEL_SPI_FIFO_SZ);
|
|
|
|
|
|
+ /* Read cannot cross 4K boundary */
|
|
|
+ block_size = min_t(loff_t, from + block_size,
|
|
|
+ round_up(from + 1, SZ_4K)) - from;
|
|
|
+
|
|
|
writel(from, ispi->base + FADDR);
|
|
|
|
|
|
val = readl(ispi->base + HSFSTS_CTL);
|
|
|
@@ -685,6 +689,10 @@ static ssize_t intel_spi_write(struct spi_nor *nor, loff_t to, size_t len,
|
|
|
while (len > 0) {
|
|
|
block_size = min_t(size_t, len, INTEL_SPI_FIFO_SZ);
|
|
|
|
|
|
+ /* Write cannot cross 4K boundary */
|
|
|
+ block_size = min_t(loff_t, to + block_size,
|
|
|
+ round_up(to + 1, SZ_4K)) - to;
|
|
|
+
|
|
|
writel(to, ispi->base + FADDR);
|
|
|
|
|
|
val = readl(ispi->base + HSFSTS_CTL);
|