[PATCH] TI: include: env: ti_common: move fdtoverlay_addr_r to fix ramdisk size
Mattijs Korpershoek
mkorpershoek at baylibre.com
Tue Oct 15 12:07:33 CEST 2024
Hi Tom,
On lun., oct. 14, 2024 at 18:02, Tom Rini <trini at konsulko.com> wrote:
> On Fri, Oct 11, 2024 at 05:39:53PM +0200, Mattijs Korpershoek wrote:
>> Hi Judith,
>>
>> Thank you for sending this patch.
>>
>> On jeu., oct. 10, 2024 at 19:03, Judith Mendez <jm at ti.com> wrote:
>>
>> > From: Mattijs Korpershoek <mkorpershoek at baylibre.com>
>> >
>> > When booting Android with adtbo_idx set, we observe the
>> > following crash:
>>
>> In upstream/master, this is no such thing as adtbo_idx.
>>
>> This is only present in TI's U-Boot fork, via commit [1]
>>
>> [1] https://git.ti.com/cgit/ti-u-boot/ti-u-boot/commit/?h=ti-u-boot-2024.04&id=1c6cf852b8b8f869d2c5e39eb071ec3025bf739a
>>
>> >
>> > ** Booting bootflow 'mmc at fa10000.bootdev.whole' with android
>> > ## Booting Android Image at 0x82000000 ...
>> > Kernel load addr 0x92000000 size 20195 KiB
>> > Kernel extra command line: console=ttyS2,115200 cma=768M 8250.
>> > nr_uarts=10 printk.devkmsg=on init=/init quiet firmware_class.
>> > path=/vendor/firmware mem_sleep_default=deep bootconfig
>> > RAM disk load addr 0x88080000 size 16901 KiB
>> > "Synchronous Abort" handler, esr 0x96000005, far 0x155b104c8
>> > elr: 0000000080808560 lr : 0000000080808558 (reloc)
>> > elr: 00000000ffebf560 lr : 00000000ffebf558
>> > x0 : 00000000fff99000 x1 : 00000000fff9553c
>> > x2 : 000000000000000a x3 : 0000000002800000
>> > x4 : 0000000002800000 x5 : 0000000000000020
>> >
>> > This happens because the memory at fdtoverlay_addr_r is bogus.
>> > In fact:
>> >
>> > => printenv fdtoverlay_addr_r
>> > fdtoverlay_addr_r=0x89000000
>> >
>> > And the ramdisk address range is:
>> > [0x88080000; 0x88080000 + 16901 KiB]
>> >
>> > Which is equal to:
>> > [0x88080000; 0x89101400]
>> >
>> > So, if we represent the addresses:
>> > fdtaddr 0x88000000
>> > ramdisk 0x88080000
>> > fdtoverlay_addr_r 0x89000000
>> > ramisk (end) 0x89101400
>> >
>> > We see that fdtoverlay_addr_r in fact has been overridden by
>> > the Android ramdisk.
>> >
>> > The maximum ramdisk size is 0x1080000 (15,5 MiB) and a compressed
>> > Android vendor ramdisk is 15MiB:
>> > $ file vendor_ramdisk.img
>> > vendor_ramdisk.img: LZ4 compressed data (v0.1-v0.9)
>> > $ du -sh vendor_ramdisk.img
>> > 15M vendor_ramdisk.img
>> >
>> > When it gets decompressed, it uses 16.5MiB, exceeding the
>> > maximum ramdisk size.
>> >
>> > Increase the maximum ramdisk size to 20.5MiB by moving
>> > fdtoverlay_addr_r higher up in the address space to fix the crash.
>>
>> I do think that reserving more room between the fdtoverlay_addr_r and
>> the ramdisk address is probably a good idea for Linux as well, but I
>> think that the commit message might need a rewrite ?
>
> Sorry for the slow reply here. This is I think a case where someone
> needs to step back and think about all of the addresses again, and how
> much gap should be between areas, along with just how big some areas can
> grow to be. There should be some upper reasonable bound on overlays, and
> it will be safer long term I believe to have that above the device tree
> and below the ramdisk. Placing things above the ramdisk always results
> in pain as there's always some new larger image for some valid use case.
ACK.
>
> --
> Tom
More information about the U-Boot
mailing list