]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - lib/libfdt/fdt_addresses.c
Merge branch 'master' of git://www.denx.de/git/u-boot-imx
[karo-tx-uboot.git] / lib / libfdt / fdt_addresses.c
1 /*
2  * libfdt - Flat Device Tree manipulation
3  * Copyright (C) 2014 David Gibson <david@gibson.dropbear.id.au>
4  * SPDX-License-Identifier:     GPL-2.0+ BSD-2-Clause
5  */
6 #include "libfdt_env.h"
7
8 #ifndef USE_HOSTCC
9 #include <fdt.h>
10 #include <libfdt.h>
11 #else
12 #include "fdt_host.h"
13 #endif
14
15 #include "libfdt_internal.h"
16
17 int fdt_address_cells(const void *fdt, int nodeoffset)
18 {
19         const fdt32_t *ac;
20         int val;
21         int len;
22
23         ac = fdt_getprop(fdt, nodeoffset, "#address-cells", &len);
24         if (!ac)
25                 return 2;
26
27         if (len != sizeof(*ac))
28                 return -FDT_ERR_BADNCELLS;
29
30         val = fdt32_to_cpu(*ac);
31         if ((val <= 0) || (val > FDT_MAX_NCELLS))
32                 return -FDT_ERR_BADNCELLS;
33
34         return val;
35 }
36
37 int fdt_size_cells(const void *fdt, int nodeoffset)
38 {
39         const fdt32_t *sc;
40         int val;
41         int len;
42
43         sc = fdt_getprop(fdt, nodeoffset, "#size-cells", &len);
44         if (!sc)
45                 return 2;
46
47         if (len != sizeof(*sc))
48                 return -FDT_ERR_BADNCELLS;
49
50         val = fdt32_to_cpu(*sc);
51         if ((val < 0) || (val > FDT_MAX_NCELLS))
52                 return -FDT_ERR_BADNCELLS;
53
54         return val;
55 }