408a8d8e28b1ea747d9013fa59a71c773fdd16a8
[platform/kernel/u-boot.git] / drivers / core / Kconfig
1 menu "Generic Driver Options"
2
3 config DM
4         bool "Enable Driver Model"
5         help
6           This config option enables Driver Model. This brings in the core
7           support, including scanning of platform data on start-up. If
8           CONFIG_OF_CONTROL is enabled, the device tree will be scanned also
9           when available.
10
11 config SPL_DM
12         bool "Enable Driver Model for SPL"
13         depends on DM && SPL
14         help
15           Enable driver model in SPL. You will need to provide a
16           suitable malloc() implementation. If you are not using the
17           full malloc() enabled by CONFIG_SYS_SPL_MALLOC_START,
18           consider using CONFIG_SYS_MALLOC_SIMPLE. In that case you
19           must provide CONFIG_SPL_SYS_MALLOC_F_LEN to set the size.
20           In most cases driver model will only allocate a few uclasses
21           and devices in SPL, so 1KB should be enable. See
22           CONFIG_SPL_SYS_MALLOC_F_LEN for more details on how to enable it.
23
24 config TPL_DM
25         bool "Enable Driver Model for TPL"
26         depends on DM && TPL
27         help
28           Enable driver model in TPL. You will need to provide a
29           suitable malloc() implementation. If you are not using the
30           full malloc() enabled by CONFIG_SYS_SPL_MALLOC_START,
31           consider using CONFIG_SYS_MALLOC_SIMPLE. In that case you
32           must provide CONFIG_SPL_SYS_MALLOC_F_LEN to set the size.
33           In most cases driver model will only allocate a few uclasses
34           and devices in SPL, so 1KB should be enough. See
35           CONFIG_SPL_SYS_MALLOC_F_LEN for more details on how to enable it.
36           Disable this for very small implementations.
37
38 config VPL_DM
39         bool "Enable Driver Model for VPL"
40         depends on DM && VPL
41         default y if SPL_DM
42         help
43           Enable driver model in VPL. You will need to provide a
44           suitable malloc() implementation. If you are not using the
45           full malloc() enabled by CONFIG_SYS_SPL_MALLOC_START,
46           consider using CONFIG_SYS_MALLOC_SIMPLE.
47
48 config DM_WARN
49         bool "Enable warnings in driver model"
50         depends on DM
51         default y
52         help
53           Enable this to see warnings related to driver model.
54
55           Warnings may help with debugging, such as when expected devices do
56           not bind correctly. If the option is disabled, dm_warn() is compiled
57           out - it will do nothing when called.
58
59 config SPL_DM_WARN
60         bool "Enable warnings in driver model wuth SPL"
61         depends on SPL_DM
62         help
63           Enable this to see warnings related to driver model in SPL
64
65           The dm_warn() function can use up quite a bit of space for its
66           strings. By default this is disabled for SPL builds to save space.
67
68           Warnings may help with debugging, such as when expected devices do
69           not bind correctly. If the option is disabled, dm_warn() is compiled
70           out - it will do nothing when called.
71
72 config DM_DEBUG
73         bool "Enable debug messages in driver model core"
74         depends on DM
75         help
76           Say Y here if you want to compile in debug messages in DM core.
77
78 config DM_DEVICE_REMOVE
79         bool "Support device removal"
80         depends on DM
81         default y
82         help
83           We can save some code space by dropping support for removing a
84           device.
85
86           Note that this may have undesirable results in the USB subsystem as
87           it causes unplugged devices to linger around in the dm-tree, and it
88           causes USB host controllers to not be stopped when booting the OS.
89
90 config DM_EVENT
91         bool "Support events with driver model"
92         depends on DM
93         imply EVENT
94         default y if SANDBOX
95         help
96           This enables support for generating events related to driver model
97           operations, such as prbing or removing a device. Subsystems can
98           register a 'spy' function that is called when the event occurs.
99
100 config SPL_DM_DEVICE_REMOVE
101         bool "Support device removal in SPL"
102         depends on SPL_DM
103         help
104           We can save some code space by dropping support for removing a
105           device. This is not normally required in SPL, so by default this
106           option is disabled for SPL.
107
108 config DM_STDIO
109         bool "Support stdio registration"
110         depends on DM
111         default y
112         help
113           Normally serial drivers register with stdio so that they can be used
114           as normal output devices. In SPL we don't normally use stdio, so
115           we can omit this feature.
116
117 config DM_SEQ_ALIAS
118         bool "Support numbered aliases in device tree"
119         depends on DM
120         default y
121         help
122           Most boards will have a '/aliases' node containing the path to
123           numbered devices (e.g. serial0 = &serial0). This feature can be
124           disabled if it is not required.
125
126 config SPL_DM_SEQ_ALIAS
127         bool "Support numbered aliases in device tree in SPL"
128         depends on SPL_DM
129         help
130           Most boards will have a '/aliases' node containing the path to
131           numbered devices (e.g. serial0 = &serial0). This feature can be
132           disabled if it is not required, to save code space in SPL.
133
134 config VPL_DM_SEQ_ALIAS
135         bool "Support numbered aliases in device tree in VPL"
136         depends on VPL_DM
137         default y
138         help
139           Most boards will have a '/aliases' node containing the path to
140           numbered devices (e.g. serial0 = &serial0). This feature can be
141           disabled if it is not required, to save code space in VPL.
142
143 config SPL_DM_INLINE_OFNODE
144         bool "Inline some ofnode functions which are seldom used in SPL"
145         depends on SPL_DM
146         default y
147         help
148           This applies to several ofnode functions (see ofnode.h) which are
149           seldom used. Inlining them can help reduce code size.
150
151 config TPL_DM_INLINE_OFNODE
152         bool "Inline some ofnode functions which are seldom used in TPL"
153         depends on TPL_DM
154         default y
155         help
156           This applies to several ofnode functions (see ofnode.h) which are
157           seldom used. Inlining them can help reduce code size.
158
159 config DM_DMA
160         bool "Support per-device DMA constraints"
161         depends on DM
162         help
163           Enable this to extract per-device DMA constraints, only supported on
164           device-tree systems for now. This is needed in order translate
165           addresses on systems where different buses have different views of
166           the physical address space.
167
168 config REGMAP
169         bool "Support register maps"
170         depends on DM
171         help
172           Hardware peripherals tend to have one or more sets of registers
173           which can be accessed to control the hardware. A register map
174           models this with a simple read/write interface. It can in principle
175           support any bus type (I2C, SPI) but so far this only supports
176           direct memory access.
177
178 config SPL_REGMAP
179         bool "Support register maps in SPL"
180         depends on SPL_DM
181         help
182           Hardware peripherals tend to have one or more sets of registers
183           which can be accessed to control the hardware. A register map
184           models this with a simple read/write interface. It can in principle
185           support any bus type (I2C, SPI) but so far this only supports
186           direct memory access.
187
188 config TPL_REGMAP
189         bool "Support register maps in TPL"
190         depends on TPL_DM
191         help
192           Hardware peripherals tend to have one or more sets of registers
193           which can be accessed to control the hardware. A register map
194           models this with a simple read/write interface. It can in principle
195           support any bus type (I2C, SPI) but so far this only supports
196           direct memory access.
197
198 config VPL_REGMAP
199         bool "Support register maps in VPL"
200         depends on VPL_DM
201         help
202           Hardware peripherals tend to have one or more sets of registers
203           which can be accessed to control the hardware. A register map
204           models this with a simple read/write interface. It can in principle
205           support any bus type (I2C, SPI) but so far this only supports
206           direct memory access.
207
208 config SYSCON
209         bool "Support system controllers"
210         depends on REGMAP
211         help
212           Many SoCs have a number of system controllers which are dealt with
213           as a group by a single driver. Some common functionality is provided
214           by this uclass, including accessing registers via regmap and
215           assigning a unique number to each.
216
217 config SPL_SYSCON
218         bool "Support system controllers in SPL"
219         depends on SPL_REGMAP
220         help
221           Many SoCs have a number of system controllers which are dealt with
222           as a group by a single driver. Some common functionality is provided
223           by this uclass, including accessing registers via regmap and
224           assigning a unique number to each.
225
226 config TPL_SYSCON
227         bool "Support system controllers in TPL"
228         depends on SPL_REGMAP
229         help
230           Many SoCs have a number of system controllers which are dealt with
231           as a group by a single driver. Some common functionality is provided
232           by this uclass, including accessing registers via regmap and
233           assigning a unique number to each.
234
235 config VPL_SYSCON
236         bool "Support system controllers in VPL"
237         depends on VPL_REGMAP
238         help
239           Many SoCs have a number of system controllers which are dealt with
240           as a group by a single driver. Some common functionality is provided
241           by this uclass, including accessing registers via regmap and
242           assigning a unique number to each.
243
244 config DEVRES
245         bool "Managed device resources"
246         depends on DM
247         help
248           This option enables the Managed device resources core support.
249           Device resources managed by the devres framework are automatically
250           released whether initialization fails half-way or the device gets
251           detached.
252
253           If this option is disabled, devres functions fall back to
254           non-managed variants.  For example, devres_alloc() to kzalloc(),
255           devm_kmalloc() to kmalloc(), etc.
256
257 config DEBUG_DEVRES
258         bool "Managed device resources debugging functions"
259         depends on DEVRES
260         help
261           If this option is enabled, devres debug messages are printed.
262           Also, a function is available to dump a list of device resources.
263           Select this if you are having a problem with devres or want to
264           debug resource management for a managed device.
265
266           If you are unsure about this, Say N here.
267
268 config SIMPLE_BUS
269         bool "Support simple-bus driver"
270         depends on DM && OF_CONTROL
271         default y
272         help
273           Supports the 'simple-bus' driver, which is used on some systems.
274
275 config SPL_SIMPLE_BUS
276         bool "Support simple-bus driver in SPL"
277         depends on SPL_DM && SPL_OF_CONTROL
278         default y
279         help
280           Supports the 'simple-bus' driver, which is used on some systems
281           in SPL.
282
283 config SIMPLE_BUS_CORRECT_RANGE
284         bool "Decode the 'simple-bus' <range> by honoring the #address-cells and #size-cells"
285         depends on SIMPLE_BUS
286         default y if SANDBOX
287         help
288           Decoding the 'simple-bus' <range> by honoring the #address-cells
289           and #size-cells of parent/child bus. If unset, #address-cells of
290           parent bus is assumed to be 1, #address-cells and #size-cells of
291           child bus is also assumed to be 1, to save some spaces of using
292           an advanced API to decode the <range>, which benefits SPL image
293           builds that have size limits.
294
295           If you are unsure about this, Say N here.
296
297 config SIMPLE_PM_BUS
298         bool "Support simple-pm-bus driver"
299         depends on DM && OF_CONTROL && CLK && POWER_DOMAIN
300         help
301           Supports the 'simple-pm-bus' driver, which is used for busses that
302           have power domains and/or clocks which need to be enabled before use.
303
304 config OF_TRANSLATE
305         bool "Translate addresses using fdt_translate_address"
306         depends on DM && OF_CONTROL
307         default y
308         help
309           If this option is enabled, the reg property will be translated
310           using the fdt_translate_address() function. This is necessary
311           on some platforms (e.g. MVEBU) using complex "ranges"
312           properties in many nodes. As this translation is not handled
313           correctly in the default simple_bus_translate() function.
314
315           If this option is not enabled, simple_bus_translate() will be
316           used for the address translation. This function is faster and
317           smaller in size than fdt_translate_address().
318
319 config SPL_OF_TRANSLATE
320         bool "Translate addresses using fdt_translate_address in SPL"
321         depends on SPL_DM && SPL_OF_CONTROL
322         help
323           If this option is enabled, the reg property will be translated
324           using the fdt_translate_address() function. This is necessary
325           on some platforms (e.g. MVEBU) using complex "ranges"
326           properties in many nodes. As this translation is not handled
327           correctly in the default simple_bus_translate() function.
328
329           If this option is not enabled, simple_bus_translate() will be
330           used for the address translation. This function is faster and
331           smaller in size than fdt_translate_address().
332
333 config VPL_OF_TRANSLATE
334         bool "Translate addresses using fdt_translate_address in SPL"
335         depends on SPL_DM && VPL_OF_CONTROL
336         help
337           If this option is enabled, the reg property will be translated
338           using the fdt_translate_address() function. This is necessary
339           on some platforms (e.g. MVEBU) using complex "ranges"
340           properties in many nodes. As this translation is not handled
341           correctly in the default simple_bus_translate() function.
342
343           If this option is not enabled, simple_bus_translate() will be
344           used for the address translation. This function is faster and
345           smaller in size than fdt_translate_address().
346
347 config TRANSLATION_OFFSET
348         bool "Platforms specific translation offset"
349         depends on DM && OF_CONTROL
350         help
351           Some platforms need a special address translation. Those
352           platforms (e.g. mvebu in SPL) can configure a translation
353           offset by enabling this option and setting the translation_offset
354           variable in the GD in their platform- / board-specific code.
355
356 config OF_ISA_BUS
357         bool
358         depends on OF_TRANSLATE
359         help
360           Is this option is enabled then support for the ISA bus will
361           be included for addresses read from DT. This is something that
362           should be known to be required or not based upon the board
363           being targeted, and whether or not it makes use of an ISA bus.
364
365           The bus is matched based upon its node name equalling "isa". The
366           busses #address-cells should equal 2, with the first cell being
367           used to hold flags & flag 0x1 indicating that the address range
368           should be accessed using I/O port in/out accessors. The second
369           cell holds the offset into ISA bus address space. The #size-cells
370           property should equal 1, and of course holds the size of the
371           address range used by a device.
372
373           If this option is not enabled then support for the ISA bus is
374           not included and any such busses used in DT will be treated as
375           typical simple-bus compatible busses. This will lead to
376           mistranslation of device addresses, so ensure that this is
377           enabled if your board does include an ISA bus.
378
379 config DM_DEV_READ_INLINE
380         bool
381         default y if !OF_LIVE
382
383 config ACPIGEN
384         bool "Support ACPI table generation in driver model"
385         default y if SANDBOX || (GENERATE_ACPI_TABLE && !QEMU)
386         select LIB_UUID
387         help
388           This option enables generation of ACPI tables using driver-model
389           devices. It adds a new operation struct to each driver, to support
390           things like generating device-specific tables and returning the ACPI
391           name of a device.
392
393 config BOUNCE_BUFFER
394         bool "Include bounce buffer API"
395         help
396           Some peripherals support DMA from a subset of physically
397           addressable memory only.  To support such peripherals, the
398           bounce buffer API uses a temporary buffer: it copies data
399           to/from DMA regions while managing cache operations.
400
401           A second possible use of bounce buffers is their ability to
402           provide aligned buffers for DMA operations.
403
404 endmenu