Blame view

include/fdt_support.h 10.1 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  /* SPDX-License-Identifier: GPL-2.0+ */
64dbbd40c   Gerald Van Baren   Moved fdt command...
2
3
4
  /*
   * (C) Copyright 2007
   * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com
64dbbd40c   Gerald Van Baren   Moved fdt command...
5
6
7
8
9
10
   */
  
  #ifndef __FDT_SUPPORT_H
  #define __FDT_SUPPORT_H
  
  #ifdef CONFIG_OF_LIBFDT
b08c8c487   Masahiro Yamada   libfdt: move head...
11
  #include <linux/libfdt.h>
64dbbd40c   Gerald Van Baren   Moved fdt command...
12

94fb182cd   Alexander Graf   fdt_support: spli...
13
14
  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 ...
15
16
  u32 fdt_getprop_u32_default(const void *fdt, const char *path,
  				const char *prop, const u32 dflt);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
17
18
19
20
21
22
23
24
25
  
  /**
   * 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...
26
  int fdt_root(void *fdt);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
27
28
29
30
31
32
33
34
35
  
  /**
   * 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...
36
  int fdt_chosen(void *fdt);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
37
38
39
40
41
42
43
  
  /**
   * 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...
44
  int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
3c4c142e5   Paul Kocialkowski   fdt: Documentatio...
45

e93becf80   Kumar Gala   Move do_fixup* fo...
46
47
48
49
  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...
50
51
52
53
54
55
  
  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...
56
57
58
59
60
61
62
63
64
65
66
  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...
67
68
69
70
71
72
73
74
75
76
  /**
   * 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...
77
  int fdt_fixup_memory(void *blob, u64 start, u64 size);
5c1cf89f8   Andre Przywara   fdt: prevent clea...
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
  
  /**
   * 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...
93
  #ifdef CONFIG_ARCH_FIXUP_FDT_MEMORY
a6bd9e83a   John Rigby   FDT: Add fixup su...
94
  int fdt_fixup_memory_banks(void *blob, u64 start[], u64 size[], int banks);
63c094172   Masahiro Yamada   libfdt: replace A...
95
96
97
98
99
100
101
  #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...
102

ba37aa032   Kumar Gala   fdt: rework fdt_f...
103
  void fdt_fixup_ethernet(void *fdt);
22fb2246d   Matthias Fuchs   Add fdt_find_and_...
104
105
  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...
106
  void fdt_fixup_qe_firmware(void *fdt);
64dbbd40c   Gerald Van Baren   Moved fdt command...
107

08daa258e   Tim Harvey   fdt: add new fdt_...
108
109
110
111
112
113
114
115
116
117
118
119
  /**
   * 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...
120
  #if defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL)
a5c289b9b   Sriram Dash   usb: fsl: Rename ...
121
  void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd);
18e69a35e   Anton Vorontsov   83xx/fdt_support:...
122
  #else
a5c289b9b   Sriram Dash   usb: fsl: Rename ...
123
  static inline void fsl_fdt_fixup_dr_usb(void *blob, bd_t *bd) {}
b9f6786a8   Sriram Dash   drivers:usb:commo...
124
  #endif /* defined(CONFIG_USB_EHCI_FSL) || defined(CONFIG_USB_XHCI_FSL) */
18e69a35e   Anton Vorontsov   83xx/fdt_support:...
125

929a21383   Kim Phillips   powerpc/8xxx: Dis...
126
  #if defined(CONFIG_SYS_FSL_SEC_COMPAT)
6b70ffb9d   Kim Phillips   fdt: add crypto n...
127
128
129
130
  void fdt_fixup_crypto_node(void *blob, int sec_rev);
  #else
  static inline void fdt_fixup_crypto_node(void *blob, int sec_rev) {}
  #endif
9f45aeb93   Philipp Tomsich   spl: fit: impleme...
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
  /**
   * Record information about a processed loadable in /fit-images (creating
   * /fit-images if necessary).
   *
   * @param blob		FDT blob to update
   * @param index	        index of this loadable
   * @param name          name of the loadable
   * @param load_addr     address the loadable was loaded to
   * @param size          number of bytes loaded
   * @param entry_point   entry point (if specified, otherwise pass -1)
   * @param type          type (if specified, otherwise pass NULL)
   * @param os            os-type (if specified, otherwise pass NULL)
   * @return 0 if ok, or -1 or -FDT_ERR_... on error
   */
  int fdt_record_loadable(void *blob, u32 index, const char *name,
  			uintptr_t load_addr, u32 size, uintptr_t entry_point,
  			const char *type, const char *os);
9f45aeb93   Philipp Tomsich   spl: fit: impleme...
148

8ab451c46   Kumar Gala   fdt: Added helper...
149
150
151
152
  #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...
153
  int fdt_find_or_add_subnode(void *fdt, int parentoffset, const char *name);
