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"
Unified · Split
| @@ -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 | |||
| 2504 | static int msdc_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_ios *ios) | 2506 | static 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 | else | 2515 | 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; |
| @@ -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 | ||
| 161 | struct window { | 160 | struct 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 | ||
| 360 | static 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 | |||
| 383 | static u8 sdhci_am654_write_power_on(struct sdhci_host *host, u8 val, int reg) | 359 | static 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); |