Blame view

include/fdt_support.h 8.77 KB
64dbbd40c   Gerald Van Baren   Moved fdt command...
1
2
3
4
  /*
   * (C) Copyright 2007
   * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com
   *
1a4596601   Wolfgang Denk   Add GPL-2.0+ SPDX...
5
   * SPDX-License-Identifier:	GPL-2.0+
64dbbd40c   Gerald Van Baren   Moved fdt command...
6
7
8
9
10
11
   */
  
  #ifndef __FDT_SUPPORT_H
  #define __FDT_SUPPORT_H
  
  #ifdef CONFIG_OF_LIBFDT
58864ddc7   Gerald Van Baren   Clean up libfdt.h...
12
  #include <libfdt.h>
64dbbd40c   Gerald Van Baren   Moved fdt command...
13

94fb182cd   Alexander Graf   fdt_support: spli...
14
15
  u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
  				const char *prop, const u32 dflt);
07e127849   Gabe Black   Fix constness of ...
16
17
  u32 fdt_getprop_u32_default(const void *fdt, const char *path,
  				const char *prop, const u32 dflt);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
18
19
20
21
22
23
24
25
26
  
  /**
   * Add data to the root of the FDT before booting the OS.
   *
   * See doc/device-tree-bindings/root.txt
   *
   * @param fdt		FDT address in memory
   * @return 0 if ok, or -FDT_ERR_... on error
   */
10be5b5d3   Paul Kocialkowski   fdt: Pass the dev...
27
  int fdt_root(void *fdt);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
28
29
30
31
32
33
34
35
36
  
  /**
   * Add chosen data the FDT before booting the OS.
   *
   * In particular, this adds the kernel command line (bootargs) to the FDT.
   *
   * @param fdt		FDT address in memory
   * @return 0 if ok, or -FDT_ERR_... on error
   */
bc6ed0f9d   Masahiro Yamada   fdt_support: dele...
37
  int fdt_chosen(void *fdt);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
38
39
40
41
42
43
44
  
  /**
   * Add initrd information to the FDT before booting the OS.
   *
   * @param fdt		FDT address in memory
   * @return 0 if ok, or -FDT_ERR_... on error
   */
dbe963ae5   Masahiro Yamada   fdt_support: dele...
45
  int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
46

e93becf80   Kumar Gala   Move do_fixup* fo...
47
48
49
50
  void do_fixup_by_path(void *fdt, const char *path, const char *prop,
  		      const void *val, int len, int create);
  void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop,
  			  u32 val, int create);
8ddb10eae   Chunhe Lan   fdt: Add a do_fix...
51
52
53
54
55
56
  
  static inline void do_fixup_by_path_string(void *fdt, const char *path,
  					   const char *prop, const char *status)
  {
  	do_fixup_by_path(fdt, path, prop, status, strlen(status) + 1, 1);
  }
9eb77cea1   Kumar Gala   Add additional fd...
57
58
59
60
61
62
63
64
65
66
67
  void do_fixup_by_prop(void *fdt,
  		      const char *pname, const void *pval, int plen,
  		      const char *prop, const void *val, int len,
  		      int create);
  void do_fixup_by_prop_u32(void *fdt,
  			  const char *pname, const void *pval, int plen,
  			  const char *prop, u32 val, int create);
  void do_fixup_by_compat(void *fdt, const char *compat,
  			const char *prop, const void *val, int len, int create);
  void do_fixup_by_compat_u32(void *fdt, const char *compat,
  			    const char *prop, u32 val, int create);
5c1cf89f8   Andre Przywara   fdt: prevent clea...
68
69
70
71
72
73
74
75
76
77
  /**
   * Setup the memory node in the DT. Creates one if none was existing before.
   * Calls fdt_fixup_memory_banks() to populate a single reg pair covering the
   * whole memory.
   *
   * @param blob		FDT blob to update
   * @param start		Begin of DRAM mapping in physical memory
   * @param size		Size of the single memory bank
   * @return 0 if ok, or -1 or -FDT_ERR_... on error
   */
