1
2
3
4
5
6
7#ifndef __FDT_SUPPORT_H
8#define __FDT_SUPPORT_H
9
10#ifdef CONFIG_OF_LIBFDT
11
12#include <asm/u-boot.h>
13#include <linux/libfdt.h>
14
15
16
17
18
19
20
21
22
23int arch_fixup_fdt(void *blob);
24
25void ft_cpu_setup(void *blob, struct bd_info *bd);
26
27void ft_pci_setup(void *blob, struct bd_info *bd);
28
29u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
30 const char *prop, const u32 dflt);
31u32 fdt_getprop_u32_default(const void *fdt, const char *path,
32 const char *prop, const u32 dflt);
33
34
35
36
37
38
39
40
41
42int fdt_root(void *fdt);
43
44
45
46
47
48
49
50
51
52int fdt_chosen(void *fdt);
53
54
55
56
57
58
59
60int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
61
62void do_fixup_by_path(void *fdt, const char *path, const char *prop,
63 const void *val, int len, int create);
64void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop,
65 u32 val, int create);
66
67static inline void do_fixup_by_path_string(void *fdt, const char *path,
68 const char *prop, const char *status)
69{
70 do_fixup_by_path(fdt, path, prop, status, strlen(status) + 1, 1);
71}
72
73void do_fixup_by_prop(void *fdt,
74 const char *pname, const void *pval, int plen,
75 const char *prop, const void *val, int len,
76 int create);
77void do_fixup_by_prop_u32(void *fdt,
78 const char *pname, const void *pval, int plen,
79 const char *prop, u32 val, int create);
80void do_fixup_by_compat(void *fdt, const char *compat,
81 const char *prop, const void *val, int len, int create);
82void do_fixup_by_compat_u32(void *fdt, const char *compat,
83 const char *prop, u32 val, int create);
84
85
86
87
88
89
90
91
92
93
94int fdt_fixup_memory(void *blob, u64 start, u64 size);
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110#ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
111int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
112int fdt_set_usable_memory(void *blob, u64 start[], u64 size[], int banks);
113#else
114static inline int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[],
115 int banks)
116{
117 return 0;
118}
119#endif
120
121void fdt_fixup_ethernet(void *fdt);
122int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
123 const void *val, int len, int create);
124void fdt_fixup_qe_firmware(void *fdt);
125
126
127
128
129
130
131
132
133
134
135
136
137int fdt_fixup_display(void *blob, const char *path, const char *display);
138
139#if defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL)
140void fsl_fdt_fixup_dr_usb(void *blob, struct bd_info *bd);
141#else
142static inline void fsl_fdt_fixup_dr_usb(void *blob, struct bd_info *bd) {}
143#endif
144
145#if defined(CONFIG_SYS_FSL_SEC_COMPAT)
146void fdt_fixup_crypto_node(void *blob, int sec_rev);
147#else
148static inline void fdt_fixup_crypto_node(void *blob, int sec_rev) {}
149#endif
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165int fdt_record_loadable(void *blob, u32 index, const char *name,
166 uintptr_t load_addr, u32 size, uintptr_t entry_point,
167 const char *type, const char *os);
168
169#ifdef CONFIG_PCI
170#include <pci.h>
171int fdt_pci_dma_ranges(void *blob, int phb_off, struct pci_controller *hose);
172#endif
173
174int fdt_find_or_add_subnode(void *fdt, int parentoffset, const char *name);
175
176
177
178
179
180
181
182
183
184
185
186int ft_board_setup(void *blob, struct bd_info *bd);
187
188
189
190
191
192
193
194void ft_board_setup_ex(void *blob, struct bd_info *bd);
195void ft_cpu_setup(void *blob, struct bd_info *bd);
196void ft_pci_setup(void *blob, struct bd_info *bd);
197
198
199
200
201
202
203
204
205
206
207
208int ft_system_setup(void *blob, struct bd_info *bd);
209
210void set_working_fdt_addr(ulong addr);
211
212
213
214
215
216
217
218
219int fdt_shrink_to_minimum(void *blob, uint extrasize);
220int fdt_increase_size(void *fdt, int add_len);
221
222int fdt_fixup_nor_flash_size(void *blob);
223
224struct node_info;
225#if defined(CONFIG_FDT_FIXUP_PARTITIONS)
226void fdt_fixup_mtdparts(void *fdt, const struct node_info *node_info,
227 int node_info_size);
228#else
229static inline void fdt_fixup_mtdparts(void *fdt,
230 const struct node_info *node_info,
231 int node_info_size)
232{
233}
234#endif
235
236void fdt_del_node_and_alias(void *blob, const char *alias);
237
238
239
240
241
242
243
244
245
246
247
248u64 fdt_translate_address(const void *blob, int node_offset,
249 const __be32 *in_addr);
250
251
252
253
254
255
256
257
258
259
260u64 fdt_translate_dma_address(const void *blob, int node_offset,
261 const __be32 *in_addr);
262
263int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
264 phys_addr_t compat_off);
265int fdt_alloc_phandle(void *blob);
266int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
267unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
268int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
269
270int fdt_verify_alias_address(void *fdt, int anode, const char *alias,
271 u64 addr);
272u64 fdt_get_base_address(const void *fdt, int node);
273int fdt_read_range(void *fdt, int node, int n, uint64_t *child_addr,
274 uint64_t *addr, uint64_t *len);
275
276enum fdt_status {
277 FDT_STATUS_OKAY,
278 FDT_STATUS_DISABLED,
279 FDT_STATUS_FAIL,
280 FDT_STATUS_FAIL_ERROR_CODE,
281};
282int fdt_set_node_status(void *fdt, int nodeoffset,
283 enum fdt_status status, unsigned int error_code);
284static inline int fdt_status_okay(void *fdt, int nodeoffset)
285{
286 return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_OKAY, 0);
287}
288static inline int fdt_status_disabled(void *fdt, int nodeoffset)
289{
290 return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_DISABLED, 0);
291}
292static inline int fdt_status_fail(void *fdt, int nodeoffset)
293{
294 return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_FAIL, 0);
295}
296
297int fdt_set_status_by_alias(void *fdt, const char *alias,
298 enum fdt_status status, unsigned int error_code);
299static inline int fdt_status_okay_by_alias(void *fdt, const char *alias)
300{
301 return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_OKAY, 0);
302}
303static inline int fdt_status_disabled_by_alias(void *fdt, const char *alias)
304{
305 return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_DISABLED, 0);
306}
307static inline int fdt_status_fail_by_alias(void *fdt, const char *alias)
308{
309 return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_FAIL, 0);
310}
311
312
313static inline u64 fdt_read_number(const fdt32_t *cell, int size)
314{
315 u64 r = 0;
316 while (size--)
317 r = (r << 32) | fdt32_to_cpu(*(cell++));
318 return r;
319}
320
321void fdt_support_default_count_cells(const void *blob, int parentoffset,
322 int *addrc, int *sizec);
323int ft_verify_fdt(void *fdt);
324int arch_fixup_memory_node(void *blob);
325
326int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width,
327 u32 height, u32 stride, const char *format);
328
329int fdt_overlay_apply_verbose(void *fdt, void *fdto);
330
331
332
333
334
335
336
337
338
339int fdt_get_cells_len(const void *blob, char *nr_cells_name);
340
341#endif
342
343#ifdef USE_HOSTCC
344int fdtdec_get_int(const void *blob, int node, const char *prop_name,
345 int default_val);
346
347
348
349
350
351
352
353
354int fdtdec_get_child_count(const void *blob, int node);
355#endif
356#ifdef CONFIG_FMAN_ENET
357int fdt_update_ethernet_dt(void *blob);
358#endif
359#ifdef CONFIG_FSL_MC_ENET
360void fdt_fixup_board_enet(void *blob);
361#endif
362#endif
363