mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-20 22:21:41 +00:00
mmc: davinci_mmc: Cleanup to use dt in U-boot and static platdata in SPL
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@ti.com>
Tested-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
This commit is contained in:
parent
fedfa374ff
commit
c78ae11e07
4 changed files with 45 additions and 41 deletions
arch/arm/mach-davinci/include/mach
board/davinci/da8xxevm
configs
drivers/mmc
|
@ -152,6 +152,13 @@ struct davinci_mmc {
|
||||||
struct mmc_config cfg;
|
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);
|
int davinci_mmc_init(bd_t *bis, struct davinci_mmc *host);
|
||||||
|
|
||||||
#endif /* _SDMMC_DEFS_H */
|
#endif /* _SDMMC_DEFS_H */
|
||||||
|
|
|
@ -368,8 +368,20 @@ U_BOOT_DEVICE(omapl138_uart) = {
|
||||||
.platdata = &serial_pdata,
|
.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) = {
|
U_BOOT_DEVICE(omapl138_mmc) = {
|
||||||
.name = "davinci_mmc",
|
.name = "davinci_mmc",
|
||||||
|
.platdata = &mmc_platdata,
|
||||||
};
|
};
|
||||||
|
|
||||||
void spl_board_init(void)
|
void spl_board_init(void)
|
||||||
|
|
|
@ -40,16 +40,13 @@ CONFIG_CMD_MTDPARTS=y
|
||||||
CONFIG_CMD_DIAG=y
|
CONFIG_CMD_DIAG=y
|
||||||
CONFIG_CMD_UBI=y
|
CONFIG_CMD_UBI=y
|
||||||
CONFIG_OF_CONTROL=y
|
CONFIG_OF_CONTROL=y
|
||||||
CONFIG_SPL_OF_CONTROL=y
|
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk"
|
CONFIG_DEFAULT_DEVICE_TREE="da850-lcdk"
|
||||||
CONFIG_SPL_OF_PLATDATA=y
|
|
||||||
CONFIG_ENV_IS_IN_NAND=y
|
CONFIG_ENV_IS_IN_NAND=y
|
||||||
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
CONFIG_NET_RANDOM_ETHADDR=y
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
CONFIG_DM=y
|
CONFIG_DM=y
|
||||||
CONFIG_SPL_DM=y
|
CONFIG_SPL_DM=y
|
||||||
CONFIG_SPL_DM_SEQ_ALIAS=y
|
CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||||
CONFIG_SPL_OF_TRANSLATE=y
|
|
||||||
CONFIG_DA8XX_GPIO=y
|
CONFIG_DA8XX_GPIO=y
|
||||||
CONFIG_DM_I2C=y
|
CONFIG_DM_I2C=y
|
||||||
CONFIG_SYS_I2C_DAVINCI=y
|
CONFIG_SYS_I2C_DAVINCI=y
|
||||||
|
@ -82,4 +79,3 @@ CONFIG_USB_MUSB_HOST=y
|
||||||
CONFIG_USB_MUSB_DA8XX=y
|
CONFIG_USB_MUSB_DA8XX=y
|
||||||
CONFIG_USB_MUSB_PIO_ONLY=y
|
CONFIG_USB_MUSB_PIO_ONLY=y
|
||||||
CONFIG_USB_STORAGE=y
|
CONFIG_USB_STORAGE=y
|
||||||
# CONFIG_SPL_OF_LIBFDT is not set
|
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include <asm-generic/gpio.h>
|
#include <asm-generic/gpio.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
||||||
#define DAVINCI_MAX_BLOCKS (32)
|
|
||||||
#define WATCHDOG_COUNT (100000)
|
#define WATCHDOG_COUNT (100000)
|
||||||
|
|
||||||
#define get_val(addr) REG(addr)
|
#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 cd_gpio; /* Card Detect GPIO */
|
||||||
struct gpio_desc wp_gpio; /* Write Protect GPIO */
|
struct gpio_desc wp_gpio; /* Write Protect GPIO */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct davinci_mmc_plat
|
|
||||||
{
|
|
||||||
struct mmc_config cfg;
|
|
||||||
struct mmc mmc;
|
|
||||||
};
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Set davinci clock prescalar value based on the required clock in HZ */
|
/* 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 mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
|
||||||
struct davinci_mmc_plat *plat = dev_get_platdata(dev);
|
struct davinci_mmc_plat *plat = dev_get_platdata(dev);
|
||||||
struct davinci_mmc_priv *priv = dev_get_priv(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;
|
priv->reg_base = plat->reg_base;
|
||||||
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->input_clk = clk_get(DAVINCI_MMCSD_CLKID);
|
priv->input_clk = clk_get(DAVINCI_MMCSD_CLKID);
|
||||||
|
|
||||||
#if CONFIG_IS_ENABLED(DM_GPIO)
|
#if CONFIG_IS_ENABLED(DM_GPIO)
|
||||||
/* These GPIOs are optional */
|
/* These GPIOs are optional */
|
||||||
gpio_request_by_name(dev, "cd-gpios", 0, &priv->cd_gpio, GPIOD_IS_IN);
|
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);
|
gpio_request_by_name(dev, "wp-gpios", 0, &priv->wp_gpio, GPIOD_IS_IN);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
upriv->mmc = &plat->mmc;
|
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);
|
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);
|
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[] = {
|
static const struct udevice_id davinci_mmc_ids[] = {
|
||||||
{ .compatible = "ti,da830-mmc" },
|
{ .compatible = "ti,da830-mmc" },
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
U_BOOT_DRIVER(davinci_mmc_drv) = {
|
U_BOOT_DRIVER(davinci_mmc_drv) = {
|
||||||
.name = "davinci_mmc",
|
.name = "davinci_mmc",
|
||||||
.id = UCLASS_MMC,
|
.id = UCLASS_MMC,
|
||||||
|
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
||||||
.of_match = davinci_mmc_ids,
|
.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
|
#if CONFIG_BLK
|
||||||
.bind = davinci_mmc_bind,
|
.bind = davinci_mmc_bind,
|
||||||
#endif
|
#endif
|
||||||
.probe = davinci_mmc_probe,
|
.probe = davinci_mmc_probe,
|
||||||
.ops = &davinci_mmc_ops,
|
.ops = &davinci_mmc_ops,
|
||||||
.platdata_auto_alloc_size = sizeof(struct davinci_mmc_plat),
|
|
||||||
.priv_auto_alloc_size = sizeof(struct davinci_mmc_priv),
|
.priv_auto_alloc_size = sizeof(struct davinci_mmc_priv),
|
||||||
|
#if !CONFIG_IS_ENABLED(OF_CONTROL)
|
||||||
|
.flags = DM_FLAG_PRE_RELOC,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Reference in a new issue