summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMichael Tretter <m.tretter@pengutronix.de>2021-05-19 09:38:55 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2021-05-25 09:15:53 +0200
commit23dab6adf3b98177182e3aafb08219b91e7e9db6 (patch)
treeb4f8081fd539fee3b759811f9899e22a3bb1b8f5 /drivers
parent13bf70d09e0ca900e1368717b0abe26bf501770e (diff)
downloadbarebox-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.c10
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);