rename symbol: CONFIG_STM32 -> CONFIG_ARCH_STM32
[oweals/u-boot.git] / drivers / misc / fs_loader.c
index 57a14a3479a39bf0b6f9282e545e54788660da55..88e486e9d570b70ed973ff03e623ab6eb89e50c0 100644 (file)
@@ -1,10 +1,11 @@
 // SPDX-License-Identifier: GPL-2.0
  /*
- * Copyright (C) 2018 Intel Corporation <www.intel.com>
+ * Copyright (C) 2018-2019 Intel Corporation <www.intel.com>
  *
  */
 #include <common.h>
 #include <dm.h>
+#include <env.h>
 #include <errno.h>
 #include <blk.h>
 #include <fs.h>
@@ -219,32 +220,26 @@ int request_firmware_into_buf(struct udevice *dev,
 
 static int fs_loader_ofdata_to_platdata(struct udevice *dev)
 {
-       const char *fs_loader_path;
        u32 phandlepart[2];
 
-       fs_loader_path = ofnode_get_chosen_prop("firmware-loader");
+       ofnode fs_loader_node = dev_ofnode(dev);
 
-       if (fs_loader_path) {
-               ofnode fs_loader_node;
+       if (ofnode_valid(fs_loader_node)) {
+               struct device_platdata *plat;
 
-               fs_loader_node = ofnode_path(fs_loader_path);
-               if (ofnode_valid(fs_loader_node)) {
-                       struct device_platdata *plat;
-                       plat = dev->platdata;
-
-                       if (!ofnode_read_u32_array(fs_loader_node,
-                                                 "phandlepart",
-                                                 phandlepart, 2)) {
-                               plat->phandlepart.phandle = phandlepart[0];
-                               plat->phandlepart.partition = phandlepart[1];
-                       }
+               plat = dev->platdata;
+               if (!ofnode_read_u32_array(fs_loader_node,
+                                         "phandlepart",
+                                         phandlepart, 2)) {
+                       plat->phandlepart.phandle = phandlepart[0];
+                       plat->phandlepart.partition = phandlepart[1];
+               }
 
-                       plat->mtdpart = (char *)ofnode_read_string(
-                                        fs_loader_node, "mtdpart");
+               plat->mtdpart = (char *)ofnode_read_string(
+                                fs_loader_node, "mtdpart");
 
-                       plat->ubivol = (char *)ofnode_read_string(
-                                        fs_loader_node, "ubivol");
-               }
+               plat->ubivol = (char *)ofnode_read_string(
+                                fs_loader_node, "ubivol");
        }
 
        return 0;
@@ -252,6 +247,29 @@ static int fs_loader_ofdata_to_platdata(struct udevice *dev)
 
 static int fs_loader_probe(struct udevice *dev)
 {
+#if CONFIG_IS_ENABLED(DM) && CONFIG_IS_ENABLED(BLK)
+       int ret;
+       struct device_platdata *plat = dev->platdata;
+
+       if (plat->phandlepart.phandle) {
+               ofnode node = ofnode_get_by_phandle(plat->phandlepart.phandle);
+               struct udevice *parent_dev = NULL;
+
+               ret = device_get_global_by_ofnode(node, &parent_dev);
+               if (!ret) {
+                       struct udevice *dev;
+
+                       ret = blk_get_from_parent(parent_dev, &dev);
+                       if (ret) {
+                               debug("fs_loader: No block device: %d\n",
+                                       ret);
+
+                               return ret;
+                       }
+               }
+       }
+#endif
+
        return 0;
 };