e895a4b06   Simon Glass   fdt: Allow ft_boa...
154
155
156
157
  /**
   * 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...
158
   * This function is called if CONFIG_OF_BOARD_SETUP is defined
e895a4b06   Simon Glass   fdt: Allow ft_boa...
159
160
161
162
163
164
   *
   * @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...
165
166
167
168
169
170
171
  /*
   * 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...
172
173
  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...
174

c654b5172   Simon Glass   fdt: Add ft_syste...
175
176
177
178
179
180
181
182
183
184
185
  /**
   * 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...
186
  void set_working_fdt_addr(ulong addr);
ef4768364   Hannes Schmelzer   cmd/fdt: add poss...
187
188
189
190
191
192
193
194
195
  
  /**
   * 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...
196
  int fdt_increase_size(void *fdt, int add_len);
54f9c8669   Kumar Gala   bootm: Set workin...
197

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

5f4e32d05   Masahiro Yamada   fdt_support: make...
200
  struct node_info;
f4ae23a7c   Christopher Spinrath   fdt_support: defi...
201
  #if defined(CONFIG_FDT_FIXUP_PARTITIONS)
5f4e32d05   Masahiro Yamada   fdt_support: make...
202
203
  void fdt_fixup_mtdparts(void *fdt, const struct node_info *node_info,
  			int node_info_size);
f4ae23a7c   Christopher Spinrath   fdt_support: defi...
204
  #else
5f4e32d05   Masahiro Yamada   fdt_support: make...
205
206
207
208
209
  static inline void fdt_fixup_mtdparts(void *fdt,
  				      const struct node_info *node_info,
  				      int node_info_size)
  {
  }
f4ae23a7c   Christopher Spinrath   fdt_support: defi...
210
  #endif
49b97d9c8   Kumar Gala   fdt: Add fdt_del_...
211
  void fdt_del_node_and_alias(void *blob, const char *alias);
11e44fc6b   Stephen Warren   fdt_support: fdt_...
212
213
  u64 fdt_translate_address(const void *blob, int node_offset,
  			  const __be32 *in_addr);
75e73afd5   Kumar Gala   fdt: Add fdt_node...
214
215
  int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
  					phys_addr_t compat_off);
b4b847e95   Kumar Gala   fdt: Add function...
216
  int fdt_alloc_phandle(void *blob);
f117c0f07   Kumar Gala   fdt: Rename fdt_c...
217
  int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t phandle);
3c927cccd   Timur Tabi   fdt: check for fd...
218
  unsigned int fdt_create_phandle(void *fdt, int nodeoffset);
beca5a5f5   Anatolij Gustschin   fdt_support: supp...
219
  int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
3c950e2eb   Anatolij Gustschin   fdt_support: add ...
220

bb682001f   Timur Tabi   fdt: introduce fd...
221
222
  int fdt_verify_alias_address(void *fdt, int anode, const char *alias,
  			      u64 addr);
ec002119c   Simon Glass   fdt: Update fdt_g...
223
  u64 fdt_get_base_address(const void *fdt, int node);
c48e68688   Alexander Graf   fdt_support: Add ...
224
225
  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...
226

2a523f524   Shengzhou Liu   fdt: Add new fdt_...
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
  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: ...
243
244
245
246
  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_...
247

b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
248
  int fdt_set_status_by_alias(void *fdt, const char *alias,
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
249
  			    enum fdt_status status, unsigned int error_code);
b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
250
  static inline int fdt_status_okay_by_alias(void *fdt, const char *alias)
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
251
252
253
  {
  	return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_OKAY, 0);
  }
b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
254
  static inline int fdt_status_disabled_by_alias(void *fdt, const char *alias)
2a523f524   Shengzhou Liu   fdt: Add new fdt_...
255
256
257
  {
  	return fdt_set_status_by_alias(fdt, alias, FDT_STATUS_DISABLED, 0);
  }
b940ca64b   J. German Rivera   armv8/fsl-lsch3: ...
258
259
260
261
  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_...
262

08df4a21c   Arnab Basu   fdt_support: Move...
263
  /* Helper to read a big number; size is in cells (not bytes) */
eed36609b   Simon Glass   fdt: Rename a few...
264
  static inline u64 fdt_read_number(const fdt32_t *cell, int size)
08df4a21c   Arnab Basu   fdt_support: Move...
265
266
267
268
269
270
  {
  	u64 r = 0;
  	while (size--)
  		r = (r << 32) | fdt32_to_cpu(*(cell++));
  	return r;
  }
eed36609b   Simon Glass   fdt: Rename a few...
271
  void fdt_support_default_count_cells(const void *blob, int parentoffset,
f43b4356a   Arnab Basu   fdt_support: Make...
272
  					int *addrc, int *sizec);
d50b07df2   Jeroen Hofstee   fdt_support: add ...
273
274
  int ft_verify_fdt(void *fdt);
  int arch_fixup_memory_node(void *blob);
f43b4356a   Arnab Basu   fdt_support: Make...
275

d4f495a88   Hans de Goede   fdt_support: Add ...
276
277
  int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width,
  			    u32 height, u32 stride, const char *format);
fc7c31891   Pantelis Antoniou   fdt: Introduce he...
278
  int fdt_overlay_apply_verbose(void *fdt, void *fdto);
90c08fa03   Michael Pratt   fdt: Add device t...
279
280
281
282
283
284
285
286
287
  /**
   * fdt_get_cells_len() - Get the length of a type of cell in top-level nodes
   *
   * Returns the length of the cell type in bytes (4 or 8).
   *
   * @blob: Pointer to device tree blob
   * @nr_cells_name: Name to lookup, e.g. "#address-cells"
   */
  int fdt_get_cells_len(const void *blob, char *nr_cells_name);
64dbbd40c   Gerald Van Baren   Moved fdt command...
288
  #endif /* ifdef CONFIG_OF_LIBFDT */
29a23f9d6   Heiko Schocher   tools, fit_check_...
289
290
291
292
293
  
  #ifdef USE_HOSTCC
  int fdtdec_get_int(const void *blob, int node, const char *prop_name,
  		int default_val);
  #endif
6bedf4471   Prabhakar Kushwaha   arm: Add support ...
294
295
296
  #ifdef CONFIG_FMAN_ENET
  int fdt_update_ethernet_dt(void *blob);
  #endif
f9747a5a5   Yogesh Gaur   driver: fsl-mc: P...
297
298
299
  #ifdef CONFIG_FSL_MC_ENET
  void fdt_fixup_board_enet(void *blob);
  #endif
64dbbd40c   Gerald Van Baren   Moved fdt command...
300
  #endif /* ifndef __FDT_SUPPORT_H */