libfdt: fix build with Python 3
[oweals/u-boot.git] / lib / libfdt / fdt_overlay.c
index bb4140412971716af0dea76e130d0a95b684513f..ceb968786e55b692413e384a8f6a47684a46e7df 100644 (file)
  */
 static uint32_t overlay_get_target_phandle(const void *fdto, int fragment)
 {
-       const uint32_t *val;
+       const fdt32_t *val;
        int len;
 
        val = fdt_getprop(fdto, fragment, "target", &len);
        if (!val)
                return 0;
 
-       if ((len != sizeof(*val)) || (*val == (uint32_t)-1))
+       if ((len != sizeof(*val)) || (fdt32_to_cpu(*val) == (uint32_t)-1))
                return (uint32_t)-1;
 
        return fdt32_to_cpu(*val);
@@ -99,7 +99,7 @@ static int overlay_get_target(const void *fdt, const void *fdto,
 static int overlay_phandle_add_offset(void *fdt, int node,
                                      const char *name, uint32_t delta)
 {
-       const uint32_t *val;
+       const fdt32_t *val;
        uint32_t adj_val;
        int len;
 
@@ -210,7 +210,7 @@ static int overlay_update_local_node_references(void *fdto,
        int ret;
 
        fdt_for_each_property_offset(fixup_prop, fdto, fixup_node) {
-               const uint32_t *fixup_val;
+               const fdt32_t *fixup_val;
                const char *tree_val;
                const char *name;
                int fixup_len;
@@ -234,7 +234,8 @@ static int overlay_update_local_node_references(void *fdto,
                }
 
                for (i = 0; i < (fixup_len / sizeof(uint32_t)); i++) {
-                       uint32_t adj_val, poffset;
+                       fdt32_t adj_val;
+                       uint32_t poffset;
 
                        poffset = fdt32_to_cpu(fixup_val[i]);
 
@@ -246,9 +247,7 @@ static int overlay_update_local_node_references(void *fdto,
                         */
                        memcpy(&adj_val, tree_val + poffset, sizeof(adj_val));
 
-                       adj_val = fdt32_to_cpu(adj_val);
-                       adj_val += delta;
-                       adj_val = cpu_to_fdt32(adj_val);
+                       adj_val = cpu_to_fdt32(fdt32_to_cpu(adj_val) + delta);
 
                        ret = fdt_setprop_inplace_namelen_partial(fdto,
                                                                  tree_node,
@@ -272,7 +271,7 @@ static int overlay_update_local_node_references(void *fdto,
 
                tree_child = fdt_subnode_offset(fdto, tree_node,
                                                fixup_child_name);
-               if (ret == -FDT_ERR_NOTFOUND)
+               if (tree_child == -FDT_ERR_NOTFOUND)
                        return -FDT_ERR_BADOVERLAY;
                if (tree_child < 0)
                        return tree_child;
@@ -356,9 +355,13 @@ static int overlay_fixup_one_phandle(void *fdt, void *fdto,
 {
        const char *symbol_path;
        uint32_t phandle;
+       fdt32_t phandle_prop;
        int symbol_off, fixup_off;
        int prop_len;
 
+       if (symbols_off < 0)
+               return symbols_off;
+
        symbol_path = fdt_getprop(fdt, symbols_off, label,
                                  &prop_len);
        if (!symbol_path)
@@ -378,10 +381,11 @@ static int overlay_fixup_one_phandle(void *fdt, void *fdto,
        if (fixup_off < 0)
                return fixup_off;
 
-       phandle = cpu_to_fdt32(phandle);
+       phandle_prop = cpu_to_fdt32(phandle);
        return fdt_setprop_inplace_namelen_partial(fdto, fixup_off,
                                                   name, name_len, poffset,
-                                                  &phandle, sizeof(phandle));
+                                                  &phandle_prop,
+                                                  sizeof(phandle_prop));
 };
 
 /**
@@ -492,7 +496,9 @@ static int overlay_fixup_phandles(void *fdt, void *fdto)
 
        /* We can have overlays without any fixups */
        fixups_off = fdt_path_offset(fdto, "/__fixups__");
-       if ((fixups_off < 0 && (fixups_off != -FDT_ERR_NOTFOUND)))
+       if (fixups_off == -FDT_ERR_NOTFOUND)
+               return 0; /* nothing to do */
+       if (fixups_off < 0)
                return fixups_off;
 
        /* And base DTs without symbols */