123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- .. SPDX-License-Identifier: GPL-2.0+
- .. Copyright 2021, Kory Maincent <kory.maincent@bootlin.com>
- U-Boot extension board usage (CONFIG_EXTENSION)
- ===============================================
- Synopsis
- --------
- ::
- extension scan
- extension list
- extension apply <extension number|all>
- Description
- -----------
- The "extension" command proposes a generic U-Boot mechanism to detect
- extension boards connected to the HW platform, and apply the appropriate
- Device Tree overlays depending on the detected extension boards.
- The "extension" command comes with three sub-commands:
- - "extension scan" makes the generic code call the board-specific
- extension_board_scan() function to retrieve the list of detected
- extension boards.
- - "extension list" allows to list the detected extension boards.
- - "extension apply <number>|all" allows to apply the Device Tree
- overlay(s) corresponding to one, or all, extension boards
- The latter requires two environment variables to exist:
- - extension_overlay_addr: the RAM address where to load the Device
- Tree overlays
- - extension_overlay_cmd: the U-Boot command to load one overlay.
- Indeed, the location and mechanism to load DT overlays is very setup
- specific.
- In order to enable this mechanism, board-specific code must implement
- the extension_board_scan() function that fills in a linked list of
- "struct extension", each describing one extension board. In addition,
- the board-specific code must select the SUPPORT_EXTENSION_SCAN Kconfig
- boolean.
- Usage example
- -------------
- 1. Make sure your devicetree is loaded and set as the working fdt tree.
- ::
- => run loadfdt
- => fdt addr $fdtaddr
- 2. Prepare the environment variables
- ::
- => setenv extension_overlay_addr 0x88080000
- => setenv extension_overlay_cmd 'load mmc 0:1 ${extension_overlay_addr} /boot/${extension_overlay_name}'
- 3. Detect the plugged extension board
- ::
- => extension scan
- 4. List the plugged extension board information and the devicetree
- overlay name
- ::
- => extension list
- 5. Apply the appropriate devicetree overlay
- For apply the selected overlay:
- ::
- => extension apply 0
- For apply all the overlays:
- ::
- => extension apply all
- Simple extension_board_scan function example
- --------------------------------------------
- .. code-block:: c
- int extension_board_scan(struct list_head *extension_list)
- {
- struct extension *extension;
- extension = calloc(1, sizeof(struct extension));
- snprintf(extension->overlay, sizeof(extension->overlay), "overlay.dtbo");
- snprintf(extension->name, sizeof(extension->name), "extension board");
- snprintf(extension->owner, sizeof(extension->owner), "sandbox");
- snprintf(extension->version, sizeof(extension->version), "1.1");
- snprintf(extension->other, sizeof(extension->other), "Extension board information");
- list_add_tail(&extension->list, extension_list);
- return 1;
- }
|