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

 - Fix support for deferred probing for several host drivers

 - litex_mmc: Use async probe as it's common for all mmc hosts

 - meson-gx: Fix bug when scheduling while atomic

 - mmci_stm32: Fix max busy timeout calculation

 - sdhci-msm: Disable broken 64-bit DMA on MSM8916

* tag 'mmc-v6.4-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
  mmc: usdhi60rol0: fix deferred probing
  mmc: sunxi: fix deferred probing
  mmc: sh_mmcif: fix deferred probing
  mmc: sdhci-spear: fix deferred probing
  mmc: sdhci-acpi: fix deferred probing
  mmc: owl: fix deferred probing
  mmc: omap_hsmmc: fix deferred probing
  mmc: omap: fix deferred probing
  mmc: mvsdio: fix deferred probing
  mmc: mtk-sd: fix deferred probing
  mmc: meson-gx: fix deferred probing
  mmc: bcm2835: fix deferred probing
  mmc: litex_mmc: set PROBE_PREFER_ASYNCHRONOUS
  mmc: meson-gx: remove redundant mmc_request_done() call from irq context
  mmc: mmci: stm32: fix max busy timeout calculation
  mmc: sdhci-msm: Disable broken 64-bit DMA on MSM8916
parents 65d48989 413db499
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1403,8 +1403,8 @@ static int bcm2835_probe(struct platform_device *pdev)
	host->max_clk = clk_get_rate(clk);

	host->irq = platform_get_irq(pdev, 0);
	if (host->irq <= 0) {
		ret = -EINVAL;
	if (host->irq < 0) {
		ret = host->irq;
		goto err;
	}

+1 −0
Original line number Diff line number Diff line
@@ -649,6 +649,7 @@ static struct platform_driver litex_mmc_driver = {
	.driver = {
		.name = "litex-mmc",
		.of_match_table = litex_match,
		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
	},
};
module_platform_driver(litex_mmc_driver);
+4 −10
Original line number Diff line number Diff line
@@ -991,11 +991,8 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id)

		if (data && !cmd->error)
			data->bytes_xfered = data->blksz * data->blocks;
		if (meson_mmc_bounce_buf_read(data) ||
		    meson_mmc_get_next_command(cmd))
			ret = IRQ_WAKE_THREAD;
		else
			ret = IRQ_HANDLED;

		return IRQ_WAKE_THREAD;
	}

out:
@@ -1007,9 +1004,6 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id)
		writel(start, host->regs + SD_EMMC_START);
	}

	if (ret == IRQ_HANDLED)
		meson_mmc_request_done(host->mmc, cmd->mrq);

	return ret;
}

@@ -1192,8 +1186,8 @@ static int meson_mmc_probe(struct platform_device *pdev)
		return PTR_ERR(host->regs);

	host->irq = platform_get_irq(pdev, 0);
	if (host->irq <= 0)
		return -EINVAL;
	if (host->irq < 0)
		return host->irq;

	cd_irq = platform_get_irq_optional(pdev, 1);
	mmc_gpio_set_cd_irq(mmc, cd_irq);
+2 −1
Original line number Diff line number Diff line
@@ -1735,7 +1735,8 @@ static void mmci_set_max_busy_timeout(struct mmc_host *mmc)
		return;

	if (host->variant->busy_timeout && mmc->actual_clock)
		max_busy_timeout = ~0UL / (mmc->actual_clock / MSEC_PER_SEC);
		max_busy_timeout = U32_MAX / DIV_ROUND_UP(mmc->actual_clock,
							  MSEC_PER_SEC);

	mmc->max_busy_timeout = max_busy_timeout;
}
+1 −1
Original line number Diff line number Diff line
@@ -2680,7 +2680,7 @@ static int msdc_drv_probe(struct platform_device *pdev)

	host->irq = platform_get_irq(pdev, 0);
	if (host->irq < 0) {
		ret = -EINVAL;
		ret = host->irq;
		goto host_free;
	}

Loading