efi_loader: Enable run-time variable support for tee based variables
[platform/kernel/u-boot.git] / lib / fdtdec.c
index 9ecfa2a..78576b5 100644 (file)
@@ -9,7 +9,9 @@
 #include <dm.h>
 #include <hang.h>
 #include <init.h>
+#include <log.h>
 #include <malloc.h>
+#include <net.h>
 #include <dm/of_extra.h>
 #include <env.h>
 #include <errno.h>
@@ -810,17 +812,6 @@ int fdtdec_parse_phandle_with_args(const void *blob, int src_node,
        return rc;
 }
 
-int fdtdec_get_child_count(const void *blob, int node)
-{
-       int subnode;
-       int num = 0;
-
-       fdt_for_each_subnode(subnode, blob, node)
-               num++;
-
-       return num;
-}
-
 int fdtdec_get_byte_array(const void *blob, int node, const char *prop_name,
                          u8 *array, int count)
 {
@@ -1039,18 +1030,18 @@ int fdtdec_decode_display_timing(const void *blob, int parent, int index,
        return ret;
 }
 
-int fdtdec_setup_mem_size_base_fdt(const void *blob)
+int fdtdec_setup_mem_size_base(void)
 {
        int ret, mem;
        struct fdt_resource res;
 
-       mem = fdt_path_offset(blob, "/memory");
+       mem = fdt_path_offset(gd->fdt_blob, "/memory");
        if (mem < 0) {
                debug("%s: Missing /memory node\n", __func__);
                return -EINVAL;
        }
 
-       ret = fdt_get_resource(blob, mem, "reg", 0, &res);
+       ret = fdt_get_resource(gd->fdt_blob, mem, "reg", 0, &res);
        if (ret != 0) {
                debug("%s: Unable to decode first memory bank\n", __func__);
                return -EINVAL;
@@ -1064,43 +1055,38 @@ int fdtdec_setup_mem_size_base_fdt(const void *blob)
        return 0;
 }
 
-int fdtdec_setup_mem_size_base(void)
-{
-       return fdtdec_setup_mem_size_base_fdt(gd->fdt_blob);
-}
-
 #if defined(CONFIG_NR_DRAM_BANKS)
 
 static int get_next_memory_node(const void *blob, int mem)
 {
        do {
-               mem = fdt_node_offset_by_prop_value(blob, mem,
+               mem = fdt_node_offset_by_prop_value(gd->fdt_blob, mem,
                                                    "device_type", "memory", 7);
        } while (!fdtdec_get_is_enabled(blob, mem));
 
        return mem;
 }
 
-int fdtdec_setup_memory_banksize_fdt(const void *blob)
+int fdtdec_setup_memory_banksize(void)
 {
        int bank, ret, mem, reg = 0;
        struct fdt_resource res;
 
-       mem = get_next_memory_node(blob, -1);
+       mem = get_next_memory_node(gd->fdt_blob, -1);
        if (mem < 0) {
                debug("%s: Missing /memory node\n", __func__);
                return -EINVAL;
        }
 
        for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
-               ret = fdt_get_resource(blob, mem, "reg", reg++, &res);
+               ret = fdt_get_resource(gd->fdt_blob, mem, "reg", reg++, &res);
                if (ret == -FDT_ERR_NOTFOUND) {
                        reg = 0;
-                       mem = get_next_memory_node(blob, mem);
+                       mem = get_next_memory_node(gd->fdt_blob, mem);
                        if (mem == -FDT_ERR_NOTFOUND)
                                break;
 
-                       ret = fdt_get_resource(blob, mem, "reg", reg++, &res);
+                       ret = fdt_get_resource(gd->fdt_blob, mem, "reg", reg++, &res);
                        if (ret == -FDT_ERR_NOTFOUND)
                                break;
                }
@@ -1120,12 +1106,6 @@ int fdtdec_setup_memory_banksize_fdt(const void *blob)
 
        return 0;
 }
-
-int fdtdec_setup_memory_banksize(void)
-{
-       return fdtdec_setup_memory_banksize_fdt(gd->fdt_blob);
-
-}
 #endif
 
 #if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
@@ -1303,15 +1283,18 @@ int fdtdec_add_reserved_memory(void *blob, const char *basename,
        /* find a matching node and return the phandle to that */
        fdt_for_each_subnode(node, blob, parent) {
                const char *name = fdt_get_name(blob, node, NULL);
-               phys_addr_t addr, size;
+               fdt_addr_t addr;
+               fdt_size_t size;
 
-               addr = fdtdec_get_addr_size(blob, node, "reg", &size);
+               addr = fdtdec_get_addr_size_fixed(blob, node, "reg", 0, na, ns,
+                                                 &size, false);
                if (addr == FDT_ADDR_T_NONE) {
                        debug("failed to read address/size for %s\n", name);
                        continue;
                }
 
-               if (addr == carveout->start && (addr + size) == carveout->end) {
+               if (addr == carveout->start && (addr + size - 1) ==
+                                               carveout->end) {
                        if (phandlep)
                                *phandlep = fdt_get_phandle(blob, node);
                        return 0;
@@ -1482,8 +1465,14 @@ int fdtdec_set_carveout(void *blob, const char *node, const char *prop_name,
        return 0;
 }
 
+__weak int fdtdec_board_setup(const void *fdt_blob)
+{
+       return 0;
+}
+
 int fdtdec_setup(void)
 {
+       int ret;
 #if CONFIG_IS_ENABLED(OF_CONTROL)
 # if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
        void *fdt_blob;
@@ -1536,7 +1525,10 @@ int fdtdec_setup(void)
 # endif
 #endif
 
-       return fdtdec_prepare_fdt();
+       ret = fdtdec_prepare_fdt();
+       if (!ret)
+               ret = fdtdec_board_setup(gd->fdt_blob);
+       return ret;
 }
 
 #if CONFIG_IS_ENABLED(MULTI_DTB_FIT)
@@ -1579,7 +1571,8 @@ int fdtdec_resetup(int *rescan)
 
 #ifdef CONFIG_NR_DRAM_BANKS
 int fdtdec_decode_ram_size(const void *blob, const char *area, int board_id,
-                          phys_addr_t *basep, phys_size_t *sizep, bd_t *bd)
+                          phys_addr_t *basep, phys_size_t *sizep,
+                          struct bd_info *bd)
 {
        int addr_cells, size_cells;
        const u32 *cell, *end;