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 mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); | ||||||
| 	struct davinci_mmc_priv *priv = dev_get_priv(dev); | 	struct davinci_mmc_priv *priv = dev_get_priv(dev); | ||||||
| 	struct mmc_config *cfg = &priv->cfg; | 	struct mmc_config *cfg = &priv->cfg; | ||||||
|  | #ifdef CONFIG_SPL_BUILD | ||||||
|  | 	int ret; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	cfg->f_min = 200000; | 	cfg->f_min = 200000; | ||||||
| 	cfg->f_max = 25000000; | 	cfg->f_max = 25000000; | ||||||
|  | @ -501,6 +504,20 @@ static int davinci_mmc_probe(struct udevice *dev) | ||||||
| 
 | 
 | ||||||
| 	upriv->mmc = &priv->mmc; | 	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); | 	return davinci_dm_mmc_init(dev); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue