From c382c3862bb3e4e6874c837fb2a090532d32a569 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Fri, 7 Dec 2018 18:46:22 +0000
Subject: [PATCH] Preparation for possible future rockchip images

---
 src/freedombone-image-hardware-setup | 67 ++++++++++++++++++++++++++++
 src/freedombone-image-make           | 15 ++++++-
 src/freedombone-image-makefile       |  8 ++++
 3 files changed, 89 insertions(+), 1 deletion(-)

diff --git a/src/freedombone-image-hardware-setup b/src/freedombone-image-hardware-setup
index a594cd1de..1b1dd6eaa 100755
--- a/src/freedombone-image-hardware-setup
+++ b/src/freedombone-image-hardware-setup
@@ -243,6 +243,69 @@ setup_flash_kernel() {
     $INSTALL_PACKAGES flash-kernel
 }
 
+rockchip_setup_boot() {
+    dtb="$1"
+    rockchip_root_device='mmcblk0p2'
+    if [ "$2" ]; then
+        rockchip_root_device="$2"
+    fi
+
+    # Setup boot.cmd
+    if grep -q btrfs /etc/fstab ; then
+        fstype=btrfs
+    else
+        fstype=ext4
+    fi
+    # shellcheck disable=SC2012,SC2086
+    kernelVersion=$(ls /usr/lib/*/$dtb | head -1 | cut -d/ -f4)
+    version=$(echo "$kernelVersion" | sed 's/linux-image-\(.*\)/\1/')
+    initRd=initrd.img-$version
+    vmlinuz=vmlinuz-$version
+
+    # Create boot.cmd
+    cat >> /boot/boot.cmd <<EOF
+setenv mmcdev 0
+setenv mmcpart 1
+
+setenv mmcroot /dev/${rockchip_root_device} ro
+setenv mmcrootfstype $fstype rootwait fixrtc
+setenv mmcrootflags subvol=@
+
+setenv console ttyS0,115200n8
+
+setenv kernel_file $vmlinuz
+setenv initrd_file $initRd
+setenv fdtfile $dtb
+
+setenv loadaddr 0x46000000
+setenv initrd_addr 0x48000000
+setenv fdtaddr 0x47000000
+
+setenv initrd_high 0xffffffff
+setenv fdt_high 0xffffffff
+
+setenv loadkernel load mmc \${mmcdev}:\${mmcpart} \${loadaddr} \${kernel_file}
+setenv loadinitrd load mmc \${mmcdev}:\${mmcpart} \${initrd_addr} \${initrd_file}\\; setenv initrd_size \\\${filesize}
+setenv loadfdt load mmc \${mmcdev}:\${mmcpart} \${fdtaddr} /dtbs/\${fdtfile}
+
+setenv loadfiles run loadkernel\\; run loadinitrd\\; run loadfdt
+setenv mmcargs setenv bootargs init=/lib/systemd/systemd console=\${console} root=\${mmcroot} rootfstype=\${mmcrootfstype} rootflags=\${mmcrootflags} ifnames=0 slub_debug=FZP slab_nomerge page_poison=1
+
+run loadfiles; run mmcargs; bootz \${loadaddr} \${initrd_addr}:\${initrd_size} \${fdtaddr}
+EOF
+
+    # boot.scr for rockchip based device
+    mkimage -C none -A arm64 -T script -d /boot/boot.cmd /boot/boot.scr
+
+    # Copy all DTBs
+    mkdir -p /boot/dtbs
+    # shellcheck disable=SC2086
+    cp /usr/lib/$kernelVersion/* /boot/dtbs
+
+    # extra boot modules
+    { echo "vfat"; } >> /etc/initramfs-tools/modules
+}
+
 case "$MACHINE" in
     beagleboneblack)
         beaglebone_setup_boot am335x-boneblack
@@ -290,4 +353,8 @@ case "$MACHINE" in
         a20_setup_boot sun7i-a20-pcduino3.dtb "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
+    rock64)
+        rockchip_setup_boot "rockchip/rk3328-rock64.dtb" "$EXTERNAL_DRIVE"
+        enable_serial_console ttyS0
+        ;;
 esac
diff --git a/src/freedombone-image-make b/src/freedombone-image-make
index a8d589fd7..36f9bb80a 100755
--- a/src/freedombone-image-make
+++ b/src/freedombone-image-make
@@ -99,7 +99,7 @@ logrotate kmod netbase rsyslog udev debian-archive-keyring"
 beaglebone_pkgs="linux-image-armmp u-boot-tools u-boot"
 
 # Packages needed on rockchip boards (maybe in future debian versions)
-#rockchip_pkgs="linux-image-arm64 u-boot-tools u-boot u-boot-rockchip"
+rockchip_pkgs="linux-image-arm64 u-boot-tools u-boot u-boot-rockchip"
 
 # Packages needed on the Allwinner A20 devices:
 a20_pkgs="linux-image-armmp-lpae u-boot-tools u-boot u-boot-sunxi"
@@ -160,6 +160,19 @@ case "$MACHINE" in
  --no-extlinux \
  --foreign /usr/bin/qemu-arm-static \
  --roottype btrfs \
+"
+        ;;
+    rock64)
+        extra_pkgs="$rockchip_pkgs"
+        extra_opts="\
+ --variant minbase \
+ --bootoffset=1mib \
+ --bootsize 128M \
+ --boottype vfat \
+ --no-kernel \
+ --no-extlinux \
+ --foreign /usr/bin/qemu-arm-static \
+ --roottype btrfs \
 "
         ;;
     qemu)
diff --git a/src/freedombone-image-makefile b/src/freedombone-image-makefile
index aba3e26d6..f8f8558ea 100755
--- a/src/freedombone-image-makefile
+++ b/src/freedombone-image-makefile
@@ -108,6 +108,14 @@ beaglex15: prep
 	@echo ""
 	@echo "Build complete."
 
+rock64: prep
+	$(eval ARCHITECTURE = arm64)
+	$(eval MACHINE = rock64)
+	$(MAKE_IMAGE)
+	@rm -f $(ARCHIVE)
+	@echo ""
+	@echo "Build complete."
+
 # build Cubieboard2 SD card image
 cubieboard2: prep
 	$(eval ARCHITECTURE = armhf)
-- 
GitLab