mmc: davinci: fix mmc boot in SPL
The MMC boot is currently broken on omapl138-lcdk after enabling the driver model in SPL. The main problem is the driver's bind callback not being called after probe in SPL (even with the DM_FLAG_PRE_RELOC flag specified). While a proper fix is still being worked on, this hacky changeset at least fixes the MMC boot on this platform by calling mmc_bind() manually from probe(). Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
This commit is contained in:
parent
598d9bccc5
commit
3ef94715cc
@ -482,6 +482,9 @@ static int davinci_mmc_probe(struct udevice *dev)
|
||||
struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
|
||||
struct davinci_mmc_priv *priv = dev_get_priv(dev);
|
||||
struct mmc_config *cfg = &priv->cfg;
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
int ret;
|
||||
#endif
|
||||
|
||||
cfg->f_min = 200000;
|
||||
cfg->f_max = 25000000;
|
||||
@ -501,6 +504,20 @@ static int davinci_mmc_probe(struct udevice *dev)
|
||||
|
||||
upriv->mmc = &priv->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, &priv->mmc, &priv->cfg);
|
||||
if (ret)
|
||||
return ret;
|
||||
#endif
|
||||
|
||||
return davinci_dm_mmc_init(dev);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user