Commit 673cb932 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull MMC fixes from Ulf Hansson:

 - tmio: Fixup support for reset

 - sdhci-of-esdhc: Extend erratum for pulse width to more broken HWs

 - renesas_sdhi: Fix re-binding of drivers

* tag 'mmc-v5.10-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
  Revert "mmc: renesas_sdhi: workaround a regression when reinserting SD cards"
  mmc: tmio: bring tuning HW to a sane state with MMC_POWER_OFF
  mmc: tmio: when resetting, reset DMA controller, too
  mmc: sdhci-of-esdhc: Handle pulse width detection erratum for more SoCs
  mmc: renesas_sdhi_core: Add missing tmio_mmc_host_free() at remove
parents e627c255 03d80e04
Loading
Loading
Loading
Loading
+1 −13
Original line number Diff line number Diff line
@@ -572,17 +572,6 @@ static void renesas_sdhi_reset(struct tmio_mmc_host *host)
					     TMIO_MASK_INIT_RCAR2);
}

/*
 * This is a temporary workaround! This driver used 'hw_reset' wrongly and the
 * fix for that showed a regression. So, we mimic the old behaviour until the
 * proper solution is found.
 */
static void renesas_sdhi_hw_reset(struct mmc_host *mmc)
{
	struct tmio_mmc_host *host = mmc_priv(mmc);
	renesas_sdhi_reset(host);
}

#define SH_MOBILE_SDHI_MIN_TAP_ROW 3

static int renesas_sdhi_select_tuning(struct tmio_mmc_host *host)
@@ -1020,8 +1009,6 @@ int renesas_sdhi_probe(struct platform_device *pdev,
		if (of_data && of_data->scc_offset) {
			priv->scc_ctl = host->ctl + of_data->scc_offset;
			host->reset = renesas_sdhi_reset;
			host->ops.hw_reset = renesas_sdhi_hw_reset;
			host->mmc->caps |= MMC_CAP_HW_RESET;
		}
	}

@@ -1160,6 +1147,7 @@ int renesas_sdhi_remove(struct platform_device *pdev)

	tmio_mmc_host_remove(host);
	renesas_sdhi_clk_disable(host);
	tmio_mmc_host_free(host);

	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -1324,6 +1324,8 @@ static struct soc_device_attribute soc_fixup_sdhc_clkdivs[] = {

static struct soc_device_attribute soc_unreliable_pulse_detection[] = {
	{ .family = "QorIQ LX2160A", .revision = "1.0", },
	{ .family = "QorIQ LX2160A", .revision = "2.0", },
	{ .family = "QorIQ LS1028A", .revision = "1.0", },
	{ },
};

+5 −2
Original line number Diff line number Diff line
@@ -175,6 +175,8 @@ static void tmio_mmc_reset(struct tmio_mmc_host *host)
	if (host->reset)
		host->reset(host);

	tmio_mmc_abort_dma(host);

	if (host->pdata->flags & TMIO_MMC_SDIO_IRQ) {
		sd_ctrl_write16(host, CTL_SDIO_IRQ_MASK, host->sdio_irq_mask);
		sd_ctrl_write16(host, CTL_TRANSACTION_CTL, 0x0001);
@@ -223,8 +225,6 @@ static void tmio_mmc_reset_work(struct work_struct *work)

	/* Ready for new calls */
	host->mrq = NULL;

	tmio_mmc_abort_dma(host);
	mmc_request_done(host->mmc, mrq);
}

@@ -927,6 +927,9 @@ static void tmio_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
	switch (ios->power_mode) {
	case MMC_POWER_OFF:
		tmio_mmc_power_off(host);
		/* Downgrade ensures a sane state for tuning HW (e.g. SCC) */
		if (host->mmc->ops->hs400_downgrade)
			host->mmc->ops->hs400_downgrade(host->mmc);
		host->set_clock(host, 0);
		break;
	case MMC_POWER_UP: