Subject: [PATCH v3 6/7] bootloader: Add u-boot-starfive-visionfive2-bootloader.

From: Zheng Junjie <[email-masked]>
Date: Sun, 19 May 2024 22:15:30 +0800

* gnu/bootloader/u-boot.scm (u-boot-starfive-visionfive2-bootloader): New variable.

Change-Id: I4b73906fe18d481644102c271f5e0883167b3a50
---
 gnu/bootloader/u-boot.scm | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm
index 8e7cc05191..c5437a7b63 100644
--- a/gnu/bootloader/u-boot.scm
+++ b/gnu/bootloader/u-boot.scm
@@ -49,6 +49,7 @@ (define-module (gnu bootloader u-boot)
             u-boot-rockpro64-rk3399-bootloader
             u-boot-sifive-unmatched-bootloader
             u-boot-qemu-riscv64-bootloader
+            u-boot-starfive-visionfive2-bootloader
             u-boot-ts7970-q-2g-1000mhz-c-bootloader
             u-boot-wandboard-bootloader))
 
@@ -159,6 +160,27 @@ (define install-sifive-unmatched-u-boot
         (write-file-on-device u-boot (stat:size (stat u-boot))
                               image (* 2082 512)))))
 
+(define install-starfive-visionfive2-u-boot
+  #~(lambda (bootloader root-index image)
+      (let ((spl (string-append
+                  bootloader "/libexec/spl/u-boot-spl.bin.normal.out"))
+            (u-boot (string-append bootloader "/libexec/u-boot.itb")))
+        (write-file-on-device spl (stat:size (stat spl))
+                              image (* 34 512))
+        (write-file-on-device u-boot (stat:size (stat u-boot))
+                              image (* 2082 512)))))
+
+(define install-starfive-visionfive2-uEnv.txt
+  #~(lambda (bootloader device mount-point)
+      (mkdir-p (string-append mount-point "/boot"))
+      (call-with-output-file (string-append mount-point "/boot/uEnv.txt")
+        (lambda (port)
+          (format port
+                  ;; if board SPI use vender's u-boot, will find
+                  ;; ""starfive/starfive_visionfive2.dtb"", We cannot guarantee
+                  ;; that users will update this u-boot, so set it.
+                  "fdtfile=starfive/jh7110-starfive-visionfive-2-v1.3b.dtb~%")))))
+
 (define install-qemu-riscv64-u-boot
   #~(lambda (bootloader device mount-point)
       (let ((u-boot.bin (string-append bootloader "/libexec/u-boot.bin"))
@@ -316,6 +338,13 @@ (define u-boot-sifive-unmatched-bootloader
    (package u-boot-sifive-unmatched)
    (disk-image-installer install-sifive-unmatched-u-boot)))
 
+(define u-boot-starfive-visionfive2-bootloader
+  (bootloader
+   (inherit u-boot-bootloader)
+   (package u-boot-starfive-visionfive2)
+   (installer install-starfive-visionfive2-uEnv.txt)
+   (disk-image-installer install-starfive-visionfive2-u-boot)))
+
 (define u-boot-qemu-riscv64-bootloader
   (bootloader
    (inherit u-boot-bootloader)
-- 
2.41.0