Skip to content
  • Cédric Schieli's avatar
    rpi: passthrough of the firmware provided FDT blob · ade243a2
    Cédric Schieli authored
    Raspberry firmware used to pass a FDT blob at a fixed address (0x100),
    but this is not true anymore. The address now depends on both the
    memory size and the blob size [1].
    
    If one wants to passthrough this FDT blob to the kernel, the most
    reliable way is to save its address from the r2/x0 register in the
    U-Boot entry point and expose it in a environment variable for
    further processing.
    
    This patch just does this:
    - save the provided address in the global variable fw_dtb_pointer
    - expose it in ${fdt_addr} if it points to a a valid FDT blob
    
    There are many different ways to use it. One can, for example, use
    the following script which will extract from the tree the command
    line built by the firmware, then hand over the blob to a previously
    loaded kernel:
    
    fdt addr ${fdt_addr}
    fdt get value bootargs /chosen bootargs
    bootz ${kernel_addr_r} - ${fdt_addr}
    
    Alternatively, users relying on sysboot/pxe can simply omit any FDT
    statement in their extlinux.conf file, U-Boot will automagically pick
    ${fdt_addr} and pass it to the kernel.
    
    [1] https://www.raspberrypi.org/forums//viewtopic.php?f=107&t=134018
    
    
    
    Signed-off-by: default avatarCédric Schieli <cschieli@gmail.com>
    Acked-by: default avatarStephen Warren <swarren@nvidia.com>
    ade243a2