Skip to content
  • Kory Maincent's avatar
    cmd: add support for a new "extension" command · 2f84e9cf
    Kory Maincent authored and Tom Rini's avatar Tom Rini committed
    
    
    This patch adds a new "extension" command, which aims at detecting
    extension boards connected to the hardware platform, and apply the
    Device Tree overlays that describe the hardware present on those
    extension boards.
    
    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.
    
    Based on this:
    
     - "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 and set one variable
    to run:
    
     - 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.
    
     - extension_overlay_name: set by the command: the name of the DT which
       will be load during the execution.
    
    When calling the command described in the extension_overlay_cmd
    variable, the variable extension_overlay_name will be defined. So a
    typical extension_overlay_cmd will look like this:
    
      extension_overlay_cmd=load mmc 0:1 $extension_overlay_addr /boot/$extension_overlay_name
    
    Here is an example on how to use it:
    => run loadfdt
    => fdt addr $fdtaddr
    => setenv extension_overlay_addr 0x1000
    => setenv extension_overlay_cmd 'load mmc 0:1 ${extension_overlay_addr} /boot/${extension_overlay_name}'
    => extension scan
    Found 1 extension board(s).
    => extension apply 0
    519 bytes read in 3 ms (168.9 KiB/s)
    
    Signed-off-by: default avatarKory Maincent <kory.maincent@bootlin.com>
    Reviewed-by: default avatarMaxime Ripard <maxime@cerno.tech>
    2f84e9cf