]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: core: Split out scanning code to dm_scan()
authorSimon Glass <sjg@chromium.org>
Sat, 19 Dec 2020 17:40:16 +0000 (10:40 -0700)
committerSimon Glass <sjg@chromium.org>
Tue, 5 Jan 2021 19:24:41 +0000 (12:24 -0700)
Move the code related to scanning for devices to bind, into a new
function. This will make it easier to skip this step with the new
of-platdata improvements.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/core/root.c

index fe7359433f6dda8b3de29ebf79b0c7e659b53293..2a5ebec27d8fabbd93edfec389140adcc49c71a7 100644 (file)
@@ -296,39 +296,60 @@ __weak int dm_scan_other(bool pre_reloc_only)
        return 0;
 }
 
-int dm_init_and_scan(bool pre_reloc_only)
+/**
+ * dm_scan() - Scan tables to bind devices
+ *
+ * Runs through the driver_info tables and binds the devices it finds. Then runs
+ * through the devicetree nodes. Finally calls dm_scan_other() to add any
+ * special devices
+ *
+ * @pre_reloc_only: If true, bind only nodes with special devicetree properties,
+ * or drivers with the DM_FLAG_PRE_RELOC flag. If false bind all drivers.
+ */
+static int dm_scan(bool pre_reloc_only)
 {
        int ret;
 
-       if (CONFIG_IS_ENABLED(OF_PLATDATA))
-               dm_populate_phandle_data();
-
-       ret = dm_init(CONFIG_IS_ENABLED(OF_LIVE));
-       if (ret) {
-               debug("dm_init() failed: %d\n", ret);
-               return ret;
-       }
        ret = dm_scan_plat(pre_reloc_only);
        if (ret) {
                debug("dm_scan_plat() failed: %d\n", ret);
-               goto fail;
+               return ret;
        }
 
        if (CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)) {
                ret = dm_extended_scan(pre_reloc_only);
                if (ret) {
                        debug("dm_extended_scan() failed: %d\n", ret);
-                       goto fail;
+                       return ret;
                }
        }
 
        ret = dm_scan_other(pre_reloc_only);
        if (ret)
-               goto fail;
+               return ret;
+
+       return 0;
+}
+
+int dm_init_and_scan(bool pre_reloc_only)
+{
+       int ret;
+
+       if (CONFIG_IS_ENABLED(OF_PLATDATA))
+               dm_populate_phandle_data();
+
+       ret = dm_init(CONFIG_IS_ENABLED(OF_LIVE));
+       if (ret) {
+               debug("dm_init() failed: %d\n", ret);
+               return ret;
+       }
+       ret = dm_scan(pre_reloc_only);
+       if (ret) {
+               log_debug("dm_scan() failed: %d\n", ret);
+               return ret;
+       }
 
        return 0;
-fail:
-       return ret;
 }
 
 #ifdef CONFIG_ACPIGEN