blob: 27a68487034e182331ece2ed2244ebf685bd5a79 [file] [log] [blame]
Tom Rini10e47792018-05-06 17:58:06 -04001// SPDX-License-Identifier: GPL-2.0+
Simon Glassdd6ab882014-02-26 15:59:18 -07002/*
3 * Copyright (c) 2013 Google, Inc
Simon Glassdd6ab882014-02-26 15:59:18 -07004 */
5
6#include <common.h>
Bin Mengdddc3a82018-10-10 22:06:57 -07007#include <dm/ofnode.h>
Masahiro Yamada3247fdb2017-06-22 16:50:01 +09008#include <dm/util.h>
Masahiro Yamada75f82d02018-03-05 01:20:11 +09009#include <linux/libfdt.h>
Simon Glassdd6ab882014-02-26 15:59:18 -070010#include <vsprintf.h>
11
Masahiro Yamada3247fdb2017-06-22 16:50:01 +090012#ifdef CONFIG_DM_WARN
Simon Glassdd6ab882014-02-26 15:59:18 -070013void dm_warn(const char *fmt, ...)
14{
15 va_list args;
16
17 va_start(args, fmt);
18 vprintf(fmt, args);
19 va_end(args);
20}
Masahiro Yamada3247fdb2017-06-22 16:50:01 +090021#endif
Simon Glassdd6ab882014-02-26 15:59:18 -070022
Simon Glassdd6ab882014-02-26 15:59:18 -070023int list_count_items(struct list_head *head)
24{
25 struct list_head *node;
26 int count = 0;
27
28 list_for_each(node, head)
29 count++;
30
31 return count;
32}
Heiko Stübner9a2cdca2017-02-18 19:46:21 +010033
Heiko Stübner20f938a2017-02-23 17:30:38 +010034bool dm_fdt_pre_reloc(const void *blob, int offset)
Heiko Stübner9a2cdca2017-02-18 19:46:21 +010035{
36 if (fdt_getprop(blob, offset, "u-boot,dm-pre-reloc", NULL))
Heiko Stübner20f938a2017-02-23 17:30:38 +010037 return true;
Heiko Stübner9a2cdca2017-02-18 19:46:21 +010038
39#ifdef CONFIG_TPL_BUILD
40 if (fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL))
Heiko Stübner20f938a2017-02-23 17:30:38 +010041 return true;
Heiko Stübner9a2cdca2017-02-18 19:46:21 +010042#elif defined(CONFIG_SPL_BUILD)
43 if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL))
Heiko Stübner20f938a2017-02-23 17:30:38 +010044 return true;
Heiko Stübner9a2cdca2017-02-18 19:46:21 +010045#else
46 /*
47 * In regular builds individual spl and tpl handling both
48 * count as handled pre-relocation for later second init.
49 */
50 if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL) ||
51 fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL))
Heiko Stübner20f938a2017-02-23 17:30:38 +010052 return true;
Heiko Stübner9a2cdca2017-02-18 19:46:21 +010053#endif
54
Heiko Stübner20f938a2017-02-23 17:30:38 +010055 return false;
Heiko Stübner9a2cdca2017-02-18 19:46:21 +010056}
Bin Mengdddc3a82018-10-10 22:06:57 -070057
58bool dm_ofnode_pre_reloc(ofnode node)
59{
60 if (ofnode_read_bool(node, "u-boot,dm-pre-reloc"))
61 return true;
62
63#ifdef CONFIG_TPL_BUILD
64 if (ofnode_read_bool(node, "u-boot,dm-tpl"))
65 return true;
66#elif defined(CONFIG_SPL_BUILD)
67 if (ofnode_read_bool(node, "u-boot,dm-spl"))
68 return true;
69#else
70 /*
71 * In regular builds individual spl and tpl handling both
72 * count as handled pre-relocation for later second init.
73 */
74 if (ofnode_read_bool(node, "u-boot,dm-spl") ||
75 ofnode_read_bool(node, "u-boot,dm-tpl"))
76 return true;
77#endif
78
79 return false;
80}