3c9272813   Kumar Gala   Add common memory...
78
  int fdt_fixup_memory(void *blob, u64 start, u64 size);
5c1cf89f8   Andre Przywara   fdt: prevent clea...
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  
  /**
   * Fill the DT memory node with multiple memory banks.
   * Creates the node if none was existing before.
   * If banks is 0, it will not touch the existing reg property. This allows
   * boards to not mess with the existing DT setup, which may have been
   * filled in properly before.
   *
   * @param blob		FDT blob to update
   * @param start		Array of size <banks> to hold the start addresses.
   * @param size		Array of size <banks> to hold the size of each region.
   * @param banks		Number of memory banks to create. If 0, the reg
   *			property will be left untouched.
   * @return 0 if ok, or -1 or -FDT_ERR_... on error
   */
63c094172   Masahiro Yamada   libfdt: replace A...
94
  #ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
a6bd9e83a   John Rigby   FDT: Add fixup su...
95
  int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
63c094172   Masahiro Yamada   libfdt: replace A...
96
97
98
99
100
101
102
  #else
  static inline int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[],
  					 int banks)
  {
  	return 0;
  }
  #endif
5c1cf89f8   Andre Przywara   fdt: prevent clea...
103

ba37aa032   Kumar Gala   fdt: rework fdt_f...
104
  void fdt_fixup_ethernet(void *fdt);
22fb2246d   Matthias Fuchs   Add fdt_find_and_...
105
106
  int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
  			 const void *val, int len, int create);
b8ec23850   Timur Tabi   85xx: add ability...
107
  void fdt_fixup_qe_firmware(void *fdt);
64dbbd40c   Gerald Van Baren   Moved fdt command...
108

08daa258e   Tim Harvey   fdt: add new fdt_...
109
110
111
112
113
114
115
116
117
118
119
120
  /**
   * Update native-mode property of display-timings node to the phandle
   * of the timings matching a display by name (case insensitive).
   *
   * see kernel Documentation/devicetree/bindings/video/display-timing.txt
   *
   * @param blob		FDT blob to update
   * @param path		path within dt
   * @param display	name of display timing to match
   * @return 0 if ok, or -FDT_ERR_... on error
   */
  int fdt_fixup_display(void *blob, const char *path, const char *display);
b9f6786a8   Sriram Dash   drivers:usb:commo...
121
  #if defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL)
a5c289b9b   Sriram Dash   usb: fsl: Rename ...
122
  void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd);
18e69a35e   Anton Vorontsov   83xx/fdt_support:...
123
  #else
a5c289b9b   Sriram Dash   usb: fsl: Rename ...
124
  static inline void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd) {}
b9f6786a8   Sriram Dash   drivers:usb:commo...
125
  #endif /* defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL) */
18e69a35e   Anton Vorontsov   83xx/fdt_support:...
126

929a21383   Kim Phillips   powerpc/8xxx: Dis...
127
  #if defined(CONFIG_SYS_FSL_SEC_COMPAT)
6b70ffb9d   Kim Phillips   fdt: add crypto n...
128
129
130
131
  void fdt_fixup_crypto_node(void *blob, int sec_rev);
  #else
  static inline void fdt_fixup_crypto_node(void *blob, int sec_rev) {}
  #endif
8ab451c46   Kumar Gala   fdt: Added helper...
132
133
134
135
  #ifdef CONFIG_PCI
  #include <pci.h>
  int fdt_pci_dma_ranges(void *blob, int phb_off, struct pci_controller *hose);
  #endif
a9e8e2910   Simon Glass   fdt: Export the f...
136
  int fdt_find_or_add_subnode(void *fdt, int parentoffset, const char *name);
