[U-Boot] [RFC 03/22] thunderx: add FDT support
Alexander Graf
agraf at csgraf.de
Sun Feb 24 16:39:59 UTC 2019
On 22.02.19 19:03, Tim Harvey wrote:
> The thunderx boards use the Cavium Bringup and Diagnostics Kit (BDK) as a
> secondary program loader (SPL). This initial boot firmware loads the
> device-tree and passes it to the next layer of software in X1.
>
> Signed-off-by: Tim Harvey <tharvey at gateworks.com>
In the long run we maybe want to standardize on CONFIG_OF_PRIOR_STAGE
for aarch64 as well and then move rpi as well as this target over to it.
But for now, I think this solution is very reasonable.
> ---
> arch/arm/mach-thunderx/Makefile | 2 +-
> arch/arm/mach-thunderx/fdt.c | 50 ++++++++++++++++++++++++++
> arch/arm/mach-thunderx/lowlevel_init.S | 31 ++++++++++++++++
> board/cavium/thunderx/thunderx.c | 12 +++++--
> 4 files changed, 92 insertions(+), 3 deletions(-)
> create mode 100644 arch/arm/mach-thunderx/fdt.c
> create mode 100644 arch/arm/mach-thunderx/lowlevel_init.S
>
> diff --git a/arch/arm/mach-thunderx/Makefile b/arch/arm/mach-thunderx/Makefile
> index 34b6ecc2f9..fb457cb3e0 100644
> --- a/arch/arm/mach-thunderx/Makefile
> +++ b/arch/arm/mach-thunderx/Makefile
> @@ -1,2 +1,2 @@
> # SPDX-License-Identifier: GPL-2.0+
> -obj-y := atf.o
> +obj-y := atf.o lowlevel_init.o fdt.o
> diff --git a/arch/arm/mach-thunderx/fdt.c b/arch/arm/mach-thunderx/fdt.c
> new file mode 100644
> index 0000000000..31f1128e9f
> --- /dev/null
> +++ b/arch/arm/mach-thunderx/fdt.c
> @@ -0,0 +1,50 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/**
> + * Copyright (C) 2014, Cavium Inc.
> + */
> +
> +#include <common.h>
> +#include <malloc.h>
> +#include <errno.h>
> +#include <environment.h>
> +#include <fdtdec.h>
> +
> +/* From lowlevel_init.S */
> +extern unsigned long fdt_base_addr;
> +
> +/**
> + * If the firmware passed a device tree use it for U-Boot
> + *
> + * @return FDT base address received from ATF in x1 register
> + */
> +void *board_fdt_blob_setup(void)
> +{
> + if (fdt_magic(fdt_base_addr) != FDT_MAGIC)
> + return NULL;
> + return (void *)fdt_base_addr;
> +}
> +
> +int ft_board_setup(void *blob, bd_t *bd)
> +{
> + int offset;
> + int ret = 0;
> +
> + debug("%s\n", __func__);
> + ret = fdt_check_header(blob);
> + if (ret < 0) {
> + printf("ERROR: %s\n", fdt_strerror(ret));
> + return ret;
> + }
> +
> + /* remove "cavium, bdk" node from DT */
> + if (blob) {
> + offset = fdt_path_offset(blob, "/cavium,bdk");
> + if(offset >= 0) {
> + ret = fdt_del_node(blob, offset);
> + debug("%s deleted 'cavium,bdk' node\n", __func__);
Why remove it?
Alex
More information about the U-Boot
mailing list