Only boot 32-bit u-boot from grub, 64 from seabios

For some reason, 32-bit U-Boot only works when executed from
GRUB, but not SeaBIOS; 64-bit U-Boot only works from SeaBIOS!

This will have to be investigated. Standalone U-Boot, where
U-Boot is the primary payload, has not yet been tested in
Libreboot, and will not be provided for some time due to
stability concerns. More testing is needed!

Signed-off-by: Leah Rowe <leah@libreboot.org>
master
Leah Rowe 2024-11-20 01:19:27 +00:00
parent 279e69172f
commit eb14a176bc
4 changed files with 56 additions and 13 deletions

View File

@ -216,24 +216,38 @@ menuentry 'Load test configuration (grubtest.cfg) inside of CBFS [t]' --hotkey=
fi fi
} }
fi fi
if [ -f (cbfsdisk)/img/u-boot ]; then if [ -f (cbfsdisk)/u-boot ]; then
menuentry 'Experimental U-Boot UEFI payload (try from SeaBIOS ESC menu if GRUB fails) [u]' --hotkey='u' { menuentry 'U-Boot i386 payload (experimental) [u]' --hotkey='u' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /img/u-boot chainloader /u-boot
} }
fi fi
if [ -f (cbfsdisk)/seabios.elf ]; then if [ -f (cbfsdisk)/seabios.elf ]; then
menuentry 'Load SeaBIOS (payload) [b]' --hotkey='b' { if [ -f (cbfsdisk)/img/u-boot ]; then
menuentry 'Load SeaBIOS (U-Boot UEFI available in the ESC menu) [b]' --hotkey='b' {
set root='cbfsdisk'
chainloader /seabios.elf
}
else
menuentry 'Load SeaBIOS [b]' --hotkey='b' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /seabios.elf chainloader /seabios.elf
} }
fi fi
fi
if [ -f (cbfsdisk)/img/grub2 ]; then if [ -f (cbfsdisk)/img/grub2 ]; then
if [ -f (cbfsdisk)/img/u-boot ]; then
menuentry 'Return to SeaBIOS (U-Boot UEFI available in the ESC menu) [b]' --hotkey='b' {
set root='cbfsdisk'
chainloader /fallback/payload
}
else
menuentry 'Return to SeaBIOS [b]' --hotkey='b' { menuentry 'Return to SeaBIOS [b]' --hotkey='b' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /fallback/payload chainloader /fallback/payload
} }
fi fi
fi
menuentry 'Poweroff [p]' --hotkey='p' { menuentry 'Poweroff [p]' --hotkey='p' {
halt halt
} }

View File

@ -234,24 +234,38 @@ menuentry 'Load test configuration (grubtest.cfg) inside of CBFS [t]' --hotkey=
fi fi
} }
fi fi
if [ -f (cbfsdisk)/img/u-boot ]; then if [ -f (cbfsdisk)/u-boot ]; then
menuentry 'Experimental U-Boot UEFI payload (try from SeaBIOS ESC menu if GRUB fails) [u]' --hotkey='u' { menuentry 'U-Boot i386 payload (experimental) [u]' --hotkey='u' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /img/u-boot chainloader /u-boot
} }
fi fi
if [ -f (cbfsdisk)/seabios.elf ]; then if [ -f (cbfsdisk)/seabios.elf ]; then
menuentry 'Load SeaBIOS (payload) [b]' --hotkey='b' { if [ -f (cbfsdisk)/img/u-boot ]; then
menuentry 'Load SeaBIOS (U-Boot UEFI available in the ESC menu) [b]' --hotkey='b' {
set root='cbfsdisk'
chainloader /seabios.elf
}
else
menuentry 'Load SeaBIOS [b]' --hotkey='b' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /seabios.elf chainloader /seabios.elf
} }
fi fi
fi
if [ -f (cbfsdisk)/img/grub2 ]; then if [ -f (cbfsdisk)/img/grub2 ]; then
if [ -f (cbfsdisk)/img/u-boot ]; then
menuentry 'Return to SeaBIOS (U-Boot UEFI available in the ESC menu) [b]' --hotkey='b' {
set root='cbfsdisk'
chainloader /fallback/payload
}
else
menuentry 'Return to SeaBIOS [b]' --hotkey='b' { menuentry 'Return to SeaBIOS [b]' --hotkey='b' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /fallback/payload chainloader /fallback/payload
} }
fi fi
fi
menuentry 'Poweroff [p]' --hotkey='p' { menuentry 'Poweroff [p]' --hotkey='p' {
halt halt
} }

View File

@ -235,24 +235,38 @@ menuentry 'Load test configuration (grubtest.cfg) in CBFS [t]' --hotkey='t' {
fi fi
} }
fi fi
if [ -f (cbfsdisk)/img/u-boot ]; then if [ -f (cbfsdisk)/u-boot ]; then
menuentry 'Experimental U-Boot UEFI payload (try from SeaBIOS ESC menu if GRUB fails) [u]' --hotkey='u' { menuentry 'U-Boot i386 payload (experimental) [u]' --hotkey='u' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /img/u-boot chainloader /u-boot
} }
fi fi
if [ -f (cbfsdisk)/seabios.elf ]; then if [ -f (cbfsdisk)/seabios.elf ]; then
menuentry 'Load SeaBIOS (payload) [b]' --hotkey='b' { if [ -f (cbfsdisk)/img/u-boot ]; then
menuentry 'Load SeaBIOS (U-Boot UEFI available in the ESC menu) [b]' --hotkey='b' {
set root='cbfsdisk'
chainloader /seabios.elf
}
else
menuentry 'Load SeaBIOS [b]' --hotkey='b' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /seabios.elf chainloader /seabios.elf
} }
fi fi
fi
if [ -f (cbfsdisk)/img/grub2 ]; then if [ -f (cbfsdisk)/img/grub2 ]; then
if [ -f (cbfsdisk)/img/u-boot ]; then
menuentry 'Return to SeaBIOS (U-Boot UEFI available in the ESC menu) [b]' --hotkey='b' {
set root='cbfsdisk'
chainloader /fallback/payload
}
else
menuentry 'Return to SeaBIOS [b]' --hotkey='b' { menuentry 'Return to SeaBIOS [b]' --hotkey='b' {
set root='cbfsdisk' set root='cbfsdisk'
chainloader /fallback/payload chainloader /fallback/payload
} }
fi fi
fi
menuentry 'Poweroff [p]' --hotkey='p' { menuentry 'Poweroff [p]' --hotkey='p' {
halt halt
} }

View File

@ -187,8 +187,9 @@ add_uboot()
[ "$payload_uboot_amd64" = "y" ]; then [ "$payload_uboot_amd64" = "y" ]; then
ubcbfsargs="-l 0x1110000 -e 0x1110000" # 64-bit and 32-bit ubcbfsargs="-l 0x1110000 -e 0x1110000" # 64-bit and 32-bit
# on 64-bit, 0x1120000 is the SPL, and stub before that # on 64-bit, 0x1120000 is the SPL, and stub before that
ubpath="img/u-boot" ubpath="img/u-boot" # 64-bit
ubtarget="amd64coreboot" ubtarget="amd64coreboot"
[ "$payload_uboot_i386" = "y" ] && ubpath="u-boot" # 32-bit
[ "$payload_uboot_i386" = "y" ] && ubtarget="i386coreboot"; : [ "$payload_uboot_i386" = "y" ] && ubtarget="i386coreboot"; :
fi fi