History

Merge tag 'mmc-v6.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc

Pull MMC host fixes from Ulf Hansson: - mtk-sd: Fix register settings for hs400(es) mode - sdhci_am654: Revert patch for start-signal-voltage-switch * tag 'mmc-v6.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: mmc: mtk-sd: Fix register settings for hs400(es) mode Revert "mmc: sdhci_am654: Add sdhci_am654_start_signal_voltage_switch"

Linus Torvalds committed 1 year ago

Commit f92a80b2 parents cabb162 3e68abf2 files · +20 −41Browse files

Unified · Split

2 files
  1. drivers/mmc/host/mtk-sd.c +20 −11
  2. drivers/mmc/host/sdhci_am654.c +0 −30
drivers/mmc/host/mtk-sd.c+20−11
@@ -273,6 +273,7 @@ · 272 unmodified lines
273#define MSDC_PAD_TUNE_CMD2_SEL BIT(21) /* RW */273#define MSDC_PAD_TUNE_CMD2_SEL BIT(21) /* RW */
274 274
275#define PAD_DS_TUNE_DLY_SEL BIT(0) /* RW */275#define PAD_DS_TUNE_DLY_SEL BIT(0) /* RW */
276#define PAD_DS_TUNE_DLY2_SEL BIT(1) /* RW */
276#define PAD_DS_TUNE_DLY1 GENMASK(6, 2) /* RW */277#define PAD_DS_TUNE_DLY1 GENMASK(6, 2) /* RW */
277#define PAD_DS_TUNE_DLY2 GENMASK(11, 7) /* RW */278#define PAD_DS_TUNE_DLY2 GENMASK(11, 7) /* RW */
278#define PAD_DS_TUNE_DLY3 GENMASK(16, 12) /* RW */279#define PAD_DS_TUNE_DLY3 GENMASK(16, 12) /* RW */
@@ -318,6 +319,7 @@ · 39 unmodified lines
318 319
319/* EMMC50_PAD_DS_TUNE mask */320/* EMMC50_PAD_DS_TUNE mask */
320#define PAD_DS_DLY_SEL BIT(16) /* RW */321#define PAD_DS_DLY_SEL BIT(16) /* RW */
322#define PAD_DS_DLY2_SEL BIT(15) /* RW */
321#define PAD_DS_DLY1 GENMASK(14, 10) /* RW */323#define PAD_DS_DLY1 GENMASK(14, 10) /* RW */
322#define PAD_DS_DLY3 GENMASK(4, 0) /* RW */324#define PAD_DS_DLY3 GENMASK(4, 0) /* RW */
323 325
@@ -2504,13 +2506,23 @@ tune_done: · 2180 unmodified lines
2504static int msdc_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios)2506static int msdc_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios)
2505{2507{
2506 struct msdc_host *host = mmc_priv(mmc);2508 struct msdc_host *host = mmc_priv(mmc);
2509
2507 host->hs400_mode = true;2510 host->hs400_mode = true;
2508 2511
2509 if (host->top_base)2512 if (host->top_base) {
2510 writel(host->hs400_ds_delay,2513 if (host->hs400_ds_dly3)
2511 host->top_base + EMMC50_PAD_DS_TUNE);2514 sdr_set_field(host->top_base + EMMC50_PAD_DS_TUNE,
2512 else2515 PAD_DS_DLY3, host->hs400_ds_dly3);
2513 writel(host->hs400_ds_delay, host->base + PAD_DS_TUNE);2516 if (host->hs400_ds_delay)
2517 writel(host->hs400_ds_delay,
2518 host->top_base + EMMC50_PAD_DS_TUNE);
2519 } else {
2520 if (host->hs400_ds_dly3)
2521 sdr_set_field(host->base + PAD_DS_TUNE,
2522 PAD_DS_TUNE_DLY3, host->hs400_ds_dly3);
2523 if (host->hs400_ds_delay)
2524 writel(host->hs400_ds_delay, host->base + PAD_DS_TUNE);
2525 }
2514 /* hs400 mode must set it to 0 */2526 /* hs400 mode must set it to 0 */
2515 sdr_clr_bits(host->base + MSDC_PATCH_BIT2, MSDC_PATCH_BIT2_CFGCRCSTS);2527 sdr_clr_bits(host->base + MSDC_PATCH_BIT2, MSDC_PATCH_BIT2_CFGCRCSTS);
2516 /* to improve read performance, set outstanding to 2 */2528 /* to improve read performance, set outstanding to 2 */
@@ -2530,14 +2542,11 @@ static int msdc_execute_hs400_tuning(struct mmc_host *mmc, struct mmc_card *card · 13 unmodified lines
2530 if (host->top_base) {2542 if (host->top_base) {
2531 sdr_set_bits(host->top_base + EMMC50_PAD_DS_TUNE,2543 sdr_set_bits(host->top_base + EMMC50_PAD_DS_TUNE,
2532 PAD_DS_DLY_SEL);2544 PAD_DS_DLY_SEL);
2533 if (host->hs400_ds_dly3)2545 sdr_clr_bits(host->top_base + EMMC50_PAD_DS_TUNE,
2534 sdr_set_field(host->top_base + EMMC50_PAD_DS_TUNE,2546 PAD_DS_DLY2_SEL);
2535 PAD_DS_DLY3, host->hs400_ds_dly3);
2536 } else {2547 } else {
2537 sdr_set_bits(host->base + PAD_DS_TUNE, PAD_DS_TUNE_DLY_SEL);2548 sdr_set_bits(host->base + PAD_DS_TUNE, PAD_DS_TUNE_DLY_SEL);
2538 if (host->hs400_ds_dly3)2549 sdr_clr_bits(host->base + PAD_DS_TUNE, PAD_DS_TUNE_DLY2_SEL);
2539 sdr_set_field(host->base + PAD_DS_TUNE,
2540 PAD_DS_TUNE_DLY3, host->hs400_ds_dly3);
2541 }2550 }
2542 2551
2543 host->hs400_tuning = true;2552 host->hs400_tuning = true;
drivers/mmc/host/sdhci_am654.c+0−30
@@ -155,7 +155,6 @@ struct sdhci_am654_data { · 154 unmodified lines
155 u32 tuning_loop;155 u32 tuning_loop;
156 156
157#define SDHCI_AM654_QUIRK_FORCE_CDTEST BIT(0)157#define SDHCI_AM654_QUIRK_FORCE_CDTEST BIT(0)
158#define SDHCI_AM654_QUIRK_SUPPRESS_V1P8_ENA BIT(1)
159};158};
160 159
161struct window {160struct window {
@@ -357,29 +356,6 @@ static void sdhci_j721e_4bit_set_clock(struct sdhci_host *host, · 195 unmodified lines
357 sdhci_set_clock(host, clock);356 sdhci_set_clock(host, clock);
358}357}
359 358
360static int sdhci_am654_start_signal_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios)
361{
362 struct sdhci_host *host = mmc_priv(mmc);
363 struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
364 struct sdhci_am654_data *sdhci_am654 = sdhci_pltfm_priv(pltfm_host);
365 int ret;
366
367 if ((sdhci_am654->quirks & SDHCI_AM654_QUIRK_SUPPRESS_V1P8_ENA) &&
368 ios->signal_voltage == MMC_SIGNAL_VOLTAGE_180) {
369 if (!IS_ERR(mmc->supply.vqmmc)) {
370 ret = mmc_regulator_set_vqmmc(mmc, ios);
371 if (ret < 0) {
372 pr_err("%s: Switching to 1.8V signalling voltage failed,\n",
373 mmc_hostname(mmc));
374 return -EIO;
375 }
376 }
377 return 0;
378 }
379
380 return sdhci_start_signal_voltage_switch(mmc, ios);
381}
382
383static u8 sdhci_am654_write_power_on(struct sdhci_host *host, u8 val, int reg)359static u8 sdhci_am654_write_power_on(struct sdhci_host *host, u8 val, int reg)
384{360{
385 writeb(val, host->ioaddr + reg);361 writeb(val, host->ioaddr + reg);
@@ -868,11 +844,6 @@ static int sdhci_am654_get_of_property(struct platform_device *pdev, · 482 unmodified lines
868 if (device_property_read_bool(dev, "ti,fails-without-test-cd"))844 if (device_property_read_bool(dev, "ti,fails-without-test-cd"))
869 sdhci_am654->quirks |= SDHCI_AM654_QUIRK_FORCE_CDTEST;845 sdhci_am654->quirks |= SDHCI_AM654_QUIRK_FORCE_CDTEST;
870 846
871 /* Suppress v1p8 ena for eMMC and SD with vqmmc supply */
872 if (!!of_parse_phandle(dev->of_node, "vmmc-supply", 0) ==
873 !!of_parse_phandle(dev->of_node, "vqmmc-supply", 0))
874 sdhci_am654->quirks |= SDHCI_AM654_QUIRK_SUPPRESS_V1P8_ENA;
875
876 sdhci_get_of_property(pdev);847 sdhci_get_of_property(pdev);
877 848
878 return 0;849 return 0;
@@ -969,7 +940,6 @@ static int sdhci_am654_probe(struct platform_device *pdev) · 90 unmodified lines
969 goto err_pltfm_free;940 goto err_pltfm_free;
970 }941 }
971 942
972 host->mmc_host_ops.start_signal_voltage_switch = sdhci_am654_start_signal_voltage_switch;
973 host->mmc_host_ops.execute_tuning = sdhci_am654_execute_tuning;943 host->mmc_host_ops.execute_tuning = sdhci_am654_execute_tuning;
974 944
975 pm_runtime_get_noresume(dev);945 pm_runtime_get_noresume(dev);