]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
dm: core: Set up driver model for OF_PLATDATA_INST
authorSimon Glass <sjg@chromium.org>
Mon, 15 Mar 2021 04:25:17 +0000 (17:25 +1300)
committerSimon Glass <sjg@chromium.org>
Mon, 22 Mar 2021 06:23:28 +0000 (19:23 +1300)
With this we don't need to scan and bind drivers, not even the root
device. We just need to locate the root device that was set up at build
time, then set our root in global_data to point to it.

Update the code to handle this case.

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

index 3feadb77b56244a78cc92fd656ef4573b824fa62..3e52452cd85a352269704b0d1579869b31d1f49b 100644 (file)
@@ -129,6 +129,13 @@ void fix_devices(void)
        }
 }
 
+static int dm_setup_inst(void)
+{
+       DM_ROOT_NON_CONST = DM_DEVICE_GET(root);
+
+       return 0;
+}
+
 int dm_init(bool of_live)
 {
        int ret;
@@ -153,14 +160,23 @@ int dm_init(bool of_live)
                fix_devices();
        }
 
-       ret = device_bind_by_name(NULL, false, &root_info, &DM_ROOT_NON_CONST);
-       if (ret)
-               return ret;
-       if (CONFIG_IS_ENABLED(OF_CONTROL))
-               dev_set_ofnode(DM_ROOT_NON_CONST, ofnode_root());
-       ret = device_probe(DM_ROOT_NON_CONST);
-       if (ret)
-               return ret;
+       if (CONFIG_IS_ENABLED(OF_PLATDATA_INST)) {
+               ret = dm_setup_inst();
+               if (ret) {
+                       log_debug("dm_setup_inst() failed: %d\n", ret);
+                       return ret;
+               }
+       } else {
+               ret = device_bind_by_name(NULL, false, &root_info,
+                                         &DM_ROOT_NON_CONST);
+               if (ret)
+                       return ret;
+               if (CONFIG_IS_ENABLED(OF_CONTROL))
+                       dev_set_ofnode(DM_ROOT_NON_CONST, ofnode_root());
+               ret = device_probe(DM_ROOT_NON_CONST);
+               if (ret)
+                       return ret;
+       }
 
        return 0;
 }
@@ -351,10 +367,12 @@ int dm_init_and_scan(bool pre_reloc_only)
                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;
+       if (!CONFIG_IS_ENABLED(OF_PLATDATA_INST)) {
+               ret = dm_scan(pre_reloc_only);
+               if (ret) {
+                       log_debug("dm_scan() failed: %d\n", ret);
+                       return ret;
+               }
        }
 
        return 0;