[U-Boot] [PATCH v4 0/9] Add support of CONFIG_BLK for STM32Fx platforms

This series : - adds support of CONFIG_BLK flag to STM32Fx platforms - enables CONFIG_BLK flag for STM32Fx based boards - adds missing clk_free() call in error path
Changes in v4: - update board DTS files to remove cd_inverted property and update cd-gpios active level
Changes in v3: - remove usage of "cd_inverted" DT property in dm_mmc_getcd()
Changes in v2: - replace devfdt_get_addr() by dev_read_addr() - re-introduce arm_pl180_mmc_ofdata_to_platdata()
Patrice Chotard (9): configs: stm32f429-evaluation: Enable CONFIG_BLK configs: stm32f746-disco: Enable CONFIG_BLK configs: stm32f469-disco: Enable CONFIG_BLK mmc: arm_pl180_mmci: Update to support CONFIG_BLK mmc: arm_pl180_mmci: Add missing clk_free mmc: arm_pl180_mmci: Remove cd_inverted host's struct field ARM: dts: stm32: remove cd-inverted for stm32429i-eval ARM: dts: stm32: remove cd-inverted for stm32f769-disco ARM: dts: stm32: remove cd-inverted for stm32f746-disco
arch/arm/dts/stm32429i-eval.dts | 3 +- arch/arm/dts/stm32f746-disco.dts | 3 +- arch/arm/dts/stm32f769-disco.dts | 3 +- configs/stm32f429-evaluation_defconfig | 1 - configs/stm32f469-discovery_defconfig | 1 - configs/stm32f746-disco_defconfig | 1 - drivers/mmc/arm_pl180_mmci.c | 73 +++++++++++++++++++--------------- drivers/mmc/arm_pl180_mmci.h | 1 - 8 files changed, 45 insertions(+), 41 deletions(-)

CONFIG_BLK config flag becomes mandatory, enable it.
Signed-off-by: Patrice Chotard patrice.chotard@st.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
configs/stm32f429-evaluation_defconfig | 1 - 1 file changed, 1 deletion(-)
diff --git a/configs/stm32f429-evaluation_defconfig b/configs/stm32f429-evaluation_defconfig index 1b14a4964067..3ddd5c50fb1d 100644 --- a/configs/stm32f429-evaluation_defconfig +++ b/configs/stm32f429-evaluation_defconfig @@ -26,7 +26,6 @@ CONFIG_CMD_FAT=y CONFIG_CMD_FS_GENERIC=y CONFIG_OF_CONTROL=y CONFIG_OF_EMBED=y -# CONFIG_BLK is not set CONFIG_DM_MMC=y CONFIG_ARM_PL180_MMCI=y CONFIG_MTD_NOR_FLASH=y

On Wed, Jul 25, 2018 at 05:49:04PM +0200, Patrice Chotard wrote:
CONFIG_BLK config flag becomes mandatory, enable it.
Signed-off-by: Patrice Chotard patrice.chotard@st.com
Applied to u-boot/master, thanks!

CONFIG_BLK config flag becomes mandatory, enable it.
Signed-off-by: Patrice Chotard patrice.chotard@st.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v4: None Changes in v3: None Changes in v2: None
configs/stm32f746-disco_defconfig | 1 - 1 file changed, 1 deletion(-)
diff --git a/configs/stm32f746-disco_defconfig b/configs/stm32f746-disco_defconfig index aa7403f3c516..6f07ff155862 100644 --- a/configs/stm32f746-disco_defconfig +++ b/configs/stm32f746-disco_defconfig @@ -40,7 +40,6 @@ CONFIG_CMD_FS_GENERIC=y CONFIG_OF_CONTROL=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_NETCONSOLE=y -# CONFIG_BLK is not set CONFIG_DM_MMC=y # CONFIG_SPL_DM_MMC is not set CONFIG_ARM_PL180_MMCI=y

On Wed, Jul 25, 2018 at 05:49:05PM +0200, Patrice Chotard wrote:
CONFIG_BLK config flag becomes mandatory, enable it.
Signed-off-by: Patrice Chotard patrice.chotard@st.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!

