|
@@ -10,6 +10,8 @@
|
|
|
#include <config.h>
|
|
|
#include <common.h>
|
|
|
#include <command.h>
|
|
|
+#include <dm.h>
|
|
|
+#include <dm/device-internal.h>
|
|
|
#include <errno.h>
|
|
|
#include <mmc.h>
|
|
|
#include <part.h>
|
|
@@ -1759,10 +1761,44 @@ static void do_preinit(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+#if defined(CONFIG_DM_MMC) && defined(CONFIG_SPL_BUILD)
|
|
|
+static int mmc_probe(bd_t *bis)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+#elif defined(CONFIG_DM_MMC)
|
|
|
+static int mmc_probe(bd_t *bis)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+ struct uclass *uc;
|
|
|
+ struct udevice *m;
|
|
|
+
|
|
|
+ ret = uclass_get(UCLASS_MMC, &uc);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ uclass_foreach_dev(m, uc) {
|
|
|
+ ret = device_probe(m);
|
|
|
+ if (ret)
|
|
|
+ printf("%s - probe failed: %d\n", m->name, ret);
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+#else
|
|
|
+static int mmc_probe(bd_t *bis)
|
|
|
+{
|
|
|
+ if (board_mmc_init(bis) < 0)
|
|
|
+ cpu_mmc_init(bis);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+#endif
|
|
|
|
|
|
int mmc_initialize(bd_t *bis)
|
|
|
{
|
|
|
static int initialized = 0;
|
|
|
+ int ret;
|
|
|
if (initialized) /* Avoid initializing mmc multiple times */
|
|
|
return 0;
|
|
|
initialized = 1;
|
|
@@ -1770,10 +1806,9 @@ int mmc_initialize(bd_t *bis)
|
|
|
INIT_LIST_HEAD (&mmc_devices);
|
|
|
cur_dev_num = 0;
|
|
|
|
|
|
-#ifndef CONFIG_DM_MMC
|
|
|
- if (board_mmc_init(bis) < 0)
|
|
|
- cpu_mmc_init(bis);
|
|
|
-#endif
|
|
|
+ ret = mmc_probe(bis);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
|
|
|
#ifndef CONFIG_SPL_BUILD
|
|
|
print_mmc_devices(',');
|