[U-Boot] One u-boot.bin for Raspberry PI 3 and 4 - possible?
Matthias Brugger
matthias.bgg at gmail.com
Fri Sep 27 11:49:59 UTC 2019
Hi Geoff,
On 27/09/2019 04:16, Geoff Williams wrote:
> Hi List,
>
> TLDR: As subject
>
> I've been following Alexander Graf's uEFI+grub2 presentation on Raspberry PI[1].
> I have it working on PI 3 and 4 and its great but I need to re-compile u-boot
> for each board which means lots of images.
>
> I would like create a single image to boot grub on PI 3 and 4.
>
> I did my own investigation but hit a wall. In board/raspberrypi/rpi/rpi.c there
> is a #IFNDEF..#ELSE around the definition of bcm283x_mem_map which selects a
> different memory layout to expose as extern struct mem_map for PI 4 vs anything
> else.
>
> I did some hacking to expose two mem_map extern structs and pick the right one
> at runtime[2]. Of course this experiment is horrible and breaks all other
> boards:
>
> board/raspberrypi/rpi/rpi.c
> static uint32_t rev_type;// = 0x11;
>
> struct mm_region *mem_map_b = other_bcm283x_mem_map; /* other PIs */
> struct mm_region *mem_map_a = bcm2711_bcm283x_mem_map; /* PI 4 */
>
> uint32_t get_rpi_hw_ref(void) {
> /* doesn't work get_board_rev(); */
> return rev_type;
> }
>
> arch/arm/cpu/armv8/cache_v8.c
> /* before every use of mem_map... */
>
> /* nasty hack */
> struct mm_region *mem_map;
> if (get_rpi_hw_ref() == 0x11) {
> mem_map = mem_map_a;
> } else {
> mem_map = mem_map_b;
> }
>
> rev_type gets set by get_board_rev() but I don't believe this function has been
> called before mem_map is used[3] so my hack always chooses the else branch.
>
> I'm new to bootloader programming and waiting for a serial cable to arrive so am
> working blind but I suspect I'm up against some kind of chicken and egg problem
> where the memory map needs to be set before the board revision can be extracted
> using the mailbox driver, is anyone able to confirm this or suggest another
> approach?
>
> My dream is to be able to compile a single u-boot.bin compiled as armv8-a and be
> able to boot any Raspberry PI 3/4 to grub2 from it. Is this realistic?
>
Yes it is. I was working on this the last weeks and just posted the patches
today. Would be nice if you could test and provide feedback :)
You can find the patch series here:
https://patchwork.ozlabs.org/cover/1168351/
Regards,
Matthias
> Cheers,
> Geoff
>
>
> [1] https://www.youtube.com/watch?v=bNL1pd-rwCU
> [2] https://github.com/GeoffWilliams/u-boot/tree/nasty
> [3] If I initialise rev_type as 0x11 then it works on Raspberry PI 4 but if its
> commented boot fails with rainbow screen which tells me that rev_type wasn't
> assigned (or didn't contain 0x11...?) before mem_map was used.
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> https://lists.denx.de/listinfo/u-boot
>
More information about the U-Boot
mailing list