efi_loader: correct includes in efi_variable.c
[oweals/u-boot.git] / lib / libfdt / fdt_ro.c
index b6ca4e0b0c308fb9f5ebb9dfe5639aaa90769f8c..693de9aa5ad8032375b22749a25bc236dc15d950 100644 (file)
@@ -73,6 +73,37 @@ uint32_t fdt_get_max_phandle(const void *fdt)
        return 0;
 }
 
+int fdt_generate_phandle(const void *fdt, uint32_t *phandle)
+{
+       uint32_t max = 0;
+       int offset = -1;
+
+       while (true) {
+               uint32_t value;
+
+               offset = fdt_next_node(fdt, offset, NULL);
+               if (offset < 0) {
+                       if (offset == -FDT_ERR_NOTFOUND)
+                               break;
+
+                       return offset;
+               }
+
+               value = fdt_get_phandle(fdt, offset);
+
+               if (value > max)
+                       max = value;
+       }
+
+       if (max == FDT_MAX_PHANDLE)
+               return -FDT_ERR_NOPHANDLES;
+
+       if (phandle)
+               *phandle = max + 1;
+
+       return 0;
+}
+
 int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)
 {
        FDT_CHECK_HEADER(fdt);