Commit 0768f229e824120c53d40a1c0d062c1f49384100

Authored by Ye Li
1 parent 0972a7219f

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, &regs->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, &regs->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(&regs->mixctrl);
  1593 + m |= MIX_CTRL_HS400_ES;
  1594 + writel(m, &regs->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 };