Commit 0768f229e824120c53d40a1c0d062c1f49384100
1 parent
0972a7219f
Exists in
smarc_8mm-imx_v2018.03_4.14.98_2.0.0_ga
and in
5 other branches
MLK-18161-16 fsl_esdhc: Update esdhc driver to support HS400 ES mode
Update for HS400 ES and enable iMX8QM/QXP for HS400 and HS400 ES. Signed-off-by: Ye Li <ye.li@nxp.com>
Showing 1 changed file with 29 additions and 1 deletions Side-by-side Diff
drivers/mmc/fsl_esdhc.c
... | ... | @@ -685,6 +685,7 @@ |
685 | 685 | case UHS_SDR104: |
686 | 686 | case MMC_HS_200: |
687 | 687 | case MMC_HS_400: |
688 | + case MMC_HS_400_ES: | |
688 | 689 | ret = pinctrl_select_state(dev, "state_200mhz"); |
689 | 690 | break; |
690 | 691 | default: |
... | ... | @@ -755,6 +756,7 @@ |
755 | 756 | writel(mixctrl, ®s->mixctrl); |
756 | 757 | break; |
757 | 758 | case MMC_HS_400: |
759 | + case MMC_HS_400_ES: | |
758 | 760 | mixctrl |= MIX_CTRL_DDREN | MIX_CTRL_HS400_EN; |
759 | 761 | writel(mixctrl, ®s->mixctrl); |
760 | 762 | esdhc_set_strobe_dll(mmc); |
... | ... | @@ -1510,7 +1512,7 @@ |
1510 | 1512 | #endif |
1511 | 1513 | |
1512 | 1514 | if (fdt_get_property(fdt, node, "no-1-8-v", NULL)) |
1513 | - priv->caps &= ~(UHS_CAPS | MMC_MODE_HS200 | MMC_MODE_HS400); | |
1515 | + priv->caps &= ~(UHS_CAPS | MMC_MODE_HS200 | MMC_MODE_HS400 | MMC_MODE_HS400_ES); | |
1514 | 1516 | |
1515 | 1517 | /* |
1516 | 1518 | * TODO: |
... | ... | @@ -1580,6 +1582,19 @@ |
1580 | 1582 | return esdhc_set_ios_common(priv, &plat->mmc); |
1581 | 1583 | } |
1582 | 1584 | |
1585 | +#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT) | |
1586 | +static void fsl_esdhc_set_enhanced_strobe(struct udevice *dev) | |
1587 | +{ | |
1588 | + struct fsl_esdhc_priv *priv = dev_get_priv(dev); | |
1589 | + struct fsl_esdhc *regs = priv->esdhc_regs; | |
1590 | + u32 m; | |
1591 | + | |
1592 | + m = readl(®s->mixctrl); | |
1593 | + m |= MIX_CTRL_HS400_ES; | |
1594 | + writel(m, ®s->mixctrl); | |
1595 | +} | |
1596 | +#endif | |
1597 | + | |
1583 | 1598 | static const struct dm_mmc_ops fsl_esdhc_ops = { |
1584 | 1599 | .get_cd = fsl_esdhc_get_cd, |
1585 | 1600 | .send_cmd = fsl_esdhc_send_cmd, |
... | ... | @@ -1587,6 +1602,9 @@ |
1587 | 1602 | #ifdef MMC_SUPPORTS_TUNING |
1588 | 1603 | .execute_tuning = fsl_esdhc_execute_tuning, |
1589 | 1604 | #endif |
1605 | +#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT) | |
1606 | + .set_enhanced_strobe = fsl_esdhc_set_enhanced_strobe, | |
1607 | +#endif | |
1590 | 1608 | }; |
1591 | 1609 | #endif |
1592 | 1610 | |
... | ... | @@ -1598,6 +1616,15 @@ |
1598 | 1616 | MMC_MODE_HS_52MHz | MMC_MODE_HS, |
1599 | 1617 | }; |
1600 | 1618 | |
1619 | +static struct esdhc_soc_data usdhc_imx8qm_data = { | |
1620 | + .flags = ESDHC_FLAG_USDHC | ESDHC_FLAG_STD_TUNING | |
1621 | + | ESDHC_FLAG_HAVE_CAP1 | ESDHC_FLAG_HS200 | |
1622 | + | ESDHC_FLAG_HS400 |ESDHC_FLAG_HS400_ES, | |
1623 | + .caps = UHS_CAPS | MMC_MODE_HS400 | MMC_MODE_HS400_ES | | |
1624 | + MMC_MODE_HS200 | MMC_MODE_DDR_52MHz | | |
1625 | + MMC_MODE_HS_52MHz | MMC_MODE_HS, | |
1626 | +}; | |
1627 | + | |
1601 | 1628 | static const struct udevice_id fsl_esdhc_ids[] = { |
1602 | 1629 | { .compatible = "fsl,imx6ul-usdhc", }, |
1603 | 1630 | { .compatible = "fsl,imx6sx-usdhc", }, |
... | ... | @@ -1605,6 +1632,7 @@ |
1605 | 1632 | { .compatible = "fsl,imx6q-usdhc", }, |
1606 | 1633 | { .compatible = "fsl,imx7d-usdhc", .data = (ulong)&usdhc_imx7d_data,}, |
1607 | 1634 | { .compatible = "fsl,imx7ulp-usdhc", }, |
1635 | + { .compatible = "fsl,imx8qm-usdhc", .data = (ulong)&usdhc_imx8qm_data,}, | |
1608 | 1636 | { .compatible = "fsl,esdhc", }, |
1609 | 1637 | { /* sentinel */ } |
1610 | 1638 | }; |