[PATCH v3 05/20] mmc: am654_sdhci: Add support for AM65x SR2.0
Jaehoon Chung
jh80.chung at samsung.com
Mon Jan 25 23:19:16 CET 2021
On 1/21/21 9:40 PM, Aswath Govindraju wrote:
> From: Faiz Abbas <faiz_abbas at ti.com>
>
> Add Support for AM65x PG2.0. Use the SoC bus framework to fixup
> the platform data and do DLL calibration if the revision is 1.0
Is there no method to get the revision from H/W?
If not, looks good tome.
>
> Signed-off-by: Faiz Abbas <faiz_abbas at ti.com>
> Signed-off-by: Aswath Govindraju <a-govindraju at ti.com>
Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>
Best Regards,
Jaehoon Chung
> ---
> drivers/mmc/am654_sdhci.c | 30 ++++++++++++++++++++++++++++++
> 1 file changed, 30 insertions(+)
>
> diff --git a/drivers/mmc/am654_sdhci.c b/drivers/mmc/am654_sdhci.c
> index 1e0654183811..5790fa3d0dbf 100644
> --- a/drivers/mmc/am654_sdhci.c
> +++ b/drivers/mmc/am654_sdhci.c
> @@ -12,6 +12,7 @@
> #include <power-domain.h>
> #include <regmap.h>
> #include <sdhci.h>
> +#include <soc.h>
> #include <dm/device_compat.h>
> #include <linux/bitops.h>
> #include <linux/err.h>
> @@ -292,6 +293,11 @@ const struct sdhci_ops am654_sdhci_ops = {
> };
>
> const struct am654_driver_data am654_drv_data = {
> + .ops = &am654_sdhci_ops,
> + .flags = DLL_PRESENT | IOMUX_PRESENT | FREQSEL_2_BIT | STRBSEL_4_BIT,
> +};
> +
> +const struct am654_driver_data am654_sr1_drv_data = {
> .ops = &am654_sdhci_ops,
> .flags = IOMUX_PRESENT | FREQSEL_2_BIT | DLL_PRESENT | DLL_CALIB |
> STRBSEL_4_BIT,
> @@ -326,6 +332,11 @@ const struct am654_driver_data j721e_4bit_drv_data = {
> .flags = IOMUX_PRESENT,
> };
>
> +const struct soc_attr am654_sdhci_soc_attr[] = {
> + { .family = "AM65X", .revision = "SR1.0", .data = &am654_sr1_drv_data},
> + {/* sentinel */}
> +};
> +
> static int sdhci_am654_get_otap_delay(struct udevice *dev,
> struct mmc_config *cfg)
> {
> @@ -365,6 +376,8 @@ static int am654_sdhci_probe(struct udevice *dev)
> struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
> struct sdhci_host *host = dev_get_priv(dev);
> struct mmc_config *cfg = &plat->cfg;
> + const struct soc_attr *soc;
> + const struct am654_driver_data *soc_drv_data;
> struct clk clk;
> unsigned long clock;
> int ret;
> @@ -394,6 +407,14 @@ static int am654_sdhci_probe(struct udevice *dev)
> return ret;
>
> host->ops = drv_data->ops;
> +
> + /* Update ops based on SoC revision */
> + soc = soc_device_match(am654_sdhci_soc_attr);
> + if (soc && soc->data) {
> + soc_drv_data = soc->data;
> + host->ops = soc_drv_data->ops;
> + }
> +
> host->mmc->priv = host;
> upriv->mmc = host->mmc;
>
> @@ -458,9 +479,18 @@ static int am654_sdhci_bind(struct udevice *dev)
> struct am654_driver_data *drv_data =
> (struct am654_driver_data *)dev_get_driver_data(dev);
> struct am654_sdhci_plat *plat = dev_get_plat(dev);
> + const struct soc_attr *soc;
> + const struct am654_driver_data *soc_drv_data;
>
> plat->flags = drv_data->flags;
>
> + /* Update flags based on SoC revision */
> + soc = soc_device_match(am654_sdhci_soc_attr);
> + if (soc && soc->data) {
> + soc_drv_data = soc->data;
> + plat->flags = soc_drv_data->flags;
> + }
> +
> return sdhci_bind(dev, &plat->mmc, &plat->cfg);
> }
>
>
More information about the U-Boot
mailing list