1#
2# Device Tree Control
3#
4
5config SUPPORT_OF_CONTROL
6	bool
7
8config PYLIBFDT
9	bool
10
11config DTOC
12	bool
13	select PYLIBFDT
14
15config BINMAN
16	bool
17	select DTOC
18
19config BINMAN_STANDALONE_FDT
20	bool
21	depends on BINMAN
22	default y if OF_BOARD
23	help
24	  This option tells U-Boot build system that a standalone device tree
25	  source is explicitly required when using binman to package U-Boot.
26
27	  This is not necessary in a common scenario where a device tree source
28	  that contains the binman node is provided in the arch/<arch>/dts
29	  directory for a specific board. Such device tree sources are built for
30	  OF_SEPARATE or OF_EMBED. However for a scenario like the board device
31	  tree blob is not provided in the U-Boot build tree, but fed to U-Boot
32	  in the runtime, e.g.: in the OF_BOARD case that it is passed by
33	  a prior stage bootloader. For such scenario, a standalone device tree
34	  blob containing binman node to describe how to package U-Boot should
35	  be provided explicitly.
36
37menu "Device Tree Control"
38	depends on SUPPORT_OF_CONTROL
39
40config OF_CONTROL
41	bool "Run-time configuration via Device Tree"
42	select OF_LIBFDT if !OF_PLATDATA
43	select OF_REAL if !OF_PLATDATA
44	help
45	  This feature provides for run-time configuration of U-Boot
46	  via a flattened device tree.
47
48config OF_REAL
49	bool
50	help
51	  Indicates that a real devicetree is available which can be accessed
52	  at runtime. This means that dev_read_...() functions can be used to
53	  read data from the devicetree for each device. This is true if
54	  OF_CONTROL is enabled in U-Boot proper.
55
56config OF_BOARD_FIXUP
57	bool "Board-specific manipulation of Device Tree"
58	help
59	  In certain circumstances it is necessary to be able to modify
60	  U-Boot's device tree (e.g. to delete device from it). This option
61	  make the Device Tree writeable and provides a board-specific
62	  "board_fix_fdt" callback (called during pre-relocation time), which
63	  enables the board initialization to modifiy the Device Tree. The
64	  modified copy is subsequently used by U-Boot after relocation.
65
66config SPL_OF_CONTROL
67	bool "Enable run-time configuration via Device Tree in SPL"
68	depends on SPL && OF_CONTROL
69	select SPL_OF_LIBFDT if !SPL_OF_PLATDATA
70	select SPL_OF_REAL if !SPL_OF_PLATDATA
71	help
72	  Some boards use device tree in U-Boot but only have 4KB of SRAM
73	  which is not enough to support device tree. Disable this option to
74	  allow such boards to be supported by U-Boot SPL.
75
76config TPL_OF_CONTROL
77	bool "Enable run-time configuration via Device Tree in TPL"
78	depends on TPL && OF_CONTROL
79	select TPL_OF_LIBFDT if !TPL_OF_PLATDATA
80	select TPL_OF_REAL if !TPL_OF_PLATDATA
81	help
82	  Some boards use device tree in U-Boot but only have 4KB of SRAM
83	  which is not enough to support device tree. Enable this option to
84	  allow such boards to be supported by U-Boot TPL.
85
86config OF_LIVE
87	bool "Enable use of a live tree"
88	depends on DM && OF_CONTROL
89	help
90	  Normally U-Boot uses a flat device tree which saves space and
91	  avoids the need to unpack the tree before use. However a flat
92	  tree does not support modification from within U-Boot since it
93	  can invalidate driver-model device tree offsets. This option
94	  enables a live tree which is available after relocation,
95	  and can be adjusted as needed.
96
97choice
98	prompt "Provider of DTB for DT control"
99	depends on OF_CONTROL
100	default OF_BOARD if SANDBOX
101
102config OF_SEPARATE
103	bool "Separate DTB for DT control"
104	depends on !SANDBOX
105	help
106	  If this option is enabled, the device tree will be built and
107	  placed as a separate u-boot.dtb file alongside the U-Boot image.
108
109config OF_EMBED
110	bool "Embedded DTB for DT control"
111	help
112	  If this option is enabled, the device tree will be picked up and
113	  built into the U-Boot image. This is suitable for local debugging
114	  and development only and is not recommended for production devices.
115	  Boards in the mainline U-Boot tree should not use it.
116
117config OF_BOARD
118	bool "Provided by the board (e.g a previous loader) at runtime"
119	help
120	  If this option is enabled, the device tree will be provided by
121	  the board at runtime if the board supports it, instead of being
122	  bundled with the image.
123
124endchoice
125
126config DEFAULT_DEVICE_TREE
127	string "Default Device Tree for DT control"
128	depends on OF_CONTROL
129	help
130	  This option specifies the default Device Tree used for DT control.
131	  It can be overridden from the command line:
132	  $ make DEVICE_TREE=<device-tree-name>
133
134config OF_LIST
135	string "List of device tree files to include for DT control"
136	depends on SPL_LOAD_FIT || MULTI_DTB_FIT
137	default DEFAULT_DEVICE_TREE
138	help
139	  This option specifies a list of device tree files to use for DT
140	  control. These will be packaged into a FIT. At run-time, U-boot
141	  or SPL will select the correct DT to use by examining the
142	  hardware (e.g. reading a board ID value). This is a list of
143	  device tree files (without the directory or .dtb suffix)
144	  separated by <space>.
145
146config OF_OVERLAY_LIST
147	string "List of device tree overlays to include for DT control"
148	depends on SPL_LOAD_FIT_APPLY_OVERLAY
149	help
150	  This option specifies a list of device tree overlays to use for DT
151	  control. This option can then be used by a FIT generator to include
152	  the overlays in the FIT image.
153
154choice
155	prompt "OF LIST compression"
156	depends on MULTI_DTB_FIT
157	default MULTI_DTB_FIT_NO_COMPRESSION
158
159config MULTI_DTB_FIT_LZO
160	bool "LZO"
161	depends on SYS_MALLOC_F
162	select LZO
163	help
164	  Compress the FIT image containing the DTBs available for the SPL
165	  using LZO compression. (requires lzop on host).
166
167config MULTI_DTB_FIT_GZIP
168	bool "GZIP"
169	depends on SYS_MALLOC_F
170	select GZIP
171	help
172	  Compress the FIT image containing the DTBs available for the SPL
173	  using GZIP compression. (requires gzip on host)
174
175config MULTI_DTB_FIT_NO_COMPRESSION
176	bool "No compression"
177	help
178	  Do not compress the FIT image containing the DTBs available for the SPL.
179	  Use this options only if LZO is not available and the DTBs are very small.
180endchoice
181
182choice
183	prompt "Location of uncompressed DTBs"
184	depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO)
185	default MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F
186
187config MULTI_DTB_FIT_DYN_ALLOC
188	bool "Dynamically allocate the memory"
189	depends on SYS_MALLOC_F
190
191config MULTI_DTB_FIT_USER_DEFINED_AREA
192	bool "User-defined location"
193endchoice
194
195config MULTI_DTB_FIT_UNCOMPRESS_SZ
196	hex "Size of memory reserved to uncompress the DTBs"
197	depends on (MULTI_DTB_FIT_GZIP || MULTI_DTB_FIT_LZO)
198	default 0x8000
199	help
200	   This is the size of this area where the DTBs are uncompressed.
201	   If this area is dynamically allocated, make sure that
202	   SYS_MALLOC_F_LEN is big enough to contain it.
203
204config MULTI_DTB_FIT_USER_DEF_ADDR
205	hex "Address of memory where dtbs are uncompressed"
206	depends on MULTI_DTB_FIT_USER_DEFINED_AREA
207	help
208	   the FIT image containing the DTBs is uncompressed in an area defined
209	   at compilation time. This is the address of this area. It must be
210	   aligned on 2-byte boundary.
211
212config DTB_RESELECT
213	bool "Support swapping dtbs at a later point in boot"
214	depends on MULTI_DTB_FIT
215	help
216	  It is possible during initial boot you may need to use a generic
217	  dtb until you can fully determine the board your running on. This
218	  config allows boards to implement a function at a later point
219	  during boot to switch to the "correct" dtb.
220
221config MULTI_DTB_FIT
222	bool "Support embedding several DTBs in a FIT image for u-boot"
223	help
224	  This option provides hooks to allow U-boot to parse an
225	  appended FIT image and enable board specific code to then select
226	  the correct DTB to be used. Use this if you need to support
227	  multiple DTBs but don't use the SPL.
228
229
230config SPL_MULTI_DTB_FIT
231	depends on SPL_LOAD_FIT && SPL_OF_REAL
232	bool "Support embedding several DTBs in a FIT image for the SPL"
233	help
234	  This option provides the SPL with the ability to select its own
235	  DTB at runtime from an appended FIT image containing several DTBs.
236	  This allows using the same SPL binary on multiple platforms.
237	  The primary purpose is to handle different versions of
238	  the same platform without tweaking the platform code if the
239	  differences can be expressed in the DTBs (common examples are: bus
240	  capabilities, pad configurations).
241
242config SPL_OF_LIST
243	string "List of device tree files to include for DT control in SPL"
244	depends on SPL_MULTI_DTB_FIT
245	default OF_LIST
246	help
247	  This option specifies a list of device tree files to use for DT
248	  control in the SPL. These will be packaged into a FIT. At run-time,
249	  the SPL will select the correct DT to use by examining the
250	  hardware (e.g. reading a board ID value). This is a list of
251	  device tree files (without the directory or .dtb suffix)
252	  separated by <space>.
253
254choice
255	prompt "SPL OF LIST compression"
256	depends on SPL_MULTI_DTB_FIT
257	default SPL_MULTI_DTB_FIT_LZO
258
259config SPL_MULTI_DTB_FIT_LZO
260	bool "LZO"
261	depends on SYS_MALLOC_F
262	select SPL_LZO
263	help
264	  Compress the FIT image containing the DTBs available for the SPL
265	  using LZO compression. (requires lzop on host).
266
267config SPL_MULTI_DTB_FIT_GZIP
268	bool "GZIP"
269	depends on SYS_MALLOC_F
270	select SPL_GZIP
271	help
272	  Compress the FIT image containing the DTBs available for the SPL
273	  using GZIP compression. (requires gzip on host)
274
275config SPL_MULTI_DTB_FIT_NO_COMPRESSION
276	bool "No compression"
277	help
278	  Do not compress the FIT image containing the DTBs available for the SPL.
279	  Use this options only if LZO is not available and the DTBs are very small.
280endchoice
281
282choice
283	prompt "Location of uncompressed DTBs"
284	depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO)
285	default SPL_MULTI_DTB_FIT_DYN_ALLOC if SYS_MALLOC_F
286
287config SPL_MULTI_DTB_FIT_DYN_ALLOC
288	bool "Dynamically allocate the memory"
289	depends on SYS_MALLOC_F
290
291config SPL_MULTI_DTB_FIT_USER_DEFINED_AREA
292	bool "User-defined location"
293endchoice
294
295config SPL_MULTI_DTB_FIT_UNCOMPRESS_SZ
296	hex "Size of memory reserved to uncompress the DTBs"
297	depends on (SPL_MULTI_DTB_FIT_GZIP || SPL_MULTI_DTB_FIT_LZO)
298	default 0x8000
299	help
300	   This is the size of this area where the DTBs are uncompressed.
301	   If this area is dynamically allocated, make sure that
302	   SPL_SYS_MALLOC_F_LEN is big enough to contain it.
303
304config SPL_MULTI_DTB_FIT_USER_DEF_ADDR
305	hex "Address of memory where dtbs are uncompressed"
306	depends on SPL_MULTI_DTB_FIT_USER_DEFINED_AREA
307	help
308	   the FIT image containing the DTBs is uncompressed in an area defined
309	   at compilation time. This is the address of this area. It must be
310	   aligned on 2-byte boundary.
311
312config OF_SPL_REMOVE_PROPS
313	string "List of device tree properties to drop for SPL"
314	depends on SPL_OF_CONTROL
315	default "interrupt-parent interrupts" if SPL_PINCTRL && SPL_CLK
316	default "clocks clock-names interrupt-parent interrupts" if SPL_PINCTRL
317	default "pinctrl-0 pinctrl-names interrupt-parent interrupts" if SPL_CLK
318	default "pinctrl-0 pinctrl-names clocks clock-names interrupt-parent interrupts"
319	help
320	  Since SPL normally runs in a reduced memory space, the device tree
321	  is cut down to only what is needed to load and start U-Boot. Only
322	  nodes marked with the property "u-boot,dm-pre-reloc" will be
323	  included. In addition, some properties are not used by U-Boot and
324	  can be discarded. This option defines the list of properties to
325	  discard.
326
327config OF_DTB_PROPS_REMOVE
328	bool "Enable removal of device tree properties"
329	depends on OF_CONTROL
330	help
331	  Some boards have restricted amount of storage for U-Boot image.
332	  If the generated binary doesn't fit into available image storage,
333	  the built-in device tree could probably be cut down by removing
334	  some not required device tree properties to reduce the image size.
335	  Enable this option and define the properties to be removed in the
336	  CONFIG_OF_REMOVE_PROPS list. Do not enable this option if you must
337	  pass the built-in DTB directly to the kernel!
338
339config OF_REMOVE_PROPS
340	string "List of device tree properties to drop"
341	depends on OF_DTB_PROPS_REMOVE
342	default "interrupt-parent interrupts" if PINCTRL
343	help
344	  Some properties are not used by U-Boot and can be discarded.
345	  This option defines the list of properties to discard.
346
347config SPL_OF_PLATDATA
348	bool "Generate platform data for use in SPL"
349	depends on SPL_OF_CONTROL
350	select DTOC
351	select SPL_OF_PLATDATA_DRIVER_RT if !SPL_OF_PLATDATA_INST
352	help
353	  For very constrained SPL environments the overhead of decoding
354	  device tree nodes and converting their contents into platform data
355	  is too large. This overhead includes libfdt code as well as the
356	  device tree contents itself. The latter is fairly compact, but the
357	  former can add 3KB or more to a Thumb 2 Image.
358
359	  This option enables generation of platform data from the device
360	  tree as C code. This code creates devices using U_BOOT_DRVINFO()
361	  declarations. The benefit is that it allows driver code to access
362	  the platform data directly in C structures, avoidin the libfdt
363	  overhead.
364
365	  This option works by generating C structure declarations for each
366	  compatible string, then adding platform data and U_BOOT_DRVINFO
367	  declarations for each node. See of-plat.txt for more information.
368
369config SPL_OF_REAL
370	bool
371	help
372	  Indicates that a real devicetree is available which can be accessed
373	  at runtime. This means that dev_read_...() functions can be used to
374	  read data from the devicetree for each device. This is true if
375	  SPL_OF_CONTROL is enabled and not SPL_OF_PLATDATA
376
377if SPL_OF_PLATDATA
378
379config SPL_OF_PLATDATA_PARENT
380	bool "Support parent information in devices"
381	default y
382	help
383	  Generally it is useful to be able to access the parent of a device
384	  with of-platdata. To save space this can be disabled, but in that
385	  case dev_get_parent() will always return NULL;
386
387config SPL_OF_PLATDATA_INST
388	bool "Declare devices at build time"
389	help
390	  Declare devices as udevice instances so that they do not need to be
391	  bound when U-Boot starts. This can save time and code space.
392
393config SPL_OF_PLATDATA_NO_BIND
394	bool "Don't allow run-time binding of devices"
395	depends on SPL_OF_PLATDATA_INST
396	default y
397	help
398	  This removes the ability to bind devices at run time, thus saving
399	  some code space in U-Boot. This can be disabled if binding is needed,
400	  at the code of some code size increase.
401
402config SPL_OF_PLATDATA_RT
403	bool "Use a separate struct for device runtime data"
404	depends on SPL_OF_PLATDATA_INST
405	default y
406	help
407	  For systems running SPL from read-only memory it is convenient to
408	  separate out the runtime information, so that the devices don't need
409	  to be copied before being used. This moves the read-write parts of
410	  struct udevice (at present just the flags) into a separate struct,
411	  which is allocated at runtime.
412
413config SPL_OF_PLATDATA_DRIVER_RT
414	bool
415	help
416	  Use a separate struct for driver runtime data.
417
418	  This enables the driver_rt information, used with of-platdata when
419	  of-platdata-inst is not used. It allows finding devices by their
420	  driver data.
421
422endif
423
424config TPL_OF_REAL
425	bool
426	help
427	  Indicates that a real devicetree is available which can be accessed
428	  at runtime. This means that dev_read_...() functions can be used to
429	  read data from the devicetree for each device. This is true if
430	  TPL_OF_CONTROL is enabled and not TPL_OF_PLATDATA
431
432config TPL_OF_PLATDATA
433	bool "Generate platform data for use in TPL"
434	depends on TPL_OF_CONTROL
435	select DTOC
436	select TPL_OF_PLATDATA_DRIVER_RT if !TPL_OF_PLATDATA_INST
437	help
438	  For very constrained SPL environments the overhead of decoding
439	  device tree nodes and converting their contents into platform data
440	  is too large. This overhead includes libfdt code as well as the
441	  device tree contents itself. The latter is fairly compact, but the
442	  former can add 3KB or more to a Thumb 2 Image.
443
444	  This option enables generation of platform data from the device
445	  tree as C code. This code creates devices using U_BOOT_DRVINFO()
446	  declarations. The benefit is that it allows driver code to access
447	  the platform data directly in C structures, avoidin the libfdt
448	  overhead.
449
450	  This option works by generating C structure declarations for each
451	  compatible string, then adding platform data and U_BOOT_DRVINFO
452	  declarations for each node. See of-plat.txt for more information.
453
454if TPL_OF_PLATDATA
455
456config TPL_OF_PLATDATA_PARENT
457	bool "Support parent information in devices"
458	default y
459	help
460	  Generally it is useful to be able to access the parent of a device
461	  with of-platdata. To save space this can be disabled, but in that
462	  case dev_get_parent() will always return NULL;
463
464config TPL_OF_PLATDATA_INST
465	bool "Declare devices at build time"
466
467	help
468	  Declare devices as udevice instances so that they do not need to be
469	  bound when U-Boot starts. This can save time and code space.
470
471config TPL_OF_PLATDATA_NO_BIND
472	bool "Don't allow run-time binding of devices"
473	depends on TPL_OF_PLATDATA_INST
474	default y
475	help
476	  This removes the ability to bind devices at run time, thus saving
477	  some code space in U-Boot. This can be disabled if binding is needed,
478	  at the code of some code size increase.
479
480config TPL_OF_PLATDATA_RT
481	bool "Use a separate struct for device runtime data"
482	depends on TPL_OF_PLATDATA_INST
483	default y
484	help
485	  For systems running TPL from read-only memory it is convenient to
486	  separate out the runtime information, so that the devices don't need
487	  to be copied before being used. This moves the read-write parts of
488	  struct udevice (at present just the flags) into a separate struct,
489	  which is allocated at runtime.
490
491config TPL_OF_PLATDATA_DRIVER_RT
492	bool
493	help
494	  Use a separate struct for driver runtime data.
495
496	  This enables the driver_rt information, used with of-platdata when
497	  of-platdata-inst is not used. It allows finding devices by their
498	  driver data.
499
500endif
501
502endmenu
503