1
2
3
4
5
6
7
8#ifndef __FDT_SUPPORT_H
9#define __FDT_SUPPORT_H
10
11#ifdef CONFIG_OF_LIBFDT
12
13#include <libfdt.h>
14
15u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
16 const char *prop, const u32 dflt);
17u32 fdt_getprop_u32_default(const void *fdt, const char *path,
18 const char *prop, const u32 dflt);
19
20
21
22
23
24
25
26
27
28int fdt_root(void *fdt);
29
30
31
32
33
34
35
36
37
38int fdt_chosen(void *fdt);
39
40
41
42
43
44
45
46int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
47
48void do_fixup_by_path(void *fdt, const char *path, const char *prop,
49 const void *val, int len, int create);
50void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop,
51 u32 val, int create);
52
53static inline void do_fixup_by_path_string(void *fdt, const char *path,
54 const char *prop, const char *status)
55{
56 do_fixup_by_path(fdt, path, prop, status, strlen(status) + 1, 1);
57}
58
59void do_fixup_by_prop(void *fdt,
60 const char *pname, const void *pval, int plen,
61 const char *prop, const void *val, int len,
62 int create);
63void do_fixup_by_prop_u32(void *fdt,
64 const char *pname, const void *pval, int plen,
65 const char *prop, u32 val, int create);
66void do_fixup_by_compat(void *fdt, const char *compat,
67 const char *prop, const void *val, int len, int create);
68void do_fixup_by_compat_u32(void *fdt, const char *compat,
69 const char *prop, u32 val, int create);
70
71
72
73
74
75
76
77
78
79
80int fdt_fixup_memory(void *blob, u64 start, u64 size);
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96#ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
97int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
98#else
99static inline int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[],
100 int banks)
101{
102 return 0;
103}
104#endif
105
106void fdt_fixup_ethernet(void *fdt);
107int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
108 const void *val, int len, int create);
109void fdt_fixup_qe_firmware(void *fdt);
110
111
112
113
114
115
116
117
118
119
120
121
122int fdt_fixup_display(void *blob, const char *path, const char *display);
123
124#if defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL)
125void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd);
126#else
127static inline void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd) {}
128#endif
129
130#if defined(CONFIG_SYS_FSL_SEC_COMPAT)
131void fdt_fixup_crypto_node(void *blob, int sec_rev);
132#else
133static inline void fdt_fixup_crypto_node(void *blob, int sec_rev) {}
134#endif
135
136#ifdef CONFIG_PCI
137#include <pci.h>
138int fdt_pci_dma_ranges(void *blob, int phb_off, struct pci_controller *hose);
139#endif
140
141int fdt_find_or_add_subnode(void *fdt, int parentoffset, const char *name);
142
143
144
145
146
147
148
149
150
151
152
153int ft_board_setup(void *blob, bd_t *bd);
154
155
156
157
158
159
160
161void ft_board_setup_ex(void *blob, bd_t *bd);
162void ft_cpu_setup(void *blob, bd_t *bd);
163void ft_pci_setup(void *blob, bd_t *bd);
164
165
166
167
168
169
170
171
172
173
174
175int ft_system_setup(void *blob, bd_t *bd);
176
177void set_working_fdt_addr(ulong addr);
178
179
180
181
182
183
184
185
186int fdt_shrink_to_minimum(void *blob, uint extrasize);
187int fdt_increase_size(void *fdt, int add_len);
188
189int fdt_fixup_nor_flash_size(void *blob);
190
191#if defined(CONFIG_FDT_FIXUP_PARTITIONS)
192void fdt_fixup_mtdparts(void *fdt, void *node_info, int node_info_size);
193#else
194static inline void fdt_fixup_mtdparts(void *fdt, void *node_info,
195 int node_info_size) {}
196#endif
197
198void fdt_del_node_and_alias(void *blob, const char *alias);
199u64 fdt_translate_address(const void *blob, int node_offset,
200 const __be32 *in_addr);
201int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
202 phys_addr_t compat_off);
203int fdt_alloc_phandle(void *blob);
204int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
205unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
206int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
207
208int fdt_verify_alias_address(void *fdt, int anode, const char *alias,
209 u64 addr);
210u64 fdt_get_base_address(void *fdt, int node);
211int fdt_read_range(void *fdt, int node, int n, uint64_t *child_addr,
212 uint64_t *addr, uint64_t *len);
213
214enum fdt_status {
215 FDT_STATUS_OKAY,
216 FDT_STATUS_DISABLED,
217 FDT_STATUS_FAIL,
218 FDT_STATUS_FAIL_ERROR_CODE,
219};
220int fdt_set_node_status(void *fdt, int nodeoffset,
221 enum fdt_status status, unsigned int error_code);
222static inline int fdt_status_okay(void *fdt, int nodeoffset)
223{
224 return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_OKAY, 0);
225}
226static inline int fdt_status_disabled(void *fdt, int nodeoffset)
227{
228 return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_DISABLED, 0);
229}
230static inline int fdt_status_fail(void *fdt, int nodeoffset)
231{
232 return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_FAIL, 0);
233}
234
235int fdt_set_status_by_alias(void *fdt, const char *alias,
236 enum fdt_status status, unsigned int error_code);
237static inline int fdt_status_okay_by_alias(void *fdt, const char *alias)
238{
239 return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_OKAY, 0);
240}
241static inline int fdt_status_disabled_by_alias(void *fdt, const char *alias)
242{
243 return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_DISABLED, 0);
244}
245static inline int fdt_status_fail_by_alias(void *fdt, const char *alias)
246{
247 return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_FAIL, 0);
248}
249
250
251static inline u64 of_read_number(const fdt32_t *cell, int size)
252{
253 u64 r = 0;
254 while (size--)
255 r = (r << 32) | fdt32_to_cpu(*(cell++));
256 return r;
257}
258
259void of_bus_default_count_cells(const void *blob, int parentoffset,
260 int *addrc, int *sizec);
261int ft_verify_fdt(void *fdt);
262int arch_fixup_memory_node(void *blob);
263
264int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width,
265 u32 height, u32 stride, const char *format);
266
267#endif
268
269#ifdef USE_HOSTCC
270int fdtdec_get_int(const void *blob, int node, const char *prop_name,
271 int default_val);
272#endif
273#endif
274