CONFIG_BLK config flag becomes mandatory, enable it.
Signed-off-by: Patrice Chotard patrice.chotard@st.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
configs/stm32f469-discovery_defconfig | 1 - 1 file changed, 1 deletion(-)
diff --git a/configs/stm32f469-discovery_defconfig b/configs/stm32f469-discovery_defconfig index 4de03edcc2ca..a55476f2f323 100644 --- a/configs/stm32f469-discovery_defconfig +++ b/configs/stm32f469-discovery_defconfig @@ -26,7 +26,6 @@ CONFIG_CMD_FAT=y CONFIG_CMD_FS_GENERIC=y CONFIG_OF_CONTROL=y CONFIG_OF_EMBED=y -# CONFIG_BLK is not set CONFIG_DM_MMC=y CONFIG_ARM_PL180_MMCI=y CONFIG_MTD_NOR_FLASH=y

On Wed, Jul 25, 2018 at 05:49:06PM +0200, Patrice Chotard wrote:
CONFIG_BLK config flag becomes mandatory, enable it.
Signed-off-by: Patrice Chotard patrice.chotard@st.com
Applied to u-boot/master, thanks!

Config flag CONFIG_BLK becomes mandatory, update arm_pl180_mmci to support this config.
This driver is used by STM32Fx and by Vexpress platforms. Only STM32Fx are DM ready. No DM code is isolated and will be removed easily when wexpress will be converted to DM.
Signed-off-by: Patrice Chotard patrice.chotard@st.com ---
Changes in v4: None Changes in v3: None Changes in v2: - replace devfdt_get_addr() by dev_read_addr() - re-introduce arm_pl180_mmc_ofdata_to_platdata()
drivers/mmc/arm_pl180_mmci.c | 67 ++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 27 deletions(-)
diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c index e267cd782e8b..c4d94d102cc1 100644 --- a/drivers/mmc/arm_pl180_mmci.c +++ b/drivers/mmc/arm_pl180_mmci.c @@ -357,13 +357,13 @@ static const struct mmc_ops arm_pl180_mmci_ops = { .set_ios = host_set_ios, .init = mmc_host_reset, }; -#endif
/* * mmc_host_init - initialize the mmc controller. * Set initial clock and power for mmc slot. * Initialize mmc struct and register with mmc framework. */ + int arm_pl180_mmci_init(struct pl180_mmc_host *host, struct mmc **mmc) { u32 sdi_u32; @@ -377,9 +377,8 @@ int arm_pl180_mmci_init(struct pl180_mmc_host *host, struct mmc **mmc) writel(sdi_u32, &host->base->mask0);
host->cfg.name = host->name; -#ifndef CONFIG_DM_MMC host->cfg.ops = &arm_pl180_mmci_ops; -#endif + /* TODO remove the duplicates */ host->cfg.host_caps = host->caps; host->cfg.voltages = host->voltages; @@ -393,20 +392,34 @@ int arm_pl180_mmci_init(struct pl180_mmc_host *host, struct mmc **mmc) *mmc = mmc_create(&host->cfg, host); if (!*mmc) return -1; - debug("registered mmc interface number is:%d\n", (*mmc)->block_dev.devnum);
return 0; } +#endif
#ifdef CONFIG_DM_MMC +static void arm_pl180_mmc_init(struct pl180_mmc_host *host) +{ + u32 sdi_u32; + + writel(host->pwr_init, &host->base->power); + writel(host->clkdiv_init, &host->base->clock); + udelay(CLK_CHANGE_DELAY); + + /* Disable mmc interrupts */ + sdi_u32 = readl(&host->base->mask0) & ~SDI_MASK0_MASK; + writel(sdi_u32, &host->base->mask0); +} + static int arm_pl180_mmc_probe(struct udevice *dev) { struct arm_pl180_mmc_plat *pdata = dev_get_platdata(dev); struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); struct mmc *mmc = &pdata->mmc; - struct pl180_mmc_host *host = mmc->priv; + struct pl180_mmc_host *host = dev->priv; + struct mmc_config *cfg = &pdata->cfg; struct clk clk; u32 bus_width; int ret; @@ -421,27 +434,28 @@ static int arm_pl180_mmc_probe(struct udevice *dev) return ret; }
- strcpy(host->name, "MMC"); host->pwr_init = INIT_PWR; host->clkdiv_init = SDI_CLKCR_CLKDIV_INIT_V1 | SDI_CLKCR_CLKEN | SDI_CLKCR_HWFC_EN; - host->voltages = VOLTAGE_WINDOW_SD; - host->caps = 0; host->clock_in = clk_get_rate(&clk); - host->clock_min = host->clock_in / (2 * (SDI_CLKCR_CLKDIV_INIT_V1 + 1)); - host->clock_max = dev_read_u32_default(dev, "max-frequency", - MMC_CLOCK_MAX); host->version2 = dev_get_driver_data(dev);
+ cfg->name = dev->name; + cfg->voltages = VOLTAGE_WINDOW_SD; + cfg->host_caps = 0; + cfg->f_min = host->clock_in / (2 * (SDI_CLKCR_CLKDIV_INIT_V1 + 1)); + cfg->f_max = dev_read_u32_default(dev, "max-frequency", MMC_CLOCK_MAX); + cfg->b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT; + gpio_request_by_name(dev, "cd-gpios", 0, &host->cd_gpio, GPIOD_IS_IN);
bus_width = dev_read_u32_default(dev, "bus-width", 1); switch (bus_width) { case 8: - host->caps |= MMC_MODE_8BIT; + cfg->host_caps |= MMC_MODE_8BIT; /* Hosts capable of 8-bit transfers can also do 4 bits */ case 4: - host->caps |= MMC_MODE_4BIT; + cfg->host_caps |= MMC_MODE_4BIT; break; case 1: break; @@ -449,19 +463,21 @@ static int arm_pl180_mmc_probe(struct udevice *dev) dev_err(dev, "Invalid bus-width value %u\n", bus_width); }
- ret = arm_pl180_mmci_init(host, &mmc); - if (ret) { - dev_err(dev, "arm_pl180_mmci init failed\n"); - return ret; - } - + arm_pl180_mmc_init(host); + mmc->priv = host; mmc->dev = dev; - dev->priv = host; upriv->mmc = mmc;
return 0; }
+int arm_pl180_mmc_bind(struct udevice *dev) +{ + struct arm_pl180_mmc_plat *plat = dev_get_platdata(dev); + + return mmc_bind(dev, &plat->mmc, &plat->cfg); +} + static int dm_host_request(struct udevice *dev, struct mmc_cmd *cmd, struct mmc_data *data) { @@ -479,9 +495,7 @@ static int dm_host_set_ios(struct udevice *dev)
static int dm_mmc_getcd(struct udevice *dev) { - struct arm_pl180_mmc_plat *pdata = dev_get_platdata(dev); - struct mmc *mmc = &pdata->mmc; - struct pl180_mmc_host *host = mmc->priv; + struct pl180_mmc_host *host = dev->priv; int value = 1;
if (dm_gpio_is_valid(&host->cd_gpio)) { @@ -501,12 +515,10 @@ static const struct dm_mmc_ops arm_pl180_dm_mmc_ops = {
static int arm_pl180_mmc_ofdata_to_platdata(struct udevice *dev) { - struct arm_pl180_mmc_plat *pdata = dev_get_platdata(dev); - struct mmc *mmc = &pdata->mmc; - struct pl180_mmc_host *host = mmc->priv; + struct pl180_mmc_host *host = dev->priv; fdt_addr_t addr;
- addr = devfdt_get_addr(dev); + addr = dev_read_addr(dev); if (addr == FDT_ADDR_T_NONE) return -EINVAL;
@@ -527,6 +539,7 @@ U_BOOT_DRIVER(arm_pl180_mmc) = { .ops = &arm_pl180_dm_mmc_ops, .probe = arm_pl180_mmc_probe, .ofdata_to_platdata = arm_pl180_mmc_ofdata_to_platdata, + .bind = arm_pl180_mmc_bind, .priv_auto_alloc_size = sizeof(struct pl180_mmc_host), .platdata_auto_alloc_size = sizeof(struct arm_pl180_mmc_plat), };

On Wed, Jul 25, 2018 at 05:49:07PM +0200, Patrice Chotard wrote:
Config flag CONFIG_BLK becomes mandatory, update arm_pl180_mmci to support this config.
This driver is used by STM32Fx and by Vexpress platforms. Only STM32Fx are DM ready. No DM code is isolated and will be removed easily when wexpress will be converted to DM.
Signed-off-by: Patrice Chotard patrice.chotard@st.com
Applied to u-boot/master, thanks!

Add missing clk_free() call in case of failure when enabling the clock.
Signed-off-by: Patrice Chotard patrice.chotard@st.com Reviewed-by: Simon Glass sjg@chromium.org ---
Changes in v4: None Changes in v3: None Changes in v2: None
drivers/mmc/arm_pl180_mmci.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c index c4d94d102cc1..1cd780b3eec0 100644 --- a/drivers/mmc/arm_pl180_mmci.c +++ b/drivers/mmc/arm_pl180_mmci.c @@ -430,6 +430,7 @@ static int arm_pl180_mmc_probe(struct udevice *dev)
ret = clk_enable(&clk); if (ret) { + clk_free(&clk); dev_err(dev, "failed to enable clock\n"); return ret; }

On Wed, Jul 25, 2018 at 05:49:08PM +0200, Patrice Chotard wrote:
Add missing clk_free() call in case of failure when enabling the clock.
Signed-off-by: Patrice Chotard patrice.chotard@st.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!

As platform uses GPIOs for card detection, it's simpler and more readable to use GPIO_ACTIVE_(LOW|HIGH) in the gpio flags instead of using the cd-inverted property.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com ---
Changes in v4: - update board DTS files to remove cd_inverted property and update cd-gpios active level
Changes in v3: - remove usage of "cd_inverted" DT property in dm_mmc_getcd()
Changes in v2: None
drivers/mmc/arm_pl180_mmci.c | 5 +---- drivers/mmc/arm_pl180_mmci.h | 1 - 2 files changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/mmc/arm_pl180_mmci.c b/drivers/mmc/arm_pl180_mmci.c index 1cd780b3eec0..f71d79ecd6ba 100644 --- a/drivers/mmc/arm_pl180_mmci.c +++ b/drivers/mmc/arm_pl180_mmci.c @@ -499,11 +499,8 @@ static int dm_mmc_getcd(struct udevice *dev) struct pl180_mmc_host *host = dev->priv; int value = 1;
- if (dm_gpio_is_valid(&host->cd_gpio)) { + if (dm_gpio_is_valid(&host->cd_gpio)) value = dm_gpio_get_value(&host->cd_gpio); - if (host->cd_inverted) - return !value; - }
return value; } diff --git a/drivers/mmc/arm_pl180_mmci.h b/drivers/mmc/arm_pl180_mmci.h index 6b98db6cd978..36487be288b2 100644 --- a/drivers/mmc/arm_pl180_mmci.h +++ b/drivers/mmc/arm_pl180_mmci.h @@ -192,7 +192,6 @@ struct pl180_mmc_host { struct mmc_config cfg; #ifdef CONFIG_DM_MMC struct gpio_desc cd_gpio; - bool cd_inverted; #endif };

On Wed, Jul 25, 2018 at 05:49:09PM +0200, Patrice Chotard wrote:
As platform uses GPIOs for card detection, it's simpler and more readable to use GPIO_ACTIVE_(LOW|HIGH) in the gpio flags instead of using the cd-inverted property.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com
Applied to u-boot/master, thanks!

As cd-inverted property is no more used by arm_pl180_mmci driver, remove it. Update cd-gpios active level accordingly.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
arch/arm/dts/stm32429i-eval.dts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/dts/stm32429i-eval.dts b/arch/arm/dts/stm32429i-eval.dts index c16594b7e433..f6753a4d1a1c 100644 --- a/arch/arm/dts/stm32429i-eval.dts +++ b/arch/arm/dts/stm32429i-eval.dts @@ -223,8 +223,7 @@ &sdio { status = "okay"; vmmc-supply = <&mmc_vcard>; - cd-gpios = <&stmpegpio 15 GPIO_ACTIVE_HIGH>; - cd-inverted; + cd-gpios = <&stmpegpio 15 GPIO_ACTIVE_LOW>; pinctrl-names = "default", "opendrain"; pinctrl-0 = <&sdio_pins>; pinctrl-1 = <&sdio_pins_od>;

On Wed, Jul 25, 2018 at 05:49:10PM +0200, Patrice Chotard wrote:
As cd-inverted property is no more used by arm_pl180_mmci driver, remove it. Update cd-gpios active level accordingly.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com
Applied to u-boot/master, thanks!

As cd-inverted property is no more used by arm_pl180_mmci driver, remove it. Update cd-gpios active level accordingly.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
arch/arm/dts/stm32f769-disco.dts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/dts/stm32f769-disco.dts b/arch/arm/dts/stm32f769-disco.dts index 59c9d31c213b..210be07ccc69 100644 --- a/arch/arm/dts/stm32f769-disco.dts +++ b/arch/arm/dts/stm32f769-disco.dts @@ -256,8 +256,7 @@
&sdio2 { status = "okay"; - cd-gpios = <&gpioi 15 0>; - cd-inverted; + cd-gpios = <&gpioi 15 GPIO_ACTIVE_LOW>; pinctrl-names = "default", "opendrain"; pinctrl-0 = <&sdio_pins_b>; pinctrl-1 = <&sdio_pins_od_b>;

As cd-inverted property is no more used by arm_pl180_mmci driver, remove it. Update cd-gpios active level accordingly.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com ---
Changes in v4: None Changes in v3: None Changes in v2: None
arch/arm/dts/stm32f746-disco.dts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/dts/stm32f746-disco.dts b/arch/arm/dts/stm32f746-disco.dts index e47f762e54dc..187c94b99bfa 100644 --- a/arch/arm/dts/stm32f746-disco.dts +++ b/arch/arm/dts/stm32f746-disco.dts @@ -307,8 +307,7 @@
&sdio { status = "okay"; - cd-gpios = <&gpioc 13 0>; - cd-inverted; + cd-gpios = <&gpioc 13 GPIO_ACTIVE_LOW>; pinctrl-names = "default", "opendrain"; pinctrl-0 = <&sdio_pins>; pinctrl-1 = <&sdio_pins_od>;

On Wed, Jul 25, 2018 at 05:49:12PM +0200, Patrice Chotard wrote:
As cd-inverted property is no more used by arm_pl180_mmci driver, remove it. Update cd-gpios active level accordingly.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com
Changes in v4: None Changes in v3: None Changes in v2: None
arch/arm/dts/stm32f746-disco.dts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/dts/stm32f746-disco.dts b/arch/arm/dts/stm32f746-disco.dts index e47f762e54dc..187c94b99bfa 100644 --- a/arch/arm/dts/stm32f746-disco.dts +++ b/arch/arm/dts/stm32f746-disco.dts @@ -307,8 +307,7 @@
&sdio { status = "okay";
- cd-gpios = <&gpioc 13 0>;
- cd-inverted;
- cd-gpios = <&gpioc 13 GPIO_ACTIVE_LOW>; pinctrl-names = "default", "opendrain"; pinctrl-0 = <&sdio_pins>; pinctrl-1 = <&sdio_pins_od>;
So I can't apply this one as it breaks the build for stm32f746-disco as dt-bindings/gpio/gpio.h isn't being included by this dts tree.

Hi Tom
On 08/05/2018 01:39 AM, Tom Rini wrote:
On Wed, Jul 25, 2018 at 05:49:12PM +0200, Patrice Chotard wrote:
As cd-inverted property is no more used by arm_pl180_mmci driver, remove it. Update cd-gpios active level accordingly.
Reported-by: Tuomas Tynkkynen tuomas.tynkkynen@iki.fi Signed-off-by: Patrice Chotard patrice.chotard@st.com
Changes in v4: None Changes in v3: None Changes in v2: None
arch/arm/dts/stm32f746-disco.dts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/arch/arm/dts/stm32f746-disco.dts b/arch/arm/dts/stm32f746-disco.dts index e47f762e54dc..187c94b99bfa 100644 --- a/arch/arm/dts/stm32f746-disco.dts +++ b/arch/arm/dts/stm32f746-disco.dts @@ -307,8 +307,7 @@
&sdio { status = "okay";
- cd-gpios = <&gpioc 13 0>;
- cd-inverted;
- cd-gpios = <&gpioc 13 GPIO_ACTIVE_LOW>; pinctrl-names = "default", "opendrain"; pinctrl-0 = <&sdio_pins>; pinctrl-1 = <&sdio_pins_od>;
So I can't apply this one as it breaks the build for stm32f746-disco as dt-bindings/gpio/gpio.h isn't being included by this dts tree.
Sorry, i will resend patches 8 and 9 with the correct fix.
Patrice
Thanks
participants (3)
-
Patrice CHOTARD
-
Patrice Chotard
-
Tom Rini