[U-Boot] [PATCH] tools: zynqmpbif: Add support for load=after
Michal Simek
michal.simek at xilinx.com
Thu Apr 26 16:33:11 UTC 2018
On 26.4.2018 13:37, Alexander Graf wrote:
> Some times it's handy to have a partition loaded immediately after
> the end of the previous blob. The most obvious example for this is
> a U-Boot binary (coming from .elf) and a device tree file.
>
> This patch adds that logic. With this, the following bif snippet
> does what you would expect:
>
> [destination_cpu=a5x-0, exception_level=el-2] u-boot.elf
> [load=after] u-boot.dtb
>
> converts to
>
> FSBL payload on CPU a5x-0 (PS):
> Offset : 0x00590500
> Size : 577768 (0x8d0e8) bytes
> Load : 0x08000000
> Attributes : EL2
> Checksum : 0xefca2cad
> FSBL payload on CPU none (PS):
> Offset : 0x0061d640
> Size : 129760 (0x1fae0) bytes
> Load : 0x0808d0e8 (entry=0x00000000)
> Attributes : EL3
> Checksum : 0xf7dd3d49
>
> Signed-off-by: Alexander Graf <agraf at suse.de>
> ---
> tools/zynqmpbif.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/tools/zynqmpbif.c b/tools/zynqmpbif.c
> index 6c8f66055d..47c233c15f 100644
> --- a/tools/zynqmpbif.c
> +++ b/tools/zynqmpbif.c
> @@ -42,6 +42,7 @@ enum bif_flag {
> BIF_FLAG_PUF_FILE,
> BIF_FLAG_AARCH32,
> BIF_FLAG_PART_OWNER_UBOOT,
> + BIF_FLAG_LOAD_AFTER,
>
> /* Internal flags */
> BIF_FLAG_BIT_FILE,
> @@ -151,6 +152,11 @@ static char *parse_load(char *line, struct bif_entry *bf)
> {
> char *endptr;
>
> + if (!strncmp(line, "after", strlen("after"))) {
> + bf->flags |= (1ULL << BIF_FLAG_LOAD_AFTER);
> + return line + strlen("after");
> + }
> +
> bf->load = strtoll(line, &endptr, 0);
>
> return endptr;
> @@ -336,6 +342,15 @@ static int bif_add_part(struct bif_entry *bf, const char *data, size_t len)
> if (r)
> return r;
>
> + if (bf->flags & (1ULL << BIF_FLAG_LOAD_AFTER) &&
> + bif_output.last_part) {
> + struct partition_header *p = bif_output.last_part;
> + uint64_t load = le64_to_cpu(p->load_address);
> +
> + load += le32_to_cpu(p->len) * 4;
> + parthdr.load_address = cpu_to_le64(load);
> + }
> +
> parthdr.offset = cpu_to_le32(bf->offset / 4);
>
> if (bf->flags & (1ULL << BIF_FLAG_BOOTLOADER)) {
>
As we have discussed over IRC this is out of current bif supported
options and load option with OF_SEPARATE/OF_BOARD should be used instead.
Some platforms are using CONFIG_SYS_FDT_BASE for that.
Generic solution for that would be good because right now is fdt_blob is
at &_end.
At least like this.
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index 320ee1dc56b3..4262ac0677d3 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -1292,8 +1292,12 @@ __weak void *board_fdt_blob_setup(void)
else
fdt_blob = (ulong *)&__bss_end;
#else
+#ifndef CONFIG_SYS_FDT_BASE
/* FDT is at end of image */
fdt_blob = (ulong *)&_end;
+#else
+ fdt_blob = CONFIG_SYS_FDT_BASE;
+#endif
#endif
return fdt_blob;
}
Thanks,
Michal
More information about the U-Boot
mailing list