blob: b6bc66ea32371ba2436195818a41ce8264892200 [file] [log] [blame]
Simon Glass0596d352014-07-30 03:59:03 -06001/*
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 */
Robert P. J. Day6feed2a2016-05-23 05:40:55 -04006#include <libfdt_env.h>
Simon Glass0596d352014-07-30 03:59:03 -06007
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
17int 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
37int 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}