xref: /rk3399_rockchip-uboot/include/image-android-dt.h (revision bcd21a1f01d7dfe99bc763a28a796bb5cad0815c)
1e91b3373SSam Protsenko /*
2e91b3373SSam Protsenko  * (C) Copyright 2018 Linaro Ltd.
3e91b3373SSam Protsenko  * Sam Protsenko <semen.protsenko@linaro.org>
4e91b3373SSam Protsenko  *
5e91b3373SSam Protsenko  * SPDX-License-Identifier:	GPL-2.0+
6e91b3373SSam Protsenko  */
7e91b3373SSam Protsenko 
8e91b3373SSam Protsenko #ifndef IMAGE_ANDROID_DT_H
9e91b3373SSam Protsenko #define IMAGE_ANDROID_DT_H
10e91b3373SSam Protsenko 
11e91b3373SSam Protsenko #include <linux/types.h>
12e91b3373SSam Protsenko 
13e91b3373SSam Protsenko bool android_dt_check_header(ulong hdr_addr);
14e91b3373SSam Protsenko bool android_dt_get_fdt_by_index(ulong hdr_addr, u32 index, ulong *addr,
15e91b3373SSam Protsenko 				 u32 *size);
16*bcd21a1fSJoseph Chen int android_dt_get_count(ulong hdr_addr);
17e91b3373SSam Protsenko 
18e91b3373SSam Protsenko #if !defined(CONFIG_SPL_BUILD)
19e91b3373SSam Protsenko void android_dt_print_contents(ulong hdr_addr);
20e91b3373SSam Protsenko #endif
21e91b3373SSam Protsenko 
22*bcd21a1fSJoseph Chen /**
23*bcd21a1fSJoseph Chen  * dt_for_each_entry() - iterate over all dt entry of DT image
24*bcd21a1fSJoseph Chen  *
25*bcd21a1fSJoseph Chen  * @entry:   struct dt_table_entry pointing to entry address
26*bcd21a1fSJoseph Chen  * @hdr:     struct dt_table_header pointing to hdr address
27*bcd21a1fSJoseph Chen  * @idx:     temporary index variant
28*bcd21a1fSJoseph Chen  *
29*bcd21a1fSJoseph Chen  * This is a wrapper around a for loop and is used like so:
30*bcd21a1fSJoseph Chen  *
31*bcd21a1fSJoseph Chen  *	struct dt_table_header *hdr;
32*bcd21a1fSJoseph Chen  *	struct dt_table_entry *entry;
33*bcd21a1fSJoseph Chen  *	int index;
34*bcd21a1fSJoseph Chen  *
35*bcd21a1fSJoseph Chen  *	......
36*bcd21a1fSJoseph Chen  *
37*bcd21a1fSJoseph Chen  *	dt_for_each_entry(entry, hdr, index) {
38*bcd21a1fSJoseph Chen  *		Use entry
39*bcd21a1fSJoseph Chen  *		...
40*bcd21a1fSJoseph Chen  *	}
41*bcd21a1fSJoseph Chen  *
42*bcd21a1fSJoseph Chen  */
43*bcd21a1fSJoseph Chen #define dt_for_each_entry(entry, hdr, idx) \
44*bcd21a1fSJoseph Chen 	for (idx = 0, android_dt_get_fdt_by_index((ulong)hdr, idx, (ulong *)&entry, NULL); \
45*bcd21a1fSJoseph Chen 	     idx < android_dt_get_count((ulong)hdr); \
46*bcd21a1fSJoseph Chen 	     idx++, android_dt_get_fdt_by_index((ulong)hdr, idx, (ulong *)&entry, NULL))
47*bcd21a1fSJoseph Chen 
48e91b3373SSam Protsenko #endif /* IMAGE_ANDROID_DT_H */
49