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