From e8ea6335d5b5581a8e5115ef16852c6d6be15012 Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Tue, 12 Jul 2022 10:45:53 +0200 Subject: [PATCH 1/4] riscv: Add support to build LicheeRV Dock images The LicheeRV Dock board comes with only 512MB of DRAM so the only difference with a Nezha image is the fact that we have to remove cryptsetup-initramfs package which makes the initrd too big for the board to boot. Signed-off-by: Alexandre Ghiti --- live-build/auto/config | 4 +-- .../hooks.d/base/disk-image-uefi.binary | 28 +++++++++++++------ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/live-build/auto/config b/live-build/auto/config index 3a59cd89..e3593824 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -352,7 +352,7 @@ fi # one also must request disk1-img-xz image format if [ "$IMAGEFORMAT" = "ext4" ] && [ "$PROJECT" = "ubuntu-cpc" ]; then case $ARCH:$SUBARCH in - armhf:raspi2|riscv64:sifive_*|riscv64:nezha|riscv64:visionfive|*:generic) + armhf:raspi2|riscv64:sifive_*|riscv64:nezha|riscv64:visionfive|riscv64:licheerv|*:generic) IMAGE_HAS_HARDCODED_PASSWORD=1 if [ -z "${IMAGE_TARGETS:-}" ]; then export IMAGE_TARGETS="disk1-img-xz" @@ -976,7 +976,7 @@ case $PROJECT in riscv64*) if [ -n "$SUBARCH" ]; then case "${SUBARCH:-}" in - nezha) + nezha|licheerv) KERNEL_FLAVOURS=allwinner ;; visionfive) diff --git a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary index e0983b0f..b9cb4d14 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary @@ -77,8 +77,8 @@ create_partitions() { --typecode=15:ef00 \ --new=1:: \ --attributes=1:set:2 - elif [ "${SUBARCH:-}" = "nezha" ]; then - # Nezha D1 board + elif [ "${SUBARCH:-}" = "nezha" ] || [ "${SUBARCH:-}" = "licheerv" ]; then + # Nezha/LicheeRV D1 boards sgdisk "${disk_image}" \ --set-alignment=2 \ --new=13:256:25575 \ @@ -227,25 +227,35 @@ install_grub() { if [ -n "${SUBARCH:-}" ]; then # Per-device images case "${SUBARCH}" in - "nezha") - echo "Installing U-Boot for Nezha board" &1>2 + "nezha"|"licheerv") + echo "Installing U-Boot for ${SUBARCH} board" &1>2 # flash-kernel is needed to install the dtb for update-grub: it uses the # /proc/device-tree/model value to pick the correct dtb and as we are in a chroot, # the model value is wrong and we need to use /etc/flash-kernel/machine instead. # This explains why we install flash-kernel here. chroot mountpoint mkdir -p /etc/flash-kernel/ - chroot mountpoint bash -c "echo 'Allwinner D1 Nezha' > /etc/flash-kernel/machine" + if [ "$SUBARCH" = "nezha" ]; then + chroot mountpoint bash -c "echo 'Allwinner D1 Nezha' > /etc/flash-kernel/machine" + elif [ "$SUBARCH" = "licheerv" ]; then + chroot mountpoint bash -c "echo 'Sipeed Lichee RV Dock' > /etc/flash-kernel/machine" + # cryptsetup-initramfs is a large contributor of the initrd size: we have to + # remove it for the LicheeRV board, otherwise it fails to boot. cryptsetup-initramfs + # needs to embed plymouth (and then the drm/gpu stuff) for interacting with the user + # to decrypt the rootfs (passphrase key). + chroot mountpoint bash -c "apt remove -qqy cryptsetup-initramfs" + fi chroot mountpoint bash -c 'FK_FORCE=yes apt-get install -qqy grub-efi-riscv64 flash-kernel' efi_target=riscv64-efi + # nezha-boot0 is actually compatible with the LicheeRV boards (and probably other D1-based boards) chroot mountpoint apt-get install -qqy nezha-boot0 # FSBL, which gets U-Boot SPL loader1="/dev/mapper${loop_device///dev/}p13" dd if=mountpoint/usr/lib/u-boot/nezha/boot0_sdcard_sun20iw1p1.bin of=$loader1 # The real U-Boot - chroot mountpoint apt-get install -qqy u-boot-nezha + chroot mountpoint apt-get install -qqy u-boot-${SUBARCH} loader2="/dev/mapper${loop_device///dev/}p14" - dd if=mountpoint/usr/lib/u-boot/nezha/u-boot.toc1 of=$loader2 + dd if=mountpoint/usr/lib/u-boot/${SUBARCH}/u-boot.toc1 of=$loader2 # Provide end-user modifyable CIDATA cidata_dev="/dev/mapper${loop_device///dev/}p12" setup_cidata "${cidata_dev}" @@ -254,7 +264,7 @@ install_grub() { # without a cloud datasource. setup_cinocloud mountpoint - # u-boot-nezha will boot using UEFI if it does not find + # u-boot-${SUBARCH} will boot using UEFI if it does not find # any extlinux.conf or boot.scr: but flash-kernel will # install a boot.scr if it believes it did not boot in # EFI mode, so make sure we don't leave a boot.scr @@ -340,7 +350,7 @@ EOF chroot mountpoint u-boot-update fi - if [ "${SUBARCH:-}" != "visionfive" ] && [ "${SUBARCH:-}" != "nezha" ]; then + if [ "${SUBARCH:-}" != "visionfive" ] && [ "${SUBARCH:-}" != "nezha" ] && [ "${SUBARCH:-}" != "licheerv" ]; then ## TODO remove below once we have grub-efi-riscv64 for the platforms rm mountpoint/tmp/device.map umount mountpoint/boot/efi From d5a7d6655f2fa653c8bc0f316613f37f58a9c2cc Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Mon, 5 Sep 2022 11:16:26 +0200 Subject: [PATCH 2/4] riscv: Install Wifi driver by default for the LicheeRV Signed-off-by: Alexandre Ghiti --- live-build/auto/config | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/live-build/auto/config b/live-build/auto/config index e3593824..b494f169 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -1116,6 +1116,11 @@ case "$ARCH${SUBARCH:++$SUBARCH}" in BINARY_REMOVE_LINUX=false ;; riscv*+*) + if [ "${SUBARCH:-}" = "licheerv" ]; then + # The wifi driver of the licheerv is an out-of-tree driver so install + # the corresponding dkms driver. + add_package install licheerv-rtl8723ds-dkms + fi # We'll add wpasupplicant to the seeds when we work on RISC-V seeds. add_package install wpasupplicant ;; From f68433098d6a25105a02db26bc377f5e0b516820 Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Tue, 30 Aug 2022 14:59:28 +0200 Subject: [PATCH 3/4] riscv: Add support to build Microchip Icicle Kit image Signed-off-by: Alexandre Ghiti --- live-build/auto/config | 2 +- .../hooks.d/base/disk-image-uefi.binary | 45 ++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/live-build/auto/config b/live-build/auto/config index b494f169..cecb0315 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -352,7 +352,7 @@ fi # one also must request disk1-img-xz image format if [ "$IMAGEFORMAT" = "ext4" ] && [ "$PROJECT" = "ubuntu-cpc" ]; then case $ARCH:$SUBARCH in - armhf:raspi2|riscv64:sifive_*|riscv64:nezha|riscv64:visionfive|riscv64:licheerv|*:generic) + armhf:raspi2|riscv64:sifive_*|riscv64:nezha|riscv64:visionfive|riscv64:licheerv|riscv64:icicle|*:generic) IMAGE_HAS_HARDCODED_PASSWORD=1 if [ -z "${IMAGE_TARGETS:-}" ]; then export IMAGE_TARGETS="disk1-img-xz" diff --git a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary index b9cb4d14..5fe18325 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary @@ -97,6 +97,20 @@ create_partitions() { --change-name=12:CIDATA \ --new=1:: \ --attributes=1:set:2 + elif [ "${SUBARCH:-}" = "icicle" ]; then + # Microchip Icicle Kit + sgdisk "${disk_image}" \ + --set-alignment=2 \ + --new=13:256:25575 \ + --change-name=13:loader \ + --typecode=13:ef02 \ + --new=15::+106M \ + --typecode=15:ef00 \ + --change-name=15:ESP \ + --new=12::+4M \ + --change-name=12:CIDATA \ + --new=1:: \ + --attributes=1:set:2 elif [ "${SUBARCH:-}" = "visionfive" ]; then # VisionFive sgdisk "${disk_image}" \ @@ -227,6 +241,35 @@ install_grub() { if [ -n "${SUBARCH:-}" ]; then # Per-device images case "${SUBARCH}" in + "icicle") + echo "Installing GRUB for ${SUBARCH} board" &1>2 + # flash-kernel is needed to install the dtb for update-grub: it uses the + # /proc/device-tree/model value to pick the correct dtb and as we are in a chroot, + # the model value is wrong and we need to use /etc/flash-kernel/machine instead. + # This explains why we install flash-kernel here. + chroot mountpoint mkdir -p /etc/flash-kernel/ + chroot mountpoint bash -c "echo 'Microchip PolarFire-SoC Icicle Kit' > /etc/flash-kernel/machine" + chroot mountpoint bash -c 'FK_FORCE_CONTAINER=yes apt-get install -qqy grub-efi-riscv64 flash-kernel' + efi_target=riscv64-efi + # The real U-Boot + chroot mountpoint apt-get install -qqy u-boot-microchip + loader="/dev/mapper${loop_device///dev/}p13" + dd if=mountpoint/usr/lib/u-boot/microchip_icicle/u-boot.payload of=$loader + # Provide end-user modifyable CIDATA + cidata_dev="/dev/mapper${loop_device///dev/}p12" + setup_cidata "${cidata_dev}" + # Provide stock nocloud datasource + # Allow interactive login on baremetal board, + # without a cloud datasource. + setup_cinocloud mountpoint + + # u-boot-microchip will boot using UEFI if it does not find + # any extlinux.conf or boot.scr: but flash-kernel will + # install a boot.scr if it believes it did not boot in + # EFI mode, so make sure we don't leave a boot.scr + # behind. + chroot mountpoint rm -f /boot/boot.scr + ;; "nezha"|"licheerv") echo "Installing U-Boot for ${SUBARCH} board" &1>2 # flash-kernel is needed to install the dtb for update-grub: it uses the @@ -350,7 +393,7 @@ EOF chroot mountpoint u-boot-update fi - if [ "${SUBARCH:-}" != "visionfive" ] && [ "${SUBARCH:-}" != "nezha" ] && [ "${SUBARCH:-}" != "licheerv" ]; then + if [ "${SUBARCH:-}" != "visionfive" ] && [ "${SUBARCH:-}" != "nezha" ] && [ "${SUBARCH:-}" != "licheerv" ] && [ "${SUBARCH:-}" != "icicle" ]; then ## TODO remove below once we have grub-efi-riscv64 for the platforms rm mountpoint/tmp/device.map umount mountpoint/boot/efi From a752a99ad88ec34784e7102ff66fe84e7b8a73f8 Mon Sep 17 00:00:00 2001 From: Alexandre Ghiti Date: Thu, 8 Sep 2022 16:16:49 +0200 Subject: [PATCH 4/4] riscv: LicheeRV must use u-boot-nezha package Signed-off-by: Alexandre Ghiti --- live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary index 5fe18325..3a38300d 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary @@ -296,7 +296,8 @@ install_grub() { loader1="/dev/mapper${loop_device///dev/}p13" dd if=mountpoint/usr/lib/u-boot/nezha/boot0_sdcard_sun20iw1p1.bin of=$loader1 # The real U-Boot - chroot mountpoint apt-get install -qqy u-boot-${SUBARCH} + # u-boot-nezha actually contains both the LicheeRV and the Nezha boards support + chroot mountpoint apt-get install -qqy u-boot-nezha loader2="/dev/mapper${loop_device///dev/}p14" dd if=mountpoint/usr/lib/u-boot/${SUBARCH}/u-boot.toc1 of=$loader2 # Provide end-user modifyable CIDATA