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 <ag...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot