[haiku-commits] Change in haiku[master]: u-boot/arm: Break script out of Jamfile. Add EFI support.

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Sun, 28 Jun 2020 19:16:13 +0000

From Alex von Gluck IV <kallisti5@xxxxxxxxxxx>:

Alex von Gluck IV has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/2963 ;)


Change subject: u-boot/arm: Break script out of Jamfile. Add EFI support.
......................................................................

u-boot/arm: Break script out of Jamfile. Add EFI support.

* boot.scr was growing past Jam MAXLINE and was causing segfaults
* Break out to tree, data/boot could be used for other arches
* boot.scr is getting a bit complex, but supports the old
  u-boot haiku_loader, as well as u-boot starting our EFI loader.

Change-Id: I93a3167ab0bc78747c1d70fedd08595e9ac89662
---
M build/jam/ArchitectureRules
A data/boot/u-boot/boot-arm.scr.txt
M src/system/boot/Jamfile
3 files changed, 36 insertions(+), 32 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/63/2963/1

diff --git a/build/jam/ArchitectureRules b/build/jam/ArchitectureRules
index 6522c59..dd29391 100644
--- a/build/jam/ArchitectureRules
+++ b/build/jam/ArchitectureRules
@@ -256,25 +256,6 @@
                        HAIKU_BOOT_ARCHIVE_IMAGE_OFFSET = 192 ; # in kB - 
unused yet
                        HAIKU_BOOT_LOADER_BASE ?= 0x1000000 ;

-                       # Modern u-boot fill in sane addresses for us.
-                       # Leverage the built-in fdt dtb for this board, unless 
a custom dtb is specified in uEnv.txt
-                       # We skip uEnv.txt on virtio due to an unknown lockup 
in qemu around it.
-                       HAIKU_MMC_UBOOT_SCRIPT = "\
-                               echo \"Haiku u-boot script entry\" \
-                               test -e mmc 0 haiku_loader.ub && setenv media 
mmc \
-                               test -e virtio 0 haiku_loader.ub && setenv 
media virtio \
-                               test -e nvme 0 haiku_loader.ub && setenv media 
nvme \
-                               env exists media && echo \"Found Haiku on 
${media} 0!\" \
-                               env exists media || echo \"ERROR: Unable to 
locate Haiku loader on any media!\" && exit \
-                               test ${media} != virtio && test -e ${media} 0 
uEnv.txt && fatload ${media} 0 ${scriptaddr} uEnv.txt && env import -t 
${scriptaddr} ${filesize} \
-                               echo \"Loading haiku_loader...\" \
-                               fatload ${media} 0 ${kernel_addr_r} 
haiku_loader.ub \
-                               echo \"Loading haiku_floppyboot...\" \
-                               fatload ${media} 0 ${ramdisk_addr_r} 
haiku_floppyboot.ub \
-                               env exists dtb && echo \"Loading DTB...\" && 
fatload ${media} 0 ${fdt_addr_r} ${dtb} && fdt addr ${fdt_addr_r} && bootm 
${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} \
-                               echo \"Booting Haiku!\" \
-                               fdt addr ${fdtcontroladdr} && bootm 
${kernel_addr_r} ${ramdisk_addr_r} ${fdtcontroladdr}" ;
-
                case arm64 :
                        HAIKU_KERNEL_PLATFORM ?= efi ;

diff --git a/data/boot/u-boot/boot-arm.scr.txt 
b/data/boot/u-boot/boot-arm.scr.txt
new file mode 100644
index 0000000..178d152
--- /dev/null
+++ b/data/boot/u-boot/boot-arm.scr.txt
@@ -0,0 +1,19 @@
+echo "Haiku u-boot script entry"
+test -e mmc 0 uEnv.txt && setenv media mmc
+test -e virtio 0 uEnv.txt && setenv media virtio
+test -e nvme 0 uEnv.txt && setenv media nvme
+env exists media || echo "ERROR: Unable to locate uEnv.txt on any known 
media!" && exit
+test -e ${media} 0 uEnv.txt && fatload ${media} 0 ${scriptaddr} uEnv.txt && 
env import -t ${scriptaddr} ${filesize}
+env exists loader || echo "ERROR: uEnv.txt doesn't specify bootloader!" && exit
+env exists platform || echo "ERROR: uEnv.txt doesn't specify platform!" && exit
+echo "uEnv.txt says to look for ${platform} bootloader named ${loader} on 
${media} 0!"
+test -e ${media} 0 ${loader} && echo "Found ${loader} on ${media} 0!"
+echo "Loading bootloader..."
+fatload ${media} 0 ${kernel_addr_r} ${loader}
+test -e ${media} 0 haiku_floppyboot.ub && fatload ${media} 0 ${ramdisk_addr_r} 
haiku_floppyboot.ub
+env exists dtb && echo "Using custom DTB..." && fatload ${media} 0 
${fdt_addr_r} ${dtb} && fdt addr ${fdt_addr_r}
+env exists dtb || echo "Using internal DTB..." && fdt addr ${fdtcontroladdr}
+test "${platform}" = "efi" && echo "Launching EFI loader..." && bootefi 
${kernel_addr_r}
+test "${platform}" = "u-boot" && env exists dtb && echo "Launching ub 
loader..." && bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdtcontroladdr}
+test "${platform}" = "u-boot" && env exists dtb || echo "Launching ub loader 
(w/custom fdt)..." && bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
+echo "Haiku u-boot script fell through!" && exit
diff --git a/src/system/boot/Jamfile b/src/system/boot/Jamfile
index e26fb3f..374f288 100644
--- a/src/system/boot/Jamfile
+++ b/src/system/boot/Jamfile
@@ -141,22 +141,23 @@
     mkimage $(MKIMAGE_ARGS) -d $(>:J=$(colon)) $(<)
 }

