[U-Boot] [PATCH v1 6/7] mmc: fsl_esdhc: Add emmc hs200 support
York Sun
york.sun at nxp.com
Tue Sep 10 03:37:02 UTC 2019
Yinbo,
Priyanka is the maintainer now for NXP platforms.
York
> On Sep 9, 2019, at 20:10, Yinbo Zhu <yinbo.zhu at nxp.com> wrote:
>
> Hi York Sun,
>
> Could you help me merge that series patch to uboot upstream tree.
>
> Regards,
> Yinbo Zhu
> ----Original Message-----
> From: Peng Fan
> Sent: 2019年8月28日 9:04
> To: Yinbo Zhu <yinbo.zhu at nxp.com>; York Sun <york.sun at nxp.com>; u-boot at lists.denx.de
> Cc: Jiafei Pan <jiafei.pan at nxp.com>; Yinbo Zhu <yinbo.zhu at nxp.com>; Xiaobo Xie <xiaobo.xie at nxp.com>
> Subject: RE: [U-Boot] [PATCH v1 6/7] mmc: fsl_esdhc: Add emmc hs200 support
>
>> Subject: [U-Boot] [PATCH v1 6/7] mmc: fsl_esdhc: Add emmc hs200
>> support
>>
>> Add eMMC hs200 mode support for increasing ls1028/ls1012/lx2160 eMMC
>> work performance, but without tuning procedure which will cause mmc
>> doesn't work. and this should be TODO work.
>>
>> Signed-off-by: Yinbo Zhu <yinbo.zhu at nxp.com>
>
> Acked-by: Peng Fan <peng.fan at nxp.com>
>
>> ---
>> drivers/mmc/fsl_esdhc.c | 34 +++++++++++++++++++---------------
>> include/fsl_esdhc.h | 4 ++++
>> 2 files changed, 23 insertions(+), 15 deletions(-)
>>
>> diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index
>> 07318472a7..28d2312ef7 100644
>> --- a/drivers/mmc/fsl_esdhc.c
>> +++ b/drivers/mmc/fsl_esdhc.c
>> @@ -395,10 +395,6 @@ static int esdhc_send_cmd_common(struct
>> fsl_esdhc_priv *priv, struct mmc *mmc,
>> esdhc_write32(®s->cmdarg, cmd->cmdarg);
>> esdhc_write32(®s->xfertyp, xfertyp);
>>
>> - if ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK) ||
>> - (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200))
>> - flags = IRQSTAT_BRR;
>> -
>> /* Wait for the command to complete */
>> start = get_timer(0);
>> while (!(esdhc_read32(®s->irqstat) & flags)) { @@ -458,12 +454,6
>> @@ static int esdhc_send_cmd_common(struct fsl_esdhc_priv *priv,
>> struct mmc *mmc, #ifdef CONFIG_SYS_FSL_ESDHC_USE_PIO
>> esdhc_pio_read_write(priv, data);
>> #else
>> - flags = DATA_COMPLETE;
>> - if ((cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK) ||
>> - (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK_HS200))
>> {
>> - flags = IRQSTAT_BRR;
>> - }
>> -
>> do {
>> irqstat = esdhc_read32(®s->irqstat);
>>
>> @@ -476,7 +466,7 @@ static int esdhc_send_cmd_common(struct
>> fsl_esdhc_priv *priv, struct mmc *mmc,
>> err = -ECOMM;
>> goto out;
>> }
>> - } while ((irqstat & flags) != flags);
>> + } while ((irqstat & DATA_COMPLETE) != DATA_COMPLETE);
>>
>> /*
>> * Need invalidate the dcache here again to avoid any @@ -517,7
>> +507,9 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct
>> +mmc
>> *mmc, uint clock)
>> int div = 1;
>> int pre_div = 2;
>> int ddr_pre_div = mmc->ddr_mode ? 2 : 1;
>> - int sdhc_clk = priv->sdhc_clk;
>> + unsigned int sdhc_clk = priv->sdhc_clk;
>> + u32 time_out;
>> + u32 value;
>> uint clk;
>>
>> if (clock < mmc->cfg->f_min)
>> @@ -538,11 +530,18 @@ static void set_sysctl(struct fsl_esdhc_priv
>> *priv, struct mmc *mmc, uint clock)
>>
>> esdhc_clrsetbits32(®s->sysctl, SYSCTL_CLOCK_MASK, clk);
>>
>> - udelay(10000);
>> + time_out = 20;
>> + value = PRSSTAT_SDSTB;
>> + while (!(esdhc_read32(®s->prsstat) & value)) {
>> + if (time_out == 0) {
>> + printf("fsl_esdhc: Internal clock never stabilised.\n");
>> + break;
>> + }
>> + time_out--;
>> + mdelay(1);
>> + }
>>
>> esdhc_setbits32(®s->sysctl, SYSCTL_PEREN | SYSCTL_CKEN);
>> -
>> - priv->clock = clock;
>> }
>>
>> #ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
>> @@ -1024,6 +1023,8 @@ static int fsl_esdhc_probe(struct udevice *dev)
>> return ret;
>> }
>>
>> + mmc_of_parse(dev, &plat->cfg);
>> +
>> mmc = &plat->mmc;
>> mmc->cfg = &plat->cfg;
>> mmc->dev = dev;
>> @@ -1081,6 +1082,9 @@ static const struct dm_mmc_ops fsl_esdhc_ops = {
>> .get_cd = fsl_esdhc_get_cd,
>> .send_cmd = fsl_esdhc_send_cmd,
>> .set_ios = fsl_esdhc_set_ios,
>> +#ifdef MMC_SUPPORTS_TUNING
>> + .execute_tuning = fsl_esdhc_execute_tuning, #endif
>> };
>> #endif
>>
>> diff --git a/include/fsl_esdhc.h b/include/fsl_esdhc.h index
>> 7d7e946ab3..3f496b4cea 100644
>> --- a/include/fsl_esdhc.h
>> +++ b/include/fsl_esdhc.h
>> @@ -205,6 +205,10 @@ struct fsl_esdhc_cfg { int
>> fsl_esdhc_mmc_init(bd_t *bis); int fsl_esdhc_initialize(bd_t *bis,
>> struct fsl_esdhc_cfg *cfg); void fdt_fixup_esdhc(void *blob, bd_t
>> *bd);
>> +#ifdef MMC_SUPPORTS_TUNING
>> +static inline int fsl_esdhc_execute_tuning(struct udevice *dev,
>> + uint32_t opcode) {return 0; }
>> +#endif
>> #else
>> static inline int fsl_esdhc_mmc_init(bd_t *bis) { return -ENOSYS; }
>> static inline void fdt_fixup_esdhc(void *blob, bd_t *bd) {}
>> --
>> 2.17.1
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flist
>> s.d enx.de%2Flistinfo%2Fu-boot&data=02%7C01%7CPeng.Fan%40nxp.com
>> %7Cf80d35b6802b4efdaebf08d709be4692%7C686ea1d3bc2b4c6fa92cd99c5
>> c301635%7C0%7C0%7C636988585169701121&sdata=O6tRZezNU2Tqb
>> Fs2Qgk1GtNd%2BlaonJiLYKRWnWRIu5k%3D&reserved=0
More information about the U-Boot
mailing list