Message ID | 20200522020228.29265-1-faiz_abbas@ti.com |
---|---|
State | Accepted |
Commit | c78ae11e07d84c10ad5ee91593e49fcf20b07359 |
Headers | show |
Series | mmc: davinci_mmc: Cleanup to use dt in U-boot and static platdata in SPL | expand |
pt., 22 maj 2020 o 04:02 Faiz Abbas <faiz_abbas at ti.com> napisa?(a): > > Cleanup this driver to use dt in U-boot and static platdata in SPL. > This requires the following steps: > > 1. Move all platdata assignment from probe() to ofdata_to_platdata(). > This function is only called in U-boot. > 2. Replicate all the platdata assignment being done in > ofdata_to_platdata() in the omapl138 board file. This data is used in > the SPL case where SPL_OF_CONTROL is not enabled. > 3. Remove SPL_OF_CONTROL and related configs from omapl138_lcdk_defconfig > > This cleanup effectively reverts 3ef94715cc ('mmc: davinci: fix mmc boot in SPL') > > Signed-off-by: Faiz Abbas <faiz_abbas at ti.com> Tested-by: Bartosz Golaszewski <bgolaszewski at baylibre.com>
Hi Faiz, On Thu, 21 May 2020 at 20:02, Faiz Abbas <faiz_abbas at ti.com> wrote: > > Cleanup this driver to use dt in U-boot and static platdata in SPL. > This requires the following steps: > > 1. Move all platdata assignment from probe() to ofdata_to_platdata(). > This function is only called in U-boot. > 2. Replicate all the platdata assignment being done in > ofdata_to_platdata() in the omapl138 board file. This data is used in > the SPL case where SPL_OF_CONTROL is not enabled. > 3. Remove SPL_OF_CONTROL and related configs from omapl138_lcdk_defconfig > > This cleanup effectively reverts 3ef94715cc ('mmc: davinci: fix mmc boot in SPL') > > Signed-off-by: Faiz Abbas <faiz_abbas at ti.com> > --- > > This patch fixes things being broken by Simon's series disabling > libfdt when using of-platdata: > https://patchwork.ozlabs.org/project/uboot/cover/20191107155318.103300-1-sjg at chromium.org/ > > > .../mach-davinci/include/mach/sdmmc_defs.h | 7 +++ > board/davinci/da8xxevm/omapl138_lcdk.c | 12 ++++ > configs/omapl138_lcdk_defconfig | 4 -- > drivers/mmc/davinci_mmc.c | 63 ++++++++----------- > 4 files changed, 45 insertions(+), 41 deletions(-) Could this use of-platdata instead? Regards, Simon
Hi Simon, On 25/05/20 8:27 pm, Simon Glass wrote: > Hi Faiz, > > On Thu, 21 May 2020 at 20:02, Faiz Abbas <faiz_abbas at ti.com> wrote: >> >> Cleanup this driver to use dt in U-boot and static platdata in SPL. >> This requires the following steps: >> >> 1. Move all platdata assignment from probe() to ofdata_to_platdata(). >> This function is only called in U-boot. >> 2. Replicate all the platdata assignment being done in >> ofdata_to_platdata() in the omapl138 board file. This data is used in >> the SPL case where SPL_OF_CONTROL is not enabled. >> 3. Remove SPL_OF_CONTROL and related configs from omapl138_lcdk_defconfig >> >> This cleanup effectively reverts 3ef94715cc ('mmc: davinci: fix mmc boot in SPL') >> >> Signed-off-by: Faiz Abbas <faiz_abbas at ti.com> >> --- >> >> This patch fixes things being broken by Simon's series disabling >> libfdt when using of-platdata: >> https://patchwork.ozlabs.org/project/uboot/cover/20191107155318.103300-1-sjg at chromium.org/ >> >> >> .../mach-davinci/include/mach/sdmmc_defs.h | 7 +++ >> board/davinci/da8xxevm/omapl138_lcdk.c | 12 ++++ >> configs/omapl138_lcdk_defconfig | 4 -- >> drivers/mmc/davinci_mmc.c | 63 ++++++++----------- >> 4 files changed, 45 insertions(+), 41 deletions(-) > > Could this use of-platdata instead? > We would need to implement address translation in of-platdata to do that. I prefer merging your fixes with this for now and leave of-platdata up for the future. Thanks, Faiz
Hi Faiz, On Mon, 25 May 2020 at 09:33, Faiz Abbas <faiz_abbas at ti.com> wrote: > > Hi Simon, > > On 25/05/20 8:27 pm, Simon Glass wrote: > > Hi Faiz, > > > > On Thu, 21 May 2020 at 20:02, Faiz Abbas <faiz_abbas at ti.com> wrote: > >> > >> Cleanup this driver to use dt in U-boot and static platdata in SPL. > >> This requires the following steps: > >> > >> 1. Move all platdata assignment from probe() to ofdata_to_platdata(). > >> This function is only called in U-boot. > >> 2. Replicate all the platdata assignment being done in > >> ofdata_to_platdata() in the omapl138 board file. This data is used in > >> the SPL case where SPL_OF_CONTROL is not enabled. > >> 3. Remove SPL_OF_CONTROL and related configs from omapl138_lcdk_defconfig > >> > >> This cleanup effectively reverts 3ef94715cc ('mmc: davinci: fix mmc boot in SPL') > >> > >> Signed-off-by: Faiz Abbas <faiz_abbas at ti.com> > >> --- > >> > >> This patch fixes things being broken by Simon's series disabling > >> libfdt when using of-platdata: > >> https://patchwork.ozlabs.org/project/uboot/cover/20191107155318.103300-1-sjg at chromium.org/ > >> > >> > >> .../mach-davinci/include/mach/sdmmc_defs.h | 7 +++ > >> board/davinci/da8xxevm/omapl138_lcdk.c | 12 ++++ > >> configs/omapl138_lcdk_defconfig | 4 -- > >> drivers/mmc/davinci_mmc.c | 63 ++++++++----------- > >> 4 files changed, 45 insertions(+), 41 deletions(-) > > > > Could this use of-platdata instead? > > > > We would need to implement address translation in of-platdata to do that. I prefer merging your > fixes with this for now and leave of-platdata up for the future. OK, yes, we can't wait for non-existent features. There is a bit of a queue of functionality lining up for of-platdata at present. Regards, Simon
Hi Faiz, I have ended up with an omap L138 lcdk board. Do you have instructions on how to get it booting from uSD and how to create the card image? I have tried various sources but nothing works so far. Also, are you able to send me a test image I can 'dd' onto the board? Regards, Simon On Mon, 25 May 2020 at 09:38, Simon Glass <sjg at chromium.org> wrote: > > Hi Faiz, > > On Mon, 25 May 2020 at 09:33, Faiz Abbas <faiz_abbas at ti.com> wrote: > > > > Hi Simon, > > > > On 25/05/20 8:27 pm, Simon Glass wrote: > > > Hi Faiz, > > > > > > On Thu, 21 May 2020 at 20:02, Faiz Abbas <faiz_abbas at ti.com> wrote: > > >> > > >> Cleanup this driver to use dt in U-boot and static platdata in SPL. > > >> This requires the following steps: > > >> > > >> 1. Move all platdata assignment from probe() to ofdata_to_platdata(). > > >> This function is only called in U-boot. > > >> 2. Replicate all the platdata assignment being done in > > >> ofdata_to_platdata() in the omapl138 board file. This data is used in > > >> the SPL case where SPL_OF_CONTROL is not enabled. > > >> 3. Remove SPL_OF_CONTROL and related configs from omapl138_lcdk_defconfig > > >> > > >> This cleanup effectively reverts 3ef94715cc ('mmc: davinci: fix mmc boot in SPL') > > >> > > >> Signed-off-by: Faiz Abbas <faiz_abbas at ti.com> > > >> --- > > >> > > >> This patch fixes things being broken by Simon's series disabling > > >> libfdt when using of-platdata: > > >> https://patchwork.ozlabs.org/project/uboot/cover/20191107155318.103300-1-sjg at chromium.org/ > > >> > > >> > > >> .../mach-davinci/include/mach/sdmmc_defs.h | 7 +++ > > >> board/davinci/da8xxevm/omapl138_lcdk.c | 12 ++++ > > >> configs/omapl138_lcdk_defconfig | 4 -- > > >> drivers/mmc/davinci_mmc.c | 63 ++++++++----------- > > >> 4 files changed, 45 insertions(+), 41 deletions(-) > > > > > > Could this use of-platdata instead? > > > > > > > We would need to implement address translation in of-platdata to do that. I prefer merging your > > fixes with this for now and leave of-platdata up for the future. > > OK, yes, we can't wait for non-existent features. > > There is a bit of a queue of functionality lining up for of-platdata at present. > > Regards, > Simon
Simon, On 26/05/20 10:24 pm, Simon Glass wrote: > Hi Faiz, > > I have ended up with an omap L138 lcdk board. Do you have instructions > on how to get it booting from uSD and how to create the card image? I > have tried various sources but nothing works so far. Also, are you > able to send me a test image I can 'dd' onto the board? > The commands in board/davinci/da8xxevm/README.da850 don't work? Try the following: 2 - using the "dd" command $ dd if=u-boot.ais of=/dev/mmcblk0 seek=117 bs=512 conv=fsync Thanks, Faiz
Hi Faiz, On Tue, 26 May 2020 at 11:37, Faiz Abbas <faiz_abbas at ti.com> wrote: > > Simon, > > On 26/05/20 10:24 pm, Simon Glass wrote: > > Hi Faiz, > > > > I have ended up with an omap L138 lcdk board. Do you have instructions > > on how to get it booting from uSD and how to create the card image? I > > have tried various sources but nothing works so far. Also, are you > > able to send me a test image I can 'dd' onto the board? > > > > The commands in board/davinci/da8xxevm/README.da850 don't work? > > Try the following: > > 2 - using the "dd" command > $ dd if=u-boot.ais of=/dev/mmcblk0 seek=117 bs=512 conv=fsync Thanks! I didn't make the connection with da850 or think to look in board/ for docs. Regards, Simon
diff --git a/arch/arm/mach-davinci/include/mach/sdmmc_defs.h b/arch/arm/mach-davinci/include/mach/sdmmc_defs.h index 46f6391aa2..f95a607e52 100644 --- a/arch/arm/mach-davinci/include/mach/sdmmc_defs.h +++ b/arch/arm/mach-davinci/include/mach/sdmmc_defs.h @@ -152,6 +152,13 @@ struct davinci_mmc { struct mmc_config cfg; }; +#define DAVINCI_MAX_BLOCKS (32) +struct davinci_mmc_plat { + struct davinci_mmc_regs *reg_base; /* Register base address */ + struct mmc_config cfg; + struct mmc mmc; +}; + int davinci_mmc_init(bd_t *bis, struct davinci_mmc *host); #endif /* _SDMMC_DEFS_H */ diff --git a/board/davinci/da8xxevm/omapl138_lcdk.c b/board/davinci/da8xxevm/omapl138_lcdk.c index adb56c6c87..84603cb117 100644 --- a/board/davinci/da8xxevm/omapl138_lcdk.c +++ b/board/davinci/da8xxevm/omapl138_lcdk.c @@ -368,8 +368,20 @@ U_BOOT_DEVICE(omapl138_uart) = { .platdata = &serial_pdata, }; +static const struct davinci_mmc_plat mmc_platdata = { + .reg_base = (struct davinci_mmc_regs *)DAVINCI_MMC_SD0_BASE, + .cfg = { + .f_min = 200000, + .f_max = 25000000, + .voltages = MMC_VDD_32_33 | MMC_VDD_33_34, + .host_caps = MMC_MODE_4BIT, + .b_max = DAVINCI_MAX_BLOCKS, + .name = "da830-mmc", + }, +}; U_BOOT_DEVICE(omapl138_mmc) = { .name = "davinci_mmc", + .platdata = &mmc_platdata, }; void spl_board_init(void) diff --git a/configs/omapl138_lcdk_defconfig b/configs/omapl138_lcdk_defconfig index 50cf09c7f1..b0a58de03d 100644 --- a/configs/omapl138_lcdk_defconfig +++ b/configs/omapl138_lcdk_defconfig @@ -40,16 +40,13 @@ CONFIG_CMD_MTDPARTS=y CONFIG_CMD_DIAG=y CONFIG_CMD_UBI=y CONFIG_OF_CONTROL=y -CONFIG_SPL_OF_CONTROL=y CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk" -CONFIG_SPL_OF_PLATDATA=y CONFIG_ENV_IS_IN_NAND=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_NET_RANDOM_ETHADDR=y CONFIG_DM=y CONFIG_SPL_DM=y CONFIG_SPL_DM_SEQ_ALIAS=y -CONFIG_SPL_OF_TRANSLATE=y CONFIG_DA8XX_GPIO=y CONFIG_DM_I2C=y CONFIG_SYS_I2C_DAVINCI=y @@ -82,4 +79,3 @@ CONFIG_USB_MUSB_HOST=y CONFIG_USB_MUSB_DA8XX=y CONFIG_USB_MUSB_PIO_ONLY=y CONFIG_USB_STORAGE=y -# CONFIG_SPL_OF_LIBFDT is not set diff --git a/drivers/mmc/davinci_mmc.c b/drivers/mmc/davinci_mmc.c index 2408a687d2..4ef9f7cc8b 100644 --- a/drivers/mmc/davinci_mmc.c +++ b/drivers/mmc/davinci_mmc.c @@ -18,7 +18,6 @@ #include <asm-generic/gpio.h> #include <linux/delay.h> -#define DAVINCI_MAX_BLOCKS (32) #define WATCHDOG_COUNT (100000) #define get_val(addr) REG(addr) @@ -34,12 +33,6 @@ struct davinci_mmc_priv { struct gpio_desc cd_gpio; /* Card Detect GPIO */ struct gpio_desc wp_gpio; /* Write Protect GPIO */ }; - -struct davinci_mmc_plat -{ - struct mmc_config cfg; - struct mmc mmc; -}; #endif /* Set davinci clock prescalar value based on the required clock in HZ */ @@ -487,43 +480,16 @@ static int davinci_mmc_probe(struct udevice *dev) struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); struct davinci_mmc_plat *plat = dev_get_platdata(dev); struct davinci_mmc_priv *priv = dev_get_priv(dev); - struct mmc_config *cfg = &plat->cfg; -#ifdef CONFIG_SPL_BUILD - int ret; -#endif - - cfg->f_min = 200000; - cfg->f_max = 25000000; - cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34, - cfg->host_caps = MMC_MODE_4BIT, /* DA850 supports only 4-bit SD/MMC */ - cfg->b_max = DAVINCI_MAX_BLOCKS; - cfg->name = "da830-mmc"; - priv->reg_base = (struct davinci_mmc_regs *)dev_read_addr(dev); + priv->reg_base = plat->reg_base; priv->input_clk = clk_get(DAVINCI_MMCSD_CLKID); - #if CONFIG_IS_ENABLED(DM_GPIO) /* These GPIOs are optional */ gpio_request_by_name(dev, "cd-gpios", 0, &priv->cd_gpio, GPIOD_IS_IN); gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio, GPIOD_IS_IN); #endif - upriv->mmc = &plat->mmc; -#ifdef CONFIG_SPL_BUILD - /* - * FIXME This is a temporary workaround to enable the driver model in - * SPL on omapl138-lcdk. For some reason the bind() callback is not - * being called in SPL for MMC which breaks the mmc boot - the hack - * is to call mmc_bind() from probe(). We also don't have full DT - * support in SPL, hence the hard-coded base register address. - */ - priv->reg_base = (struct davinci_mmc_regs *)DAVINCI_MMC_SD0_BASE; - ret = mmc_bind(dev, &plat->mmc, &plat->cfg); - if (ret) - return ret; -#endif - return davinci_dm_mmc_init(dev); } @@ -534,21 +500,44 @@ static int davinci_mmc_bind(struct udevice *dev) return mmc_bind(dev, &plat->mmc, &plat->cfg); } +#if CONFIG_IS_ENABLED(OF_CONTROL) +static int davinci_mmc_ofdata_to_platdata(struct udevice *dev) +{ + struct davinci_mmc_plat *plat = dev_get_platdata(dev); + struct mmc_config *cfg = &plat->cfg; + + plat->reg_base = (struct davinci_mmc_regs *)dev_read_addr(dev); + cfg->f_min = 200000; + cfg->f_max = 25000000; + cfg->voltages = MMC_VDD_32_33 | MMC_VDD_33_34, + cfg->host_caps = MMC_MODE_4BIT, /* DA850 supports only 4-bit SD/MMC */ + cfg->b_max = DAVINCI_MAX_BLOCKS; + cfg->name = "da830-mmc"; + + return 0; +} + static const struct udevice_id davinci_mmc_ids[] = { { .compatible = "ti,da830-mmc" }, {}, }; - +#endif U_BOOT_DRIVER(davinci_mmc_drv) = { .name = "davinci_mmc", .id = UCLASS_MMC, +#if CONFIG_IS_ENABLED(OF_CONTROL) .of_match = davinci_mmc_ids, + .platdata_auto_alloc_size = sizeof(struct davinci_mmc_plat), + .ofdata_to_platdata = davinci_mmc_ofdata_to_platdata, +#endif #if CONFIG_BLK .bind = davinci_mmc_bind, #endif .probe = davinci_mmc_probe, .ops = &davinci_mmc_ops, - .platdata_auto_alloc_size = sizeof(struct davinci_mmc_plat), .priv_auto_alloc_size = sizeof(struct davinci_mmc_priv), +#if !CONFIG_IS_ENABLED(OF_CONTROL) + .flags = DM_FLAG_PRE_RELOC, +#endif }; #endif
Cleanup this driver to use dt in U-boot and static platdata in SPL. This requires the following steps: 1. Move all platdata assignment from probe() to ofdata_to_platdata(). This function is only called in U-boot. 2. Replicate all the platdata assignment being done in ofdata_to_platdata() in the omapl138 board file. This data is used in the SPL case where SPL_OF_CONTROL is not enabled. 3. Remove SPL_OF_CONTROL and related configs from omapl138_lcdk_defconfig This cleanup effectively reverts 3ef94715cc ('mmc: davinci: fix mmc boot in SPL') Signed-off-by: Faiz Abbas <faiz_abbas at ti.com> --- This patch fixes things being broken by Simon's series disabling libfdt when using of-platdata: https://patchwork.ozlabs.org/project/uboot/cover/20191107155318.103300-1-sjg at chromium.org/ .../mach-davinci/include/mach/sdmmc_defs.h | 7 +++ board/davinci/da8xxevm/omapl138_lcdk.c | 12 ++++ configs/omapl138_lcdk_defconfig | 4 -- drivers/mmc/davinci_mmc.c | 63 ++++++++----------- 4 files changed, 45 insertions(+), 41 deletions(-)