On Mon, 29 Oct 2018 12:55:53 +0100 Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> wrote: > > diff --git a/arch/arm/lib32/bootm.c b/arch/arm/lib32/bootm.c > > index 4cf570e57..42febdc71 100644 > > --- a/arch/arm/lib32/bootm.c > > +++ b/arch/arm/lib32/bootm.c > > @@ -121,6 +121,12 @@ static int get_kernel_addresses(size_t > > image_size, spacing += image_decomp_size; > > } > > > > + if ((*load_address - mem_start) > SZ_128M) { > > + printf("boot aborted: kernel address outside > > 128MiB " > > + "(0x%08lx)\n", *load_address); > > + return -ENOMEM; > > + } > > This is a bit harsh. The 128MiB problem only exists with > CONFIG_AUTO_ZRELADDR enabled in the kernel, otherwise it's fine to > put the kernel above that limit. My patch was also a test-balloon for me to learn. Instead of returning maybe a warning could be emitted - maybe in verbose mode only? Hmm, no not in only-verbose-mode, because it my case it silently didn't work, whereas with an error/warning I would have immediately understood what's wrong. > We only put the kernel above the 128MiB limit because we want to find > a place where the kernel doesn't have to move itself around in order > to not overwrite itself during decompression. > > Could we instead just use 128MiB as an upper limit to put the kernel > to? Would that mean the maximum address is (always): load_address = mem_end > SZ_128M ? mem_start + SZ_128M : end_of_ram; load_address -= image_size + 1MiB_margin_for_dtb; or is it only the start_address which has to be inside the first 128MB? regards, -- Patrick. _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox