Message ID | 20200411090358.8390-1-Benedikt.Grassl@rohde-schwarz.com |
---|---|
State | Superseded |
Headers | show |
Series | [v3] mmc: zynq: parse dt when probing | expand |
On 11. 04. 20 11:03, Benedikt Grassl wrote: > Currently, the entry "bus-width = <8>" in the ZynqMP's sdhci nodes > is not evaluated. This results in the bus width staying at its default > value (4 bit in HS200 mode). > Fix this by calling mmc_of_parse. This function also checks for the > "no-1-8-v" and "max-frequency" entries. Remove the handling of those > nodes from this driver. > > Signed-off-by: Benedikt Grassl <Benedikt.Grassl at rohde-schwarz.com> > --- > drivers/mmc/sdhci.c | 3 +-- > drivers/mmc/zynq_sdhci.c | 16 +++++++--------- > include/sdhci.h | 1 - > 3 files changed, 8 insertions(+), 12 deletions(-) > > diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c > index 520c9f9feb..372dc0a820 100644 > --- a/drivers/mmc/sdhci.c > +++ b/drivers/mmc/sdhci.c > @@ -839,8 +839,7 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host, > cfg->host_caps &= ~MMC_MODE_HS_52MHz; > } > > - if (!(cfg->voltages & MMC_VDD_165_195) || > - (host->quirks & SDHCI_QUIRK_NO_1_8_V)) > + if (!(cfg->voltages & MMC_VDD_165_195)) > caps_1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | > SDHCI_SUPPORT_DDR50); > > diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c > index da3ff53da1..d0a43d9539 100644 > --- a/drivers/mmc/zynq_sdhci.c > +++ b/drivers/mmc/zynq_sdhci.c > @@ -22,14 +22,12 @@ DECLARE_GLOBAL_DATA_PTR; > struct arasan_sdhci_plat { > struct mmc_config cfg; > struct mmc mmc; > - unsigned int f_max; > }; > > struct arasan_sdhci_priv { > struct sdhci_host *host; > u8 deviceid; > u8 bank; > - u8 no_1p8; > }; > > #if defined(CONFIG_ARCH_ZYNQMP) > @@ -238,8 +236,11 @@ static int arasan_sdhci_probe(struct udevice *dev) > host->quirks |= SDHCI_QUIRK_BROKEN_HISPD_MODE; > #endif > > - if (priv->no_1p8) > - host->quirks |= SDHCI_QUIRK_NO_1_8_V; > + plat->cfg.f_max = CONFIG_ZYNQ_SDHCI_MAX_FREQ; > + > + ret = mmc_of_parse(dev, &plat->cfg); > + if (ret) > + return ret; > > host->max_clk = clock; > > @@ -247,10 +248,11 @@ static int arasan_sdhci_probe(struct udevice *dev) > host->mmc->dev = dev; > host->mmc->priv = host; > > - ret = sdhci_setup_cfg(&plat->cfg, host, plat->f_max, > + ret = sdhci_setup_cfg(&plat->cfg, host, plat->cfg.f_max, > CONFIG_ZYNQ_SDHCI_MIN_FREQ); > if (ret) > return ret; > + > upriv->mmc = host->mmc; > > return sdhci_probe(dev); > @@ -258,7 +260,6 @@ static int arasan_sdhci_probe(struct udevice *dev) > > static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev) > { > - struct arasan_sdhci_plat *plat = dev_get_platdata(dev); > struct arasan_sdhci_priv *priv = dev_get_priv(dev); > > priv->host = calloc(1, sizeof(struct sdhci_host)); > @@ -277,10 +278,7 @@ static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev) > > priv->deviceid = dev_read_u32_default(dev, "xlnx,device_id", -1); > priv->bank = dev_read_u32_default(dev, "xlnx,mio_bank", -1); > - priv->no_1p8 = dev_read_bool(dev, "no-1-8-v"); > > - plat->f_max = dev_read_u32_default(dev, "max-frequency", > - CONFIG_ZYNQ_SDHCI_MAX_FREQ); > return 0; > } > > diff --git a/include/sdhci.h b/include/sdhci.h > index aa4378fd57..0ef8c2ed62 100644 > --- a/include/sdhci.h > +++ b/include/sdhci.h > @@ -243,7 +243,6 @@ > #define SDHCI_QUIRK_BROKEN_HISPD_MODE BIT(5) > #define SDHCI_QUIRK_WAIT_SEND_CMD (1 << 6) > #define SDHCI_QUIRK_USE_WIDE8 (1 << 8) > -#define SDHCI_QUIRK_NO_1_8_V (1 << 9) > > /* to make gcc happy */ > struct sdhci_host; > Looks good. Will apply. M
On 4/13/20 5:15 PM, Michal Simek wrote: > On 11. 04. 20 11:03, Benedikt Grassl wrote: >> Currently, the entry "bus-width = <8>" in the ZynqMP's sdhci nodes >> is not evaluated. This results in the bus width staying at its default >> value (4 bit in HS200 mode). >> Fix this by calling mmc_of_parse. This function also checks for the >> "no-1-8-v" and "max-frequency" entries. Remove the handling of those >> nodes from this driver. >> >> Signed-off-by: Benedikt Grassl <Benedikt.Grassl at rohde-schwarz.com> Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com> Added just minor comment. >> --- >> drivers/mmc/sdhci.c | 3 +-- >> drivers/mmc/zynq_sdhci.c | 16 +++++++--------- >> include/sdhci.h | 1 - >> 3 files changed, 8 insertions(+), 12 deletions(-) >> >> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c >> index 520c9f9feb..372dc0a820 100644 >> --- a/drivers/mmc/sdhci.c >> +++ b/drivers/mmc/sdhci.c >> @@ -839,8 +839,7 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host, >> cfg->host_caps &= ~MMC_MODE_HS_52MHz; >> } >> >> - if (!(cfg->voltages & MMC_VDD_165_195) || >> - (host->quirks & SDHCI_QUIRK_NO_1_8_V)) >> + if (!(cfg->voltages & MMC_VDD_165_195)) >> caps_1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | >> SDHCI_SUPPORT_DDR50); >> >> diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c >> index da3ff53da1..d0a43d9539 100644 >> --- a/drivers/mmc/zynq_sdhci.c >> +++ b/drivers/mmc/zynq_sdhci.c >> @@ -22,14 +22,12 @@ DECLARE_GLOBAL_DATA_PTR; >> struct arasan_sdhci_plat { >> struct mmc_config cfg; >> struct mmc mmc; >> - unsigned int f_max; >> }; >> >> struct arasan_sdhci_priv { >> struct sdhci_host *host; >> u8 deviceid; >> u8 bank; >> - u8 no_1p8; >> }; >> >> #if defined(CONFIG_ARCH_ZYNQMP) >> @@ -238,8 +236,11 @@ static int arasan_sdhci_probe(struct udevice *dev) >> host->quirks |= SDHCI_QUIRK_BROKEN_HISPD_MODE; >> #endif >> >> - if (priv->no_1p8) >> - host->quirks |= SDHCI_QUIRK_NO_1_8_V; >> + plat->cfg.f_max = CONFIG_ZYNQ_SDHCI_MAX_FREQ; >> + >> + ret = mmc_of_parse(dev, &plat->cfg); >> + if (ret) >> + return ret; >> >> host->max_clk = clock; >> >> @@ -247,10 +248,11 @@ static int arasan_sdhci_probe(struct udevice *dev) >> host->mmc->dev = dev; >> host->mmc->priv = host; >> >> - ret = sdhci_setup_cfg(&plat->cfg, host, plat->f_max, >> + ret = sdhci_setup_cfg(&plat->cfg, host, plat->cfg.f_max, >> CONFIG_ZYNQ_SDHCI_MIN_FREQ); >> if (ret) >> return ret; >> + Unnecessary white space. >> upriv->mmc = host->mmc; >> >> return sdhci_probe(dev); >> @@ -258,7 +260,6 @@ static int arasan_sdhci_probe(struct udevice *dev) >> >> static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev) >> { >> - struct arasan_sdhci_plat *plat = dev_get_platdata(dev); >> struct arasan_sdhci_priv *priv = dev_get_priv(dev); >> >> priv->host = calloc(1, sizeof(struct sdhci_host)); >> @@ -277,10 +278,7 @@ static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev) >> >> priv->deviceid = dev_read_u32_default(dev, "xlnx,device_id", -1); >> priv->bank = dev_read_u32_default(dev, "xlnx,mio_bank", -1); >> - priv->no_1p8 = dev_read_bool(dev, "no-1-8-v"); >> >> - plat->f_max = dev_read_u32_default(dev, "max-frequency", >> - CONFIG_ZYNQ_SDHCI_MAX_FREQ); >> return 0; >> } >> >> diff --git a/include/sdhci.h b/include/sdhci.h >> index aa4378fd57..0ef8c2ed62 100644 >> --- a/include/sdhci.h >> +++ b/include/sdhci.h >> @@ -243,7 +243,6 @@ >> #define SDHCI_QUIRK_BROKEN_HISPD_MODE BIT(5) >> #define SDHCI_QUIRK_WAIT_SEND_CMD (1 << 6) >> #define SDHCI_QUIRK_USE_WIDE8 (1 << 8) >> -#define SDHCI_QUIRK_NO_1_8_V (1 << 9) >> >> /* to make gcc happy */ >> struct sdhci_host; >> > > Looks good. Will apply. > > M > >
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 520c9f9feb..372dc0a820 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -839,8 +839,7 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host, cfg->host_caps &= ~MMC_MODE_HS_52MHz; } - if (!(cfg->voltages & MMC_VDD_165_195) || - (host->quirks & SDHCI_QUIRK_NO_1_8_V)) + if (!(cfg->voltages & MMC_VDD_165_195)) caps_1 &= ~(SDHCI_SUPPORT_SDR104 | SDHCI_SUPPORT_SDR50 | SDHCI_SUPPORT_DDR50); diff --git a/drivers/mmc/zynq_sdhci.c b/drivers/mmc/zynq_sdhci.c index da3ff53da1..d0a43d9539 100644 --- a/drivers/mmc/zynq_sdhci.c +++ b/drivers/mmc/zynq_sdhci.c @@ -22,14 +22,12 @@ DECLARE_GLOBAL_DATA_PTR; struct arasan_sdhci_plat { struct mmc_config cfg; struct mmc mmc; - unsigned int f_max; }; struct arasan_sdhci_priv { struct sdhci_host *host; u8 deviceid; u8 bank; - u8 no_1p8; }; #if defined(CONFIG_ARCH_ZYNQMP) @@ -238,8 +236,11 @@ static int arasan_sdhci_probe(struct udevice *dev) host->quirks |= SDHCI_QUIRK_BROKEN_HISPD_MODE; #endif - if (priv->no_1p8) - host->quirks |= SDHCI_QUIRK_NO_1_8_V; + plat->cfg.f_max = CONFIG_ZYNQ_SDHCI_MAX_FREQ; + + ret = mmc_of_parse(dev, &plat->cfg); + if (ret) + return ret; host->max_clk = clock; @@ -247,10 +248,11 @@ static int arasan_sdhci_probe(struct udevice *dev) host->mmc->dev = dev; host->mmc->priv = host; - ret = sdhci_setup_cfg(&plat->cfg, host, plat->f_max, + ret = sdhci_setup_cfg(&plat->cfg, host, plat->cfg.f_max, CONFIG_ZYNQ_SDHCI_MIN_FREQ); if (ret) return ret; + upriv->mmc = host->mmc; return sdhci_probe(dev); @@ -258,7 +260,6 @@ static int arasan_sdhci_probe(struct udevice *dev) static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev) { - struct arasan_sdhci_plat *plat = dev_get_platdata(dev); struct arasan_sdhci_priv *priv = dev_get_priv(dev); priv->host = calloc(1, sizeof(struct sdhci_host)); @@ -277,10 +278,7 @@ static int arasan_sdhci_ofdata_to_platdata(struct udevice *dev) priv->deviceid = dev_read_u32_default(dev, "xlnx,device_id", -1); priv->bank = dev_read_u32_default(dev, "xlnx,mio_bank", -1); - priv->no_1p8 = dev_read_bool(dev, "no-1-8-v"); - plat->f_max = dev_read_u32_default(dev, "max-frequency", - CONFIG_ZYNQ_SDHCI_MAX_FREQ); return 0; } diff --git a/include/sdhci.h b/include/sdhci.h index aa4378fd57..0ef8c2ed62 100644 --- a/include/sdhci.h +++ b/include/sdhci.h @@ -243,7 +243,6 @@ #define SDHCI_QUIRK_BROKEN_HISPD_MODE BIT(5) #define SDHCI_QUIRK_WAIT_SEND_CMD (1 << 6) #define SDHCI_QUIRK_USE_WIDE8 (1 << 8) -#define SDHCI_QUIRK_NO_1_8_V (1 << 9) /* to make gcc happy */ struct sdhci_host;
Currently, the entry "bus-width = <8>" in the ZynqMP's sdhci nodes is not evaluated. This results in the bus width staying at its default value (4 bit in HS200 mode). Fix this by calling mmc_of_parse. This function also checks for the "no-1-8-v" and "max-frequency" entries. Remove the handling of those nodes from this driver. Signed-off-by: Benedikt Grassl <Benedikt.Grassl at rohde-schwarz.com> --- drivers/mmc/sdhci.c | 3 +-- drivers/mmc/zynq_sdhci.c | 16 +++++++--------- include/sdhci.h | 1 - 3 files changed, 8 insertions(+), 12 deletions(-)