diff options
author | Michael Tretter <m.tretter@pengutronix.de> | 2021-05-19 09:38:55 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-05-25 09:15:53 +0200 |
commit | 23dab6adf3b98177182e3aafb08219b91e7e9db6 (patch) | |
tree | b4f8081fd539fee3b759811f9899e22a3bb1b8f5 /drivers | |
parent | 13bf70d09e0ca900e1368717b0abe26bf501770e (diff) | |
download | barebox-23dab6adf3b98177182e3aafb08219b91e7e9db6.tar.gz barebox-23dab6adf3b98177182e3aafb08219b91e7e9db6.tar.xz |
mci: arasan: configure data transfer only if we actually have data
If we don't have any data to transfer, we must not set the block size
and block count.
If data is NULL, accessing data to get the block size and block count is
a NULL pointer dereference.
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
Link: https://lore.barebox.org/20210519073855.2748231-2-m.tretter@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mci/arasan-sdhci.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/mci/arasan-sdhci.c b/drivers/mci/arasan-sdhci.c index 399966e8cf..3d738774e8 100644 --- a/drivers/mci/arasan-sdhci.c +++ b/drivers/mci/arasan-sdhci.c @@ -283,10 +283,12 @@ static int arasan_sdhci_send_cmd(struct mci_host *mci, struct mci_cmd *cmd, sdhci_set_cmd_xfer_mode(&host->sdhci, cmd, data, false, &command, &xfer); sdhci_write8(&host->sdhci, SDHCI_TIMEOUT_CONTROL, TIMEOUT_VAL); - sdhci_write16(&host->sdhci, SDHCI_TRANSFER_MODE, xfer); - sdhci_write16(&host->sdhci, SDHCI_BLOCK_SIZE, SDHCI_DMA_BOUNDARY_512K | - SDHCI_TRANSFER_BLOCK_SIZE(data->blocksize)); - sdhci_write16(&host->sdhci, SDHCI_BLOCK_COUNT, data->blocks); + if (data) { + sdhci_write16(&host->sdhci, SDHCI_TRANSFER_MODE, xfer); + sdhci_write16(&host->sdhci, SDHCI_BLOCK_SIZE, + SDHCI_DMA_BOUNDARY_512K | SDHCI_TRANSFER_BLOCK_SIZE(data->blocksize)); + sdhci_write16(&host->sdhci, SDHCI_BLOCK_COUNT, data->blocks); + } sdhci_write32(&host->sdhci, SDHCI_ARGUMENT, cmd->cmdarg); sdhci_write16(&host->sdhci, SDHCI_COMMAND, command); |