Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

mmc: dw_mmc: add exynos7870 DW MMC support

Add support for Exynos7870 DW MMC controllers, for both SMU and non-SMU
variants. These controllers require a quirk to access 64-bit FIFO in 32-bit
accesses (DW_MMC_QUIRK_FIFO64_32).

Signed-off-by: Kaustabh Chakraborty <kauschluss@disroot.org>
Link: https://lore.kernel.org/r/20250219-exynos7870-mmc-v2-3-b4255a3e39ed@disroot.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>

authored by

Kaustabh Chakraborty and committed by
Ulf Hansson
7cbe799a 57c0902f

+40 -1
+40 -1
drivers/mmc/host/dw_mmc-exynos.c
··· 27 27 DW_MCI_TYPE_EXYNOS5420_SMU, 28 28 DW_MCI_TYPE_EXYNOS7, 29 29 DW_MCI_TYPE_EXYNOS7_SMU, 30 + DW_MCI_TYPE_EXYNOS7870, 31 + DW_MCI_TYPE_EXYNOS7870_SMU, 30 32 DW_MCI_TYPE_ARTPEC8, 31 33 }; 32 34 ··· 72 70 .compatible = "samsung,exynos7-dw-mshc-smu", 73 71 .ctrl_type = DW_MCI_TYPE_EXYNOS7_SMU, 74 72 }, { 73 + .compatible = "samsung,exynos7870-dw-mshc", 74 + .ctrl_type = DW_MCI_TYPE_EXYNOS7870, 75 + }, { 76 + .compatible = "samsung,exynos7870-dw-mshc-smu", 77 + .ctrl_type = DW_MCI_TYPE_EXYNOS7870_SMU, 78 + }, { 75 79 .compatible = "axis,artpec8-dw-mshc", 76 80 .ctrl_type = DW_MCI_TYPE_ARTPEC8, 77 81 }, ··· 93 85 return EXYNOS4210_FIXED_CIU_CLK_DIV; 94 86 else if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 95 87 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 88 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 89 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 96 90 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 97 91 return SDMMC_CLKSEL_GET_DIV(mci_readl(host, CLKSEL64)) + 1; 98 92 else ··· 110 100 * set for non-ecryption mode at this time. 111 101 */ 112 102 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS5420_SMU || 113 - priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU) { 103 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 104 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU) { 114 105 mci_writel(host, MPSBEGIN0, 0); 115 106 mci_writel(host, MPSEND0, SDMMC_ENDING_SEC_NR_MAX); 116 107 mci_writel(host, MPSCTRL0, SDMMC_MPSCTRL_SECURE_WRITE_BIT | ··· 137 126 DQS_CTRL_GET_RD_DELAY(priv->saved_strobe_ctrl); 138 127 } 139 128 129 + if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 130 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU) { 131 + /* Quirk needed for certain Exynos SoCs */ 132 + host->quirks |= DW_MMC_QUIRK_FIFO64_32; 133 + } 134 + 140 135 if (priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) { 141 136 /* Quirk needed for the ARTPEC-8 SoC */ 142 137 host->quirks |= DW_MMC_QUIRK_EXTENDED_TMOUT; ··· 160 143 161 144 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 162 145 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 146 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 147 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 163 148 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 164 149 clksel = mci_readl(host, CLKSEL64); 165 150 else ··· 171 152 172 153 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 173 154 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 155 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 156 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 174 157 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 175 158 mci_writel(host, CLKSEL64, clksel); 176 159 else ··· 243 222 244 223 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 245 224 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 225 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 226 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 246 227 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 247 228 clksel = mci_readl(host, CLKSEL64); 248 229 else ··· 253 230 if (clksel & SDMMC_CLKSEL_WAKEUP_INT) { 254 231 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 255 232 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 233 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 234 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 256 235 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 257 236 mci_writel(host, CLKSEL64, clksel); 258 237 else ··· 434 409 435 410 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 436 411 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 412 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 413 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 437 414 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 438 415 return SDMMC_CLKSEL_CCLK_SAMPLE(mci_readl(host, CLKSEL64)); 439 416 else ··· 449 422 450 423 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 451 424 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 425 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 426 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 452 427 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 453 428 clksel = mci_readl(host, CLKSEL64); 454 429 else ··· 458 429 clksel = SDMMC_CLKSEL_UP_SAMPLE(clksel, sample); 459 430 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 460 431 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 432 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 433 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 461 434 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 462 435 mci_writel(host, CLKSEL64, clksel); 463 436 else ··· 474 443 475 444 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 476 445 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 446 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 447 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 477 448 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 478 449 clksel = mci_readl(host, CLKSEL64); 479 450 else ··· 486 453 487 454 if (priv->ctrl_type == DW_MCI_TYPE_EXYNOS7 || 488 455 priv->ctrl_type == DW_MCI_TYPE_EXYNOS7_SMU || 456 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870 || 457 + priv->ctrl_type == DW_MCI_TYPE_EXYNOS7870_SMU || 489 458 priv->ctrl_type == DW_MCI_TYPE_ARTPEC8) 490 459 mci_writel(host, CLKSEL64, clksel); 491 460 else ··· 666 631 { .compatible = "samsung,exynos7-dw-mshc", 667 632 .data = &exynos_drv_data, }, 668 633 { .compatible = "samsung,exynos7-dw-mshc-smu", 634 + .data = &exynos_drv_data, }, 635 + { .compatible = "samsung,exynos7870-dw-mshc", 636 + .data = &exynos_drv_data, }, 637 + { .compatible = "samsung,exynos7870-dw-mshc-smu", 669 638 .data = &exynos_drv_data, }, 670 639 { .compatible = "axis,artpec8-dw-mshc", 671 640 .data = &artpec_drv_data, },