e895a4b06   Simon Glass   fdt: Allow ft_boa...
137
138
139
140
  /**
   * Add board-specific data to the FDT before booting the OS.
   *
   * Use CONFIG_SYS_FDT_PAD to ensure there is sufficient space.
6f4dbc21e   Simon Glass   fdt: Tidy up erro...
141
   * This function is called if CONFIG_OF_BOARD_SETUP is defined
e895a4b06   Simon Glass   fdt: Allow ft_boa...
142
143
144
145
146
147
   *
   * @param blob		FDT blob to update
   * @param bd_t		Pointer to board data
   * @return 0 if ok, or -FDT_ERR_... on error
   */
  int ft_board_setup(void *blob, bd_t *bd);
00c200f13   Vitaly Andrianov   fdt: call ft_boar...
148
149
150
151
152
153
154
  /*
   * The keystone2 SOC requires all 32 bit aliased addresses to be converted
   * to their 36 physical format. This has to happen after all fdt nodes
   * are added or modified by the image_setup_libfdt(). The ft_board_setup_ex()
   * called at the end of the image_setup_libfdt() is to do that convertion.
   */
  void ft_board_setup_ex(void *blob, bd_t *bd);
e125a2ffc   Gerald Van Baren   Call ft_board_set...
155
156
  void ft_cpu_setup(void *blob, bd_t *bd);
  void ft_pci_setup(void *blob, bd_t *bd);
e125a2ffc   Gerald Van Baren   Call ft_board_set...
157

c654b5172   Simon Glass   fdt: Add ft_syste...
158
159
160
161
162
163
164
165
166
167
168
  /**
   * Add system-specific data to the FDT before booting the OS.
   *
   * Use CONFIG_SYS_FDT_PAD to ensure there is sufficient space.
   * This function is called if CONFIG_OF_SYSTEM_SETUP is defined
   *
   * @param blob		FDT blob to update
   * @param bd_t		Pointer to board data
   * @return 0 if ok, or -FDT_ERR_... on error
   */
  int ft_system_setup(void *blob, bd_t *bd);
90fbee3e4   Joe Hershberger   cmd_fdt: Actually...
169
  void set_working_fdt_addr(ulong addr);
ef4768364   Hannes Schmelzer   cmd/fdt: add poss...
170
171
172
173
174
175
176
177
178
  
  /**
   * shrink down the given blob to minimum size + some extrasize if required
   *
   * @param blob		FDT blob to update
   * @param extrasize	additional bytes needed
   * @return 0 if ok, or -FDT_ERR_... on error
   */
  int fdt_shrink_to_minimum(void *blob, uint extrasize);
b3606f141   Timur Tabi   fdt: add prototyp...
179
  int fdt_increase_size(void *fdt, int add_len);
54f9c8669   Kumar Gala   bootm: Set workin...
180

8a805df13   Stefan Roese   ppc4xx/fdt/flash:...
181
  int fdt_fixup_nor_flash_size(void *blob);
30d45c0d3   Stefan Roese   fdt: Add fdt_fixu...
182

f4ae23a7c   Christopher Spinrath   fdt_support: defi...
183
  #if defined(CONFIG_FDT_FIXUP_PARTITIONS)
3c950e2eb   Anatolij Gustschin   fdt_support: add ...
184
  void fdt_fixup_mtdparts(void *fdt, void *node_info, int node_info_size);
f4ae23a7c   Christopher Spinrath   fdt_support: defi...
185
186
187
188
  #else
  static inline void fdt_fixup_mtdparts(void *fdt, void *node_info,
  					int node_info_size) {}
  #endif
49b97d9c8   Kumar Gala   fdt: Add fdt_del_...
189
  void fdt_del_node_and_alias(void *blob, const char *alias);
11e44fc6b   Stephen Warren   fdt_support: fdt_...
190
191
  u64 fdt_translate_address(const void *blob, int node_offset,
  			  const __be32 *in_addr);
75e73afd5   Kumar Gala   fdt: Add fdt_node...
192
193
  int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
  					phys_addr_t compat_off);
b4b847e95   Kumar Gala   fdt: Add function...
194
  int fdt_alloc_phandle(void *blob);
