mmc: sdhci: Allow disabling of SDMA in SPL
Rockchip emmc devices have a similar issue to Rockchip dwmmc devices, where performing DMA to SRAM later causes issues with suspend/resume. Allow us to toggle SDMA in SPL for sdhci similar to ADMA support, so we can ensure DMA is not used when loading the SRAM code. Signed-off-by: Peter Geis <pgwipeout@gmail.com> Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com> Reviewed-by: Kever Yang <kever.yang@rock-chips.com> [jonas@kwiboo.se: add Kconfig default value and fix ADMA typo] Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
This commit is contained in:
parent
bdbfd58974
commit
3cd664dc92
2 changed files with 12 additions and 4 deletions
|
@ -476,6 +476,14 @@ config MMC_SDHCI_SDMA
|
|||
This enables support for the SDMA (Single Operation DMA) defined
|
||||
in the SD Host Controller Standard Specification Version 1.00 .
|
||||
|
||||
config SPL_MMC_SDHCI_SDMA
|
||||
bool "Support SDHCI SDMA in SPL"
|
||||
depends on SPL_MMC && MMC_SDHCI
|
||||
default y if MMC_SDHCI_SDMA
|
||||
help
|
||||
This enables support for the SDMA (Single Operation DMA) defined
|
||||
in the SD Host Controller Standard Specification Version 1.00 in SPL.
|
||||
|
||||
config MMC_SDHCI_ADMA
|
||||
bool "Support SDHCI ADMA2"
|
||||
depends on MMC_SDHCI
|
||||
|
|
|
@ -70,7 +70,7 @@ static void sdhci_transfer_pio(struct sdhci_host *host, struct mmc_data *data)
|
|||
}
|
||||
}
|
||||
|
||||
#if (defined(CONFIG_MMC_SDHCI_SDMA) || CONFIG_IS_ENABLED(MMC_SDHCI_ADMA))
|
||||
#if (CONFIG_IS_ENABLED(MMC_SDHCI_SDMA) || CONFIG_IS_ENABLED(MMC_SDHCI_ADMA))
|
||||
static void sdhci_prepare_dma(struct sdhci_host *host, struct mmc_data *data,
|
||||
int *is_aligned, int trans_bytes)
|
||||
{
|
||||
|
@ -177,7 +177,7 @@ static int sdhci_transfer_data(struct sdhci_host *host, struct mmc_data *data)
|
|||
}
|
||||
} while (!(stat & SDHCI_INT_DATA_END));
|
||||
|
||||
#if (defined(CONFIG_MMC_SDHCI_SDMA) || CONFIG_IS_ENABLED(MMC_SDHCI_ADMA))
|
||||
#if (CONFIG_IS_ENABLED(MMC_SDHCI_SDMA) || CONFIG_IS_ENABLED(MMC_SDHCI_ADMA))
|
||||
dma_unmap_single(host->start_addr, data->blocks * data->blocksize,
|
||||
mmc_get_dma_dir(data));
|
||||
#endif
|
||||
|
@ -877,7 +877,7 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
|
|||
#endif
|
||||
debug("%s, caps: 0x%x\n", __func__, caps);
|
||||
|
||||
#ifdef CONFIG_MMC_SDHCI_SDMA
|
||||
#if CONFIG_IS_ENABLED(MMC_SDHCI_SDMA)
|
||||
if ((caps & SDHCI_CAN_DO_SDMA)) {
|
||||
host->flags |= USE_SDMA;
|
||||
} else {
|
||||
|
@ -887,7 +887,7 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
|
|||
#endif
|
||||
#if CONFIG_IS_ENABLED(MMC_SDHCI_ADMA)
|
||||
if (!(caps & SDHCI_CAN_DO_ADMA2)) {
|
||||
printf("%s: Your controller doesn't support SDMA!!\n",
|
||||
printf("%s: Your controller doesn't support ADMA!!\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue