On Fri, 30 Jul 2021 at 08:33, <rashmi.a@xxxxxxxxx> wrote: > > From: Rashmi A <rashmi.a@xxxxxxxxx> > > Intel Thunder Bay SoC eMMC controller is based on Arasan > eMMC 5.1 host controller IP > > Signed-off-by: Rashmi A <rashmi.a@xxxxxxxxx> > Reviewed-by: Adrian Hunter <adrian.hunter@xxxxxxxxx> Rashmi, is it safe to apply this separately from the phy driver/dt changes? Then I can queue this via my mmc tree, if you like. Kind regards Uffe > --- > drivers/mmc/host/sdhci-of-arasan.c | 29 ++++++++++++++++++++++++++++- > 1 file changed, 28 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c > index 839965f7c717..6f202fb7a546 100644 > --- a/drivers/mmc/host/sdhci-of-arasan.c > +++ b/drivers/mmc/host/sdhci-of-arasan.c > @@ -185,6 +185,13 @@ static const struct sdhci_arasan_soc_ctl_map intel_lgm_sdxc_soc_ctl_map = { > .hiword_update = false, > }; > > +static const struct sdhci_arasan_soc_ctl_map thunderbay_soc_ctl_map = { > + .baseclkfreq = { .reg = 0x0, .width = 8, .shift = 14 }, > + .clockmultiplier = { .reg = 0x4, .width = 8, .shift = 14 }, > + .support64b = { .reg = 0x4, .width = 1, .shift = 24 }, > + .hiword_update = false, > +}; > + > static const struct sdhci_arasan_soc_ctl_map intel_keembay_soc_ctl_map = { > .baseclkfreq = { .reg = 0x0, .width = 8, .shift = 14 }, > .clockmultiplier = { .reg = 0x4, .width = 8, .shift = 14 }, > @@ -430,6 +437,15 @@ static const struct sdhci_pltfm_data sdhci_arasan_cqe_pdata = { > SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN, > }; > > +static const struct sdhci_pltfm_data sdhci_arasan_thunderbay_pdata = { > + .ops = &sdhci_arasan_cqe_ops, > + .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC, > + .quirks2 = SDHCI_QUIRK2_PRESET_VALUE_BROKEN | > + SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN | > + SDHCI_QUIRK2_STOP_WITH_TC | > + SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400, > +}; > + > #ifdef CONFIG_PM_SLEEP > /** > * sdhci_arasan_suspend - Suspend method for the driver > @@ -1098,6 +1114,12 @@ static struct sdhci_arasan_of_data sdhci_arasan_generic_data = { > .clk_ops = &arasan_clk_ops, > }; > > +static const struct sdhci_arasan_of_data sdhci_arasan_thunderbay_data = { > + .soc_ctl_map = &thunderbay_soc_ctl_map, > + .pdata = &sdhci_arasan_thunderbay_pdata, > + .clk_ops = &arasan_clk_ops, > +}; > + > static const struct sdhci_pltfm_data sdhci_keembay_emmc_pdata = { > .ops = &sdhci_arasan_cqe_ops, > .quirks = SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN | > @@ -1231,6 +1253,10 @@ static const struct of_device_id sdhci_arasan_of_match[] = { > .compatible = "intel,keembay-sdhci-5.1-sdio", > .data = &intel_keembay_sdio_data, > }, > + { > + .compatible = "intel,thunderbay-sdhci-5.1", > + .data = &sdhci_arasan_thunderbay_data, > + }, > /* Generic compatible below here */ > { > .compatible = "arasan,sdhci-8.9a", > @@ -1582,7 +1608,8 @@ static int sdhci_arasan_probe(struct platform_device *pdev) > > if (of_device_is_compatible(np, "intel,keembay-sdhci-5.1-emmc") || > of_device_is_compatible(np, "intel,keembay-sdhci-5.1-sd") || > - of_device_is_compatible(np, "intel,keembay-sdhci-5.1-sdio")) { > + of_device_is_compatible(np, "intel,keembay-sdhci-5.1-sdio") || > + of_device_is_compatible(np, "intel,thunderbay-sdhci-5.1")) { > sdhci_arasan_update_clockmultiplier(host, 0x0); > sdhci_arasan_update_support64b(host, 0x0); > > -- > 2.17.1 >