[U-Boot] [PATCH 1/2] ARM: rpi: update memory layout env. var. documentation

Jonathan Liu net147 at gmail.com
Sat Feb 6 08:30:31 CET 2016


Hi Stephen,

I actually read the DT loaded by RPi's binary firmware on an RPi 2 in a
U-Boot script:
fdt addr ${fdt_addr_r} && fdt get value bootargs /chosen bootargs
fatload mmc 0:1 ${kernel_addr_r} uImage
bootm ${kernel_addr_r} - ${fdt_addr_r}

Essentially this loads the kernel with the same arguments and DT that RPi's
binary firmware would have used if it booted the kernel directly with
device tree support. This allows for the normal patching of the kernel
arguments and device tree to be done by the RPi binary firmware so that
things like reading the serial number in /proc/cpuinfo works.

A trailer is added to u-boot.bin with "mkknlimg --dtok u-boot.bin
u-boot.bin" for the FW to enable device tree support and load the patched
device tree to 0x00000100.

So I am not sure about the comment that the DT loaded by the FW is
typically ignored by U-Boot scripts.

Regards,
Jonathan

On Saturday, 6 February 2016, Stephen Warren <swarren at wwwdotorg.org
<javascript:_e(%7B%7D,'cvml','swarren at wwwdotorg.org');>> wrote:

> Update rpi-common.h's documentation that describes the rationale for
> choosing various addresses for standardized variables used by boot
> scripts. This comment was correct when written, but not updated when some
> of the values were changed.
>
> Fixes: 14006a567105 ("rpi: set fdt_addr_r to 0x00000100 to match default
> ...device_tree_address")
> Cc: Jonathan Liu <net147 at gmail.com>
> Cc: Daniel Stone <daniels at collabora.com>
> Signed-off-by: Stephen Warren <swarren at wwwdotorg.org>
> ---
>  include/configs/rpi-common.h | 16 +++++++++++-----
>  1 file changed, 11 insertions(+), 5 deletions(-)
>
> diff --git a/include/configs/rpi-common.h b/include/configs/rpi-common.h
> index 72f1e2d60b8f..00a5266dad15 100644
> --- a/include/configs/rpi-common.h
> +++ b/include/configs/rpi-common.h
> @@ -144,8 +144,14 @@
>  /*
>   * Memory layout for where various images get loaded by boot scripts:
>   *
> - * scriptaddr can be pretty much anywhere that doesn't conflict with
> something
> - *   else. Put it low in memory to avoid conflicts.
> + * I suspect address 0 is used as the SMP pen on the RPi2, so avoid this.
> + *
> + * fdt_addr_r simply shouldn't overlap anything else. However, the RPi's
> + *   binary firmware loads a DT to address 0x100, so we choose this
> address to
> + *   match it. This allows custom boot scripts to pass this DT on to Linux
> + *   simply by not over-writing the data at this address. When using
> U-Boot,
> + *   U-Boot (and scripts it executes) typicaly ignore the DT loaded by
> the FW
> + *   and loads its own DT from disk (triggered by boot.scr or
> extlinux.conf).
>   *
>   * pxefile_addr_r can be pretty much anywhere that doesn't conflict with
>   *   something else. Put it low in memory to avoid conflicts.
> @@ -159,11 +165,11 @@
>   *   this up to 16M allows for a sizable kernel to be decompressed below
> the
>   *   compressed load address.
>   *
> - * fdt_addr_r simply shouldn't overlap anything else. Choosing 32M allows
> for
> - *   the compressed kernel to be up to 16M too.
> + * scriptaddr can be pretty much anywhere that doesn't conflict with
> something
> + *   else. Choosing 32M allows for the compressed kernel to be up to 16M.
>   *
>   * ramdisk_addr_r simply shouldn't overlap anything else. Choosing 33M
> allows
> - *   for the FDT/DTB to be up to 1M, which is hopefully plenty.
> + *   for any boot script to be up to 1M, which is hopefully plenty.
>   */
>  #define ENV_MEM_LAYOUT_SETTINGS \
>         "fdt_addr_r=0x00000100\0" \
> --
> 1.9.1
>
>


More information about the U-Boot mailing list