aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/atmel-quadspi.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-03-10 10:02:49 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-03-10 10:02:49 +0100
commitcb05c6c82fb0853b53ecf983c29ab02aaca13194 (patch)
treee6316ab7e1625a550079803e8f80ab3f327448a9 /drivers/spi/atmel-quadspi.c
parentd24e163af05c93e923aff76e01e6e30182cb38e3 (diff)
parent2c523b344dfa65a3738e7039832044aa133c75fb (diff)
downloadkernel_replicant_linux-cb05c6c82fb0853b53ecf983c29ab02aaca13194.tar.gz
kernel_replicant_linux-cb05c6c82fb0853b53ecf983c29ab02aaca13194.tar.bz2
kernel_replicant_linux-cb05c6c82fb0853b53ecf983c29ab02aaca13194.zip
Merge 5.6-rc5 into tty-next
We need the vt fixes in here and it resolves a merge issue with drivers/tty/vt/selection.c Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/spi/atmel-quadspi.c')
-rw-r--r--drivers/spi/atmel-quadspi.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c
index fd8007ebb145..13def7f78b9e 100644
--- a/drivers/spi/atmel-quadspi.c
+++ b/drivers/spi/atmel-quadspi.c
@@ -149,6 +149,7 @@ struct atmel_qspi {
struct clk *qspick;
struct platform_device *pdev;
const struct atmel_qspi_caps *caps;
+ resource_size_t mmap_size;
u32 pending;
u32 mr;
u32 scr;
@@ -329,6 +330,14 @@ static int atmel_qspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
u32 sr, offset;
int err;
+ /*
+ * Check if the address exceeds the MMIO window size. An improvement
+ * would be to add support for regular SPI mode and fall back to it
+ * when the flash memories overrun the controller's memory space.
+ */
+ if (op->addr.val + op->data.nbytes > aq->mmap_size)
+ return -ENOTSUPP;
+
err = atmel_qspi_set_cfg(aq, op, &offset);
if (err)
return err;
@@ -480,6 +489,8 @@ static int atmel_qspi_probe(struct platform_device *pdev)
goto exit;
}
+ aq->mmap_size = resource_size(res);
+
/* Get the peripheral clock */
aq->pclk = devm_clk_get(&pdev->dev, "pclk");
if (IS_ERR(aq->pclk))