-rule BuildUImageScript script : content
+#
+# Given a txt, generate a binary u-boot script
+#
+rule BuildUImageScript script : source
 {
-    LocalClean clean : $(script) ;
-    SCRIPTCONTENT on $(script) = $(content) ;
-    SCRIPTNAME on $(script) = $(script) ;
-    FAKEOS on $(script) = "linux" ;
-    BuildUImageScript1 $(script) : $(content) ;
+       Depends $(script) : $(source) ;
+       LocalClean clean : $(script) ;
+       SCRIPTNAME on $(script) = $(script) ;
+       FAKEOS on $(script) = "linux" ;
+       BuildUImageScript1 $(script) : $(source) ;
 }

 actions BuildUImageScript1
 {
-    rm -f $(<) $(<).txt
-    echo '$(SCRIPTCONTENT)' > $(<).txt
-    mkimage -A $(TARGET_ARCH) -O $(FAKEOS) -T script -C none -n $(SCRIPTNAME) \
-        -d $(<).txt $(<)
-    rm -f $(<).txt
+       rm -f $(1)
+       mkimage -A $(TARGET_ARCH) -O $(FAKEOS) -T script -C none -n 
$(SCRIPTNAME) \
+               -d $(2) $(1)
 }

 # the bootsector on haiku_loader.amiga_m68k must be checksummed
@@ -318,10 +319,12 @@
                        case efi :
                                BuildEFILoader 
haiku_loader.$(TARGET_BOOT_PLATFORM) : boot_loader_$(TARGET_BOOT_PLATFORM) ;
                                if $(TARGET_ARCH) = arm || $(TARGET_ARCH) = 
arm64 {
+                                       # These platforms sometimes need u-boot 
to get them going
                                        BuildUImage 
haiku-floppyboot.tgz.$(TARGET_BOOT_PLATFORM) : haiku-floppyboot.tgz :
                                                -A $(TARGET_ARCH) -O linux -T 
ramdisk -C none
                                                -n 'Haiku $(TARGET_KERNEL_ARCH) 
floppyboot' ;
-                                       BuildUImageScript boot.scr : 
$(HAIKU_MMC_UBOOT_SCRIPT) ;
+                                       BuildUImageScript boot.scr
+                                               : [ FDirName $(HAIKU_TOP) data 
boot u-boot boot-$(TARGET_ARCH).scr.txt ] ;
                                }

                        case bios_ia32 :
@@ -343,7 +346,8 @@
                                BuildUImage 
haiku-floppyboot.tgz.$(TARGET_BOOT_PLATFORM) : haiku-floppyboot.tgz :
                                        -A $(TARGET_ARCH) -O linux -T ramdisk 
-C none
                                        -n 'Haiku $(TARGET_KERNEL_ARCH) 
floppyboot' ;
-                               BuildUImageScript boot.scr : 
$(HAIKU_MMC_UBOOT_SCRIPT) ;
+                               BuildUImageScript boot.scr
+                                       : [ FDirName $(HAIKU_TOP) data boot 
u-boot boot-$(TARGET_ARCH).scr.txt ] ;

                        case amiga_m68k :
                                BuildBiosLoader 
haiku_loader.$(TARGET_BOOT_PLATFORM) : boot_loader_$(TARGET_BOOT_PLATFORM) ;

--
To view, visit https://review.haiku-os.org/c/haiku/+/2963
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I93a3167ab0bc78747c1d70fedd08595e9ac89662
Gerrit-Change-Number: 2963
Gerrit-PatchSet: 1
Gerrit-Owner: Alex von Gluck IV <kallisti5@xxxxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: u-boot/arm: Break script out of Jamfile. Add EFI support. - Gerrit