]> git.ipfire.org Git - people/ms/u-boot.git/blob - lib/libfdt/fdt_addresses.c
Merge branch 'u-boot/master' into 'u-boot-arm/master'
[people/ms/u-boot.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 }