hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/mmc/host/renesas_sdhi_core.c
....@@ -537,7 +537,7 @@
537537 SH_MOBILE_SDHI_SCC_TMPPORT2_HS400OSEL) &
538538 sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_TMPPORT2));
539539
540
- if (priv->adjust_hs400_calib_table)
540
+ if (priv->quirks && (priv->quirks->hs400_calib_table || priv->quirks->hs400_bad_taps))
541541 renesas_sdhi_adjust_hs400_mode_disable(host);
542542
543543 sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, CLK_CTL_SCLKEN |
....@@ -556,16 +556,18 @@
556556 {
557557 struct renesas_sdhi *priv = host_to_priv(host);
558558
559
- renesas_sdhi_reset_scc(host, priv);
560
- renesas_sdhi_reset_hs400_mode(host, priv);
561
- priv->needs_adjust_hs400 = false;
559
+ if (priv->scc_ctl) {
560
+ renesas_sdhi_reset_scc(host, priv);
561
+ renesas_sdhi_reset_hs400_mode(host, priv);
562
+ priv->needs_adjust_hs400 = false;
562563
563
- sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, CLK_CTL_SCLKEN |
564
- sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL));
564
+ sd_ctrl_write16(host, CTL_SD_CARD_CLK_CTL, CLK_CTL_SCLKEN |
565
+ sd_ctrl_read16(host, CTL_SD_CARD_CLK_CTL));
565566
566
- sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL,
567
- ~SH_MOBILE_SDHI_SCC_RVSCNTL_RVSEN &
568
- sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL));
567
+ sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL,
568
+ ~SH_MOBILE_SDHI_SCC_RVSCNTL_RVSEN &
569
+ sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL));
570
+ }
569571
570572 if (host->pdata->flags & TMIO_MMC_MIN_RCAR2)
571573 sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK,
....@@ -1010,11 +1012,9 @@
10101012 host->ops.start_signal_voltage_switch =
10111013 renesas_sdhi_start_signal_voltage_switch;
10121014 host->sdcard_irq_setbit_mask = TMIO_STAT_ALWAYS_SET_27;
1013
-
1014
- if (of_data && of_data->scc_offset) {
1015
- priv->scc_ctl = host->ctl + of_data->scc_offset;
1016
- host->reset = renesas_sdhi_reset;
1017
- }
1015
+ host->reset = renesas_sdhi_reset;
1016
+ } else {
1017
+ host->sdcard_irq_mask_all = TMIO_MASK_ALL;
10181018 }
10191019
10201020 /* Orginally registers were 16 bit apart, could be 32 or 64 nowadays */
....@@ -1070,10 +1070,6 @@
10701070 quirks->hs400_calib_table + 1);
10711071 }
10721072
1073
- ret = tmio_mmc_host_probe(host);
1074
- if (ret < 0)
1075
- goto edisclk;
1076
-
10771073 /* Enable tuning iff we have an SCC and a supported mode */
10781074 if (of_data && of_data->scc_offset &&
10791075 (host->mmc->caps & MMC_CAP_UHS_SDR104 ||
....@@ -1098,12 +1094,15 @@
10981094 if (!hit)
10991095 dev_warn(&host->pdev->dev, "Unknown clock rate for tuning\n");
11001096
1097
+ priv->scc_ctl = host->ctl + of_data->scc_offset;
11011098 host->check_retune = renesas_sdhi_check_scc_error;
11021099 host->ops.execute_tuning = renesas_sdhi_execute_tuning;
11031100 host->ops.prepare_hs400_tuning = renesas_sdhi_prepare_hs400_tuning;
11041101 host->ops.hs400_downgrade = renesas_sdhi_disable_scc;
11051102 host->ops.hs400_complete = renesas_sdhi_hs400_complete;
11061103 }
1104
+
1105
+ sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, host->sdcard_irq_mask_all);
11071106
11081107 num_irqs = platform_irq_count(pdev);
11091108 if (num_irqs < 0) {
....@@ -1130,6 +1129,10 @@
11301129 goto eirq;
11311130 }
11321131
1132
+ ret = tmio_mmc_host_probe(host);
1133
+ if (ret < 0)
1134
+ goto edisclk;
1135
+
11331136 dev_info(&pdev->dev, "%s base at %pa, max clock rate %u MHz\n",
11341137 mmc_hostname(host->mmc), &res->start, host->mmc->f_max / 1000000);
11351138