1 menu "Generic Driver Options"
4 bool "Enable Driver Model"
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
12 bool "Enable Driver Model for SPL"
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_SPL_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.
25 bool "Enable Driver Model for TPL"
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_TPL_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.
39 bool "Enable Driver Model for VPL"
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_SPL_SYS_MALLOC_SIMPLE.
49 bool "Enable warnings in driver model"
53 Enable this to see warnings related to driver model.
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.
60 bool "Enable warnings in driver model wuth SPL"
63 Enable this to see warnings related to driver model in SPL
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.
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.
73 bool "Enable debug messages in driver model core"
76 Say Y here if you want to compile in debug messages in DM core.
79 bool "Collect and show driver model stats"
83 Enable this to collect and display memory statistics about driver
84 model. This can help to figure out where all the memory is going and
85 to find optimisations.
87 To display the memory stats, use the 'dm mem' command.
89 config DM_DEVICE_REMOVE
90 bool "Support device removal"
94 We can save some code space by dropping support for removing a
97 Note that this may have undesirable results in the USB subsystem as
98 it causes unplugged devices to linger around in the dm-tree, and it
99 causes USB host controllers to not be stopped when booting the OS.
102 bool "Support events with driver model"
103 depends on DM && EVENT
106 This enables support for generating events related to driver model
107 operations, such as prbing or removing a device. Subsystems can
108 register a 'spy' function that is called when the event occurs.
110 config SPL_DM_DEVICE_REMOVE
111 bool "Support device removal in SPL"
114 We can save some code space by dropping support for removing a
115 device. This is not normally required in SPL, so by default this
116 option is disabled for SPL.
119 bool "Support stdio registration"
123 Normally serial drivers register with stdio so that they can be used
124 as normal output devices. In SPL we don't normally use stdio, so
125 we can omit this feature.
128 bool "Support numbered aliases in device tree"
132 Most boards will have a '/aliases' node containing the path to
133 numbered devices (e.g. serial0 = &serial0). This feature can be
134 disabled if it is not required.
136 config SPL_DM_SEQ_ALIAS
137 bool "Support numbered aliases in device tree in SPL"
140 Most boards will have a '/aliases' node containing the path to
141 numbered devices (e.g. serial0 = &serial0). This feature can be
142 disabled if it is not required, to save code space in SPL.
144 config VPL_DM_SEQ_ALIAS
145 bool "Support numbered aliases in device tree in VPL"
149 Most boards will have a '/aliases' node containing the path to
150 numbered devices (e.g. serial0 = &serial0). This feature can be
151 disabled if it is not required, to save code space in VPL.
153 config SPL_DM_INLINE_OFNODE
154 bool "Inline some ofnode functions which are seldom used in SPL"
158 This applies to several ofnode functions (see ofnode.h) which are
159 seldom used. Inlining them can help reduce code size.
161 config TPL_DM_INLINE_OFNODE
162 bool "Inline some ofnode functions which are seldom used in TPL"
166 This applies to several ofnode functions (see ofnode.h) which are
167 seldom used. Inlining them can help reduce code size.
170 bool "Support per-device DMA constraints"
173 Enable this to extract per-device DMA constraints, only supported on
174 device-tree systems for now. This is needed in order translate
175 addresses on systems where different buses have different views of
176 the physical address space.
179 bool "Support register maps"
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.
189 bool "Support register maps in SPL"
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.
199 bool "Support register maps in TPL"
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.
209 bool "Support register maps in VPL"
212 Hardware peripherals tend to have one or more sets of registers
213 which can be accessed to control the hardware. A register map
214 models this with a simple read/write interface. It can in principle
215 support any bus type (I2C, SPI) but so far this only supports
216 direct memory access.
219 bool "Support system controllers"
222 Many SoCs have a number of system controllers which are dealt with
223 as a group by a single driver. Some common functionality is provided
224 by this uclass, including accessing registers via regmap and
225 assigning a unique number to each.
228 bool "Support system controllers in SPL"
229 depends on SPL_REGMAP
231 Many SoCs have a number of system controllers which are dealt with
232 as a group by a single driver. Some common functionality is provided
233 by this uclass, including accessing registers via regmap and
234 assigning a unique number to each.
237 bool "Support system controllers in TPL"
238 depends on SPL_REGMAP
240 Many SoCs have a number of system controllers which are dealt with
241 as a group by a single driver. Some common functionality is provided
242 by this uclass, including accessing registers via regmap and
243 assigning a unique number to each.
246 bool "Support system controllers in VPL"
247 depends on VPL_REGMAP
249 Many SoCs have a number of system controllers which are dealt with
250 as a group by a single driver. Some common functionality is provided
251 by this uclass, including accessing registers via regmap and
252 assigning a unique number to each.
255 bool "Managed device resources"
258 This option enables the Managed device resources core support.
259 Device resources managed by the devres framework are automatically
260 released whether initialization fails half-way or the device gets
263 If this option is disabled, devres functions fall back to
264 non-managed variants. For example, devres_alloc() to kzalloc(),
265 devm_kmalloc() to kmalloc(), etc.
268 bool "Managed device resources debugging functions"
271 If this option is enabled, devres debug messages are printed.
272 Also, a function is available to dump a list of device resources.
273 Select this if you are having a problem with devres or want to
274 debug resource management for a managed device.
276 If you are unsure about this, Say N here.
279 bool "Support simple-bus driver"
280 depends on DM && OF_CONTROL
283 Supports the 'simple-bus' driver, which is used on some systems.
285 config SPL_SIMPLE_BUS
286 bool "Support simple-bus driver in SPL"
287 depends on SPL_DM && SPL_OF_CONTROL
290 Supports the 'simple-bus' driver, which is used on some systems
293 config SIMPLE_BUS_CORRECT_RANGE
294 bool "Decode the 'simple-bus' <range> by honoring the #address-cells and #size-cells"
295 depends on SIMPLE_BUS
298 Decoding the 'simple-bus' <range> by honoring the #address-cells
299 and #size-cells of parent/child bus. If unset, #address-cells of
300 parent bus is assumed to be 1, #address-cells and #size-cells of
301 child bus is also assumed to be 1, to save some spaces of using
302 an advanced API to decode the <range>, which benefits SPL image
303 builds that have size limits.
305 If you are unsure about this, Say N here.
308 bool "Support simple-pm-bus driver"
309 depends on DM && OF_CONTROL && CLK && POWER_DOMAIN
311 Supports the 'simple-pm-bus' driver, which is used for busses that
312 have power domains and/or clocks which need to be enabled before use.
315 bool "Translate addresses using fdt_translate_address"
316 depends on DM && OF_CONTROL
319 If this option is enabled, the reg property will be translated
320 using the fdt_translate_address() function. This is necessary
321 on some platforms (e.g. MVEBU) using complex "ranges"
322 properties in many nodes. As this translation is not handled
323 correctly in the default simple_bus_translate() function.
325 If this option is not enabled, simple_bus_translate() will be
326 used for the address translation. This function is faster and
327 smaller in size than fdt_translate_address().
329 config SPL_OF_TRANSLATE
330 bool "Translate addresses using fdt_translate_address in SPL"
331 depends on SPL_DM && SPL_OF_CONTROL
333 If this option is enabled, the reg property will be translated
334 using the fdt_translate_address() function. This is necessary
335 on some platforms (e.g. MVEBU) using complex "ranges"
336 properties in many nodes. As this translation is not handled
337 correctly in the default simple_bus_translate() function.
339 If this option is not enabled, simple_bus_translate() will be
340 used for the address translation. This function is faster and
341 smaller in size than fdt_translate_address().
343 config VPL_OF_TRANSLATE
344 bool "Translate addresses using fdt_translate_address in SPL"
345 depends on SPL_DM && VPL_OF_CONTROL
347 If this option is enabled, the reg property will be translated
348 using the fdt_translate_address() function. This is necessary
349 on some platforms (e.g. MVEBU) using complex "ranges"
350 properties in many nodes. As this translation is not handled
351 correctly in the default simple_bus_translate() function.
353 If this option is not enabled, simple_bus_translate() will be
354 used for the address translation. This function is faster and
355 smaller in size than fdt_translate_address().
357 config TRANSLATION_OFFSET
358 bool "Platforms specific translation offset"
359 depends on DM && OF_CONTROL
361 Some platforms need a special address translation. Those
362 platforms (e.g. mvebu in SPL) can configure a translation
363 offset by enabling this option and setting the translation_offset
364 variable in the GD in their platform- / board-specific code.
368 depends on OF_TRANSLATE
370 Is this option is enabled then support for the ISA bus will
371 be included for addresses read from DT. This is something that
372 should be known to be required or not based upon the board
373 being targeted, and whether or not it makes use of an ISA bus.
375 The bus is matched based upon its node name equalling "isa". The
376 busses #address-cells should equal 2, with the first cell being
377 used to hold flags & flag 0x1 indicating that the address range
378 should be accessed using I/O port in/out accessors. The second
379 cell holds the offset into ISA bus address space. The #size-cells
380 property should equal 1, and of course holds the size of the
381 address range used by a device.
383 If this option is not enabled then support for the ISA bus is
384 not included and any such busses used in DT will be treated as
385 typical simple-bus compatible busses. This will lead to
386 mistranslation of device addresses, so ensure that this is
387 enabled if your board does include an ISA bus.
389 config DM_DEV_READ_INLINE
391 default y if !OF_LIVE
394 bool "Support ACPI table generation in driver model"
395 default y if SANDBOX || (GENERATE_ACPI_TABLE && !QEMU)
398 This option enables generation of ACPI tables using driver-model
399 devices. It adds a new operation struct to each driver, to support
400 things like generating device-specific tables and returning the ACPI
404 bool "Include bounce buffer API"
406 Some peripherals support DMA from a subset of physically
407 addressable memory only. To support such peripherals, the
408 bounce buffer API uses a temporary buffer: it copies data
409 to/from DMA regions while managing cache operations.
411 A second possible use of bounce buffers is their ability to
412 provide aligned buffers for DMA operations.