mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-26 16:51:08 -04:00
Merge tag 'mmc-v5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
Pull MMC fixes from Ulf Hansson: - cavium: Fix DMA support - sdhci-sprd: Fix soft reset when runtime resuming" * tag 'mmc-v5.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: mmc: cavium: Add the missing dma unmap when the dma has finished. mmc: cavium: Set the correct dma max segment size for mmc_host mmc: sdhci-sprd: Fix the incorrect soft reset operation when runtime resuming
This commit is contained in:
@@ -374,6 +374,7 @@ static int finish_dma_single(struct cvm_mmc_host *host, struct mmc_data *data)
|
||||
{
|
||||
data->bytes_xfered = data->blocks * data->blksz;
|
||||
data->error = 0;
|
||||
dma_unmap_sg(host->dev, data->sg, data->sg_len, get_dma_dir(data));
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1046,7 +1047,8 @@ int cvm_mmc_of_slot_probe(struct device *dev, struct cvm_mmc_host *host)
|
||||
mmc->max_segs = 1;
|
||||
|
||||
/* DMA size field can address up to 8 MB */
|
||||
mmc->max_seg_size = 8 * 1024 * 1024;
|
||||
mmc->max_seg_size = min_t(unsigned int, 8 * 1024 * 1024,
|
||||
dma_get_max_seg_size(host->dev));
|
||||
mmc->max_req_size = mmc->max_seg_size;
|
||||
/* External DMA is in 512 byte blocks */
|
||||
mmc->max_blk_size = 512;
|
||||
|
||||
@@ -883,7 +883,7 @@ static int sdhci_acpi_runtime_resume(struct device *dev)
|
||||
|
||||
sdhci_acpi_byt_setting(&c->pdev->dev);
|
||||
|
||||
return sdhci_runtime_resume_host(c->host);
|
||||
return sdhci_runtime_resume_host(c->host, 0);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1705,7 +1705,7 @@ static int sdhci_esdhc_runtime_resume(struct device *dev)
|
||||
esdhc_pltfm_set_clock(host, imx_data->actual_clock);
|
||||
}
|
||||
|
||||
err = sdhci_runtime_resume_host(host);
|
||||
err = sdhci_runtime_resume_host(host, 0);
|
||||
if (err)
|
||||
goto disable_ipg_clk;
|
||||
|
||||
|
||||
@@ -289,7 +289,7 @@ static int sdhci_at91_runtime_resume(struct device *dev)
|
||||
}
|
||||
|
||||
out:
|
||||
return sdhci_runtime_resume_host(host);
|
||||
return sdhci_runtime_resume_host(host, 0);
|
||||
}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ static int sdhci_pci_runtime_suspend_host(struct sdhci_pci_chip *chip)
|
||||
|
||||
err_pci_runtime_suspend:
|
||||
while (--i >= 0)
|
||||
sdhci_runtime_resume_host(chip->slots[i]->host);
|
||||
sdhci_runtime_resume_host(chip->slots[i]->host, 0);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -181,7 +181,7 @@ static int sdhci_pci_runtime_resume_host(struct sdhci_pci_chip *chip)
|
||||
if (!slot)
|
||||
continue;
|
||||
|
||||
ret = sdhci_runtime_resume_host(slot->host);
|
||||
ret = sdhci_runtime_resume_host(slot->host, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -554,7 +554,7 @@ static int sdhci_pxav3_runtime_resume(struct device *dev)
|
||||
if (!IS_ERR(pxa->clk_core))
|
||||
clk_prepare_enable(pxa->clk_core);
|
||||
|
||||
return sdhci_runtime_resume_host(host);
|
||||
return sdhci_runtime_resume_host(host, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -745,7 +745,7 @@ static int sdhci_s3c_runtime_resume(struct device *dev)
|
||||
clk_prepare_enable(busclk);
|
||||
if (ourhost->cur_clk >= 0)
|
||||
clk_prepare_enable(ourhost->clk_bus[ourhost->cur_clk]);
|
||||
ret = sdhci_runtime_resume_host(host);
|
||||
ret = sdhci_runtime_resume_host(host, 0);
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -696,7 +696,7 @@ static int sdhci_sprd_runtime_resume(struct device *dev)
|
||||
if (ret)
|
||||
goto clk_disable;
|
||||
|
||||
sdhci_runtime_resume_host(host);
|
||||
sdhci_runtime_resume_host(host, 1);
|
||||
return 0;
|
||||
|
||||
clk_disable:
|
||||
|
||||
@@ -638,7 +638,7 @@ static int xenon_runtime_resume(struct device *dev)
|
||||
priv->restore_needed = false;
|
||||
}
|
||||
|
||||
ret = sdhci_runtime_resume_host(host);
|
||||
ret = sdhci_runtime_resume_host(host, 0);
|
||||
if (ret)
|
||||
goto out;
|
||||
return 0;
|
||||
|
||||
@@ -3320,7 +3320,7 @@ int sdhci_runtime_suspend_host(struct sdhci_host *host)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sdhci_runtime_suspend_host);
|
||||
|
||||
int sdhci_runtime_resume_host(struct sdhci_host *host)
|
||||
int sdhci_runtime_resume_host(struct sdhci_host *host, int soft_reset)
|
||||
{
|
||||
struct mmc_host *mmc = host->mmc;
|
||||
unsigned long flags;
|
||||
@@ -3331,7 +3331,7 @@ int sdhci_runtime_resume_host(struct sdhci_host *host)
|
||||
host->ops->enable_dma(host);
|
||||
}
|
||||
|
||||
sdhci_init(host, 0);
|
||||
sdhci_init(host, soft_reset);
|
||||
|
||||
if (mmc->ios.power_mode != MMC_POWER_UNDEFINED &&
|
||||
mmc->ios.power_mode != MMC_POWER_OFF) {
|
||||
|
||||
@@ -781,7 +781,7 @@ void sdhci_adma_write_desc(struct sdhci_host *host, void **desc,
|
||||
int sdhci_suspend_host(struct sdhci_host *host);
|
||||
int sdhci_resume_host(struct sdhci_host *host);
|
||||
int sdhci_runtime_suspend_host(struct sdhci_host *host);
|
||||
int sdhci_runtime_resume_host(struct sdhci_host *host);
|
||||
int sdhci_runtime_resume_host(struct sdhci_host *host, int soft_reset);
|
||||
#endif
|
||||
|
||||
void sdhci_cqe_enable(struct mmc_host *mmc);
|
||||
|
||||
Reference in New Issue
Block a user