Message ID | 20200915195147.2659607-2-mr.nuke.me@gmail.com |
---|---|
State | Accepted |
Delegated to: | Patrick Delaunay |
Headers | show |
Series | mmc: stm32_sdmmc2: Use mmc_of_parse() to read host capabilities | expand |
Hi, > From: Alexandru Gagniuc <mr.nuke.me@gmail.com> > Sent: mardi 15 septembre 2020 21:52 > > mmc_of_parse() can populate the 'f_max' and 'host_caps' fields of struct > mmc_config from devicetree. > The same logic is duplicated in stm32_sdmmc2_probe(). Use mmc_of_parse(), > which is more generic. > > Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> > --- > Changes from v1: > - Check the return value of mmc_of_parse(). > - The call to mmc_of_parse() is moved further up. This means we can just > 'return err' on error instead of exiting via goto. > > drivers/mmc/stm32_sdmmc2.c | 24 ++++++------------------ > 1 file changed, 6 insertions(+), 18 deletions(-) > Reviewed-by: Patrick Delaunay <patrick.delaunay@st.com> Thanks Patrick
Hi Alexandru On 9/15/20 9:51 PM, Alexandru Gagniuc wrote: > mmc_of_parse() can populate the 'f_max' and 'host_caps' fields of > struct mmc_config from devicetree. > The same logic is duplicated in stm32_sdmmc2_probe(). Use > mmc_of_parse(), which is more generic. > > Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> > --- > Changes from v1: > - Check the return value of mmc_of_parse(). > - The call to mmc_of_parse() is moved further up. This means we can just > 'return err' on error instead of exiting via goto. > > drivers/mmc/stm32_sdmmc2.c | 24 ++++++------------------ > 1 file changed, 6 insertions(+), 18 deletions(-) > > diff --git a/drivers/mmc/stm32_sdmmc2.c b/drivers/mmc/stm32_sdmmc2.c > index 6d50356217..a29657429c 100644 > --- a/drivers/mmc/stm32_sdmmc2.c > +++ b/drivers/mmc/stm32_sdmmc2.c > @@ -653,6 +653,12 @@ static int stm32_sdmmc2_probe(struct udevice *dev) > if (priv->base == FDT_ADDR_T_NONE) > return -EINVAL; > > + cfg->host_caps = 0; > + cfg->f_max = 52000000; > + ret = mmc_of_parse(dev, cfg); > + if (ret < 0) > + return ret; > + > if (dev_read_bool(dev, "st,neg-edge")) > priv->clk_reg_msk |= SDMMC_CLKCR_NEGEDGE; > if (dev_read_bool(dev, "st,sig-dir")) > @@ -676,28 +682,10 @@ static int stm32_sdmmc2_probe(struct udevice *dev) > GPIOD_IS_IN); > > cfg->f_min = 400000; > - cfg->f_max = dev_read_u32_default(dev, "max-frequency", 52000000); > cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195; > cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT; > cfg->name = "STM32 SD/MMC"; > > - cfg->host_caps = 0; > - if (cfg->f_max > 25000000) > - cfg->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS; > - > - switch (dev_read_u32_default(dev, "bus-width", 1)) { > - case 8: > - cfg->host_caps |= MMC_MODE_8BIT; > - /* fall through */ > - case 4: > - cfg->host_caps |= MMC_MODE_4BIT; > - break; > - case 1: > - break; > - default: > - pr_err("invalid \"bus-width\" property, force to 1\n"); > - } > - > upriv->mmc = &plat->mmc; > > /* SDMMC init */ Reviewed-by: Patrice Chotard <patrice.chotard@st.com> Thanks
Hi Alexandru, > From: Alexandru Gagniuc <mr.nuke.me@gmail.com> > Sent: mardi 15 septembre 2020 21:52 > > mmc_of_parse() can populate the 'f_max' and 'host_caps' fields of struct > mmc_config from devicetree. > The same logic is duplicated in stm32_sdmmc2_probe(). Use mmc_of_parse(), > which is more generic. > > Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> > --- > Changes from v1: > - Check the return value of mmc_of_parse(). > - The call to mmc_of_parse() is moved further up. This means we can just > 'return err' on error instead of exiting via goto. > > drivers/mmc/stm32_sdmmc2.c | 24 ++++++------------------ > 1 file changed, 6 insertions(+), 18 deletions(-) > Applied to u-boot-stm/master, thanks! Regards Patrick
diff --git a/drivers/mmc/stm32_sdmmc2.c b/drivers/mmc/stm32_sdmmc2.c index 6d50356217..a29657429c 100644 --- a/drivers/mmc/stm32_sdmmc2.c +++ b/drivers/mmc/stm32_sdmmc2.c @@ -653,6 +653,12 @@ static int stm32_sdmmc2_probe(struct udevice *dev) if (priv->base == FDT_ADDR_T_NONE) return -EINVAL; + cfg->host_caps = 0; + cfg->f_max = 52000000; + ret = mmc_of_parse(dev, cfg); + if (ret < 0) + return ret; + if (dev_read_bool(dev, "st,neg-edge")) priv->clk_reg_msk |= SDMMC_CLKCR_NEGEDGE; if (dev_read_bool(dev, "st,sig-dir")) @@ -676,28 +682,10 @@ static int stm32_sdmmc2_probe(struct udevice *dev) GPIOD_IS_IN); cfg->f_min = 400000; - cfg->f_max = dev_read_u32_default(dev, "max-frequency", 52000000); cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195; cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT; cfg->name = "STM32 SD/MMC"; - cfg->host_caps = 0; - if (cfg->f_max > 25000000) - cfg->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS; - - switch (dev_read_u32_default(dev, "bus-width", 1)) { - case 8: - cfg->host_caps |= MMC_MODE_8BIT; - /* fall through */ - case 4: - cfg->host_caps |= MMC_MODE_4BIT; - break; - case 1: - break; - default: - pr_err("invalid \"bus-width\" property, force to 1\n"); - } - upriv->mmc = &plat->mmc; /* SDMMC init */
mmc_of_parse() can populate the 'f_max' and 'host_caps' fields of struct mmc_config from devicetree. The same logic is duplicated in stm32_sdmmc2_probe(). Use mmc_of_parse(), which is more generic. Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> --- Changes from v1: - Check the return value of mmc_of_parse(). - The call to mmc_of_parse() is moved further up. This means we can just 'return err' on error instead of exiting via goto. drivers/mmc/stm32_sdmmc2.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-)