f117c0f07   Kumar Gala   fdt: Rename fdt_c...
195
  int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
3c927cccd   Timur Tabi   fdt: check for fd...
196
  unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
beca5a5f5   Anatolij Gustschin   fdt_support: supp...
197
  int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
3c950e2eb   Anatolij Gustschin   fdt_support: add ...
198

bb682001f   Timur Tabi   fdt: introduce fd...
199
200
201
  int fdt_verify_alias_address(void *fdt, int anode, const char *alias,
  			      u64 addr);
  u64 fdt_get_base_address(void *fdt, int node);
c48e68688   Alexander Graf   fdt_support: Add ...
202
203
  int fdt_read_range(void *fdt, int node, int n, uint64_t *child_addr,
  		   uint64_t *addr, uint64_t *len);
bb682001f   Timur Tabi   fdt: introduce fd...
204

2a523f524   Shengzhou Liu   fdt: Add new fdt_...
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
  enum fdt_status {
  	FDT_STATUS_OKAY,
  	FDT_STATUS_DISABLED,
  	FDT_STATUS_FAIL,
  	FDT_STATUS_FAIL_ERROR_CODE,
  };
  int fdt_set_node_status(void *fdt, int nodeoffset,
  			enum fdt_status status, unsigned int error_code);
  static inline int fdt_status_okay(void *fdt, int nodeoffset)
  {
  	return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_OKAY, 0);
  }
  static inline int fdt_status_disabled(void *fdt, int nodeoffset)
  {
  	return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_DISABLED, 0);
  }
b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
221
222
223
224
  static inline int fdt_status_fail(void *fdt, int nodeoffset)
  {
  	return fdt_set_node_status(fdt, nodeoffset, FDT_STATUS_FAIL, 0);
  }
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
225

b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
226
  int fdt_set_status_by_alias(void *fdt, const char *alias,
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
227
  			    enum fdt_status status, unsigned int error_code);
b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
228
  static inline int fdt_status_okay_by_alias(void *fdt, const char *alias)
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
229
230
231
  {
  	return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_OKAY, 0);
  }
b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
232
  static inline int fdt_status_disabled_by_alias(void *fdt, const char *alias)
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
233
234
235
  {
  	return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_DISABLED, 0);
  }
b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
236
237
238
239
  static inline int fdt_status_fail_by_alias(void *fdt, const char *alias)
  {
  	return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_FAIL, 0);
  }
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
240

08df4a21c   Arnab Basu   fdt_support: Move...
241
242
243
244
245
246
247
248
  /* Helper to read a big number; size is in cells (not bytes) */
  static inline u64 of_read_number(const fdt32_t *cell, int size)
  {
  	u64 r = 0;
  	while (size--)
  		r = (r << 32) | fdt32_to_cpu(*(cell++));
  	return r;
  }
11e44fc6b   Stephen Warren   fdt_support: fdt_...
249
  void of_bus_default_count_cells(const void *blob, int parentoffset,
f43b4356a   Arnab Basu   fdt_support: Make...
250
  					int *addrc, int *sizec);
d50b07df2   Jeroen Hofstee   fdt_support: add ...
251
252
  int ft_verify_fdt(void *fdt);
  int arch_fixup_memory_node(void *blob);
f43b4356a   Arnab Basu   fdt_support: Make...
253

d4f495a88   Hans de Goede   fdt_support: Add ...
254
255
  int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width,
  			    u32 height, u32 stride, const char *format);
64dbbd40c   Gerald Van Baren   Moved fdt command...
256
  #endif /* ifdef CONFIG_OF_LIBFDT */
29a23f9d6   Heiko Schocher   tools, fit_check_...
257
258
259
260
261
  
  #ifdef USE_HOSTCC
  int fdtdec_get_int(const void *blob, int node, const char *prop_name,
  		int default_val);
  #endif
64dbbd40c   Gerald Van Baren   Moved fdt command...
262
  #endif /* ifndef __FDT_SUPPORT_H */