diff --git a/DEVELOPERS b/DEVELOPERS index 19d527b396..70262eac8c 100644 --- a/DEVELOPERS +++ b/DEVELOPERS @@ -2105,6 +2105,7 @@ N: Peter Korsgaard F: board/arrow/avenger96/ F: board/beagleboneai/ F: board/minnowboard/ +F: board/nezha/ F: board/librecomputer/lafrite/ F: board/nexbox/a95x/ F: board/openblocks/a6/ @@ -2119,6 +2120,7 @@ F: configs/lafrite_defconfig F: configs/minnowboard_max-graphical_defconfig F: configs/minnowboard_max_defconfig F: configs/nexbox_a95x_defconfig +F: configs/nezha_defconfig F: configs/openblocks_a6_defconfig F: configs/orangepi_pc_defconfig F: configs/orangepi_r1_defconfig diff --git a/board/nezha/genimage.cfg b/board/nezha/genimage.cfg new file mode 100644 index 0000000000..9860b83eca --- /dev/null +++ b/board/nezha/genimage.cfg @@ -0,0 +1,37 @@ +# Minimal SD card image for the Allwinner Nezha + +image sdcard.img { + hdimage { + } + + partition boot0-1 { + in-partition-table = "no" + image = "boot0_sdcard_sun20iw1p1.bin" + offset = 8K + } + + partition boot0-2 { + in-partition-table = "no" + image = "boot0_sdcard_sun20iw1p1.bin" + offset = 128K + } + + partition u-boot-1 { + in-partition-table = "no" + image = "u-boot.toc1" + offset = 12288K + } + + partition u-boot-2 { + in-partition-table = "no" + image = "u-boot.toc1" + offset = 16400K + } + + partition rootfs { + partition-type = 0x83 + image = "rootfs.ext4" + bootable = "true" + offset = 18M + } +} diff --git a/board/nezha/overlay/boot/extlinux/extlinux.conf b/board/nezha/overlay/boot/extlinux/extlinux.conf new file mode 100644 index 0000000000..02232f4d16 --- /dev/null +++ b/board/nezha/overlay/boot/extlinux/extlinux.conf @@ -0,0 +1,4 @@ +label linux + kernel /boot/Image + devicetree /boot/sun20i-d1-nezha.dtb + append console=ttyS0,115200 root=/dev/mmcblk0p1 ro rootwait diff --git a/board/nezha/patches/uboot/0001-arch-riscv-dts-sun20i-d1.dtsi-adjust-plic-compatible.patch b/board/nezha/patches/uboot/0001-arch-riscv-dts-sun20i-d1.dtsi-adjust-plic-compatible.patch new file mode 100644 index 0000000000..3524f44a61 --- /dev/null +++ b/board/nezha/patches/uboot/0001-arch-riscv-dts-sun20i-d1.dtsi-adjust-plic-compatible.patch @@ -0,0 +1,36 @@ +From 99cf8f37ceb1def9e7bbaccc395cf2275723e03d Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Thu, 4 Nov 2021 22:15:13 +0100 +Subject: [PATCH] arch/riscv/dts/sun20i-d1.dtsi: adjust plic compatible to + match opensbi + +The T-HEAD PLIC is by default not accessible from S-mode, and access must be +enabled by opensbi to make it accessible to Linux. + +The DTB is used both by U-Boot and opensbi (but the PLIC node is ignored by +U-Boot), so change the compatible to match what opensbi expects to fix a +crash during Linux boot: + +https://github.com/riscv-software-src/opensbi/commit/78c2b19218bd + +Signed-off-by: Peter Korsgaard +--- + arch/riscv/dts/sun20i-d1.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/riscv/dts/sun20i-d1.dtsi b/arch/riscv/dts/sun20i-d1.dtsi +index 280e0336d4..56d02c33b0 100644 +--- a/arch/riscv/dts/sun20i-d1.dtsi ++++ b/arch/riscv/dts/sun20i-d1.dtsi +@@ -1136,7 +1136,7 @@ + + plic: interrupt-controller@10000000 { + compatible = "allwinner,sun20i-d1-plic", +- "sifive,plic-1.0.0"; ++ "thead,c900-plic"; + reg = <0x10000000 0x4000000>; + #address-cells = <0>; + interrupts-extended = <&cpu0_intc 11>, +-- +2.20.1 + diff --git a/board/nezha/patches/uboot/0002-Makefile-HACK-Support-building-u-boot.toc1-for-nezda.patch b/board/nezha/patches/uboot/0002-Makefile-HACK-Support-building-u-boot.toc1-for-nezda.patch new file mode 100644 index 0000000000..6e89a921df --- /dev/null +++ b/board/nezha/patches/uboot/0002-Makefile-HACK-Support-building-u-boot.toc1-for-nezda.patch @@ -0,0 +1,54 @@ +From 4a923e0e4ef6d2b41cb89d658e269adada847573 Mon Sep 17 00:00:00 2001 +From: Peter Korsgaard +Date: Thu, 4 Nov 2021 22:32:04 +0100 +Subject: [PATCH] Makefile: HACK: Support building u-boot.toc1 for nezda board + +For easier integration into Buildroot. The boot0 / toc1 logic is WIP until +U-Boot gains SPL support for the D1, so add a hack to make it easier to +integrate in Buildroot as-is. + +Signed-off-by: Peter Korsgaard +--- + Makefile | 9 +++++++++ + nezha.cfg | 9 +++++++++ + 2 files changed, 18 insertions(+) + create mode 100644 nezha.cfg + +diff --git a/Makefile b/Makefile +index f911f70344..259d93bf80 100644 +--- a/Makefile ++++ b/Makefile +@@ -1084,6 +1084,15 @@ endif + .binman_stamp: FORCE + @touch $@ + ++fw_dynamic.bin: $(OPENSBI) ++ $(call if_changed,copy) ++ ++MKIMAGEFLAGS_u-boot.toc1 = -T sunxi_toc1 ++u-boot.toc1: nezha.cfg fw_dynamic.bin inputs ++ $(call if_changed,mkimage) ++ ++all: u-boot.toc1 ++ + ifeq ($(CONFIG_DEPRECATED),y) + $(warning "You have deprecated configuration options enabled in your .config! Please check your configuration.") + endif +diff --git a/nezha.cfg b/nezha.cfg +new file mode 100644 +index 0000000000..2d23b9b388 +--- /dev/null ++++ b/nezha.cfg +@@ -0,0 +1,9 @@ ++[opensbi] ++file = fw_dynamic.bin ++addr = 0x40000000 ++[dtb] ++file = arch/riscv/dts/sun20i-d1-nezha.dtb ++addr = 0x44000000 ++[u-boot] ++file = u-boot-nodtb.bin ++addr = 0x4a000000 +-- +2.20.1 + diff --git a/board/nezha/readme.txt b/board/nezha/readme.txt new file mode 100644 index 0000000000..fd4c6707de --- /dev/null +++ b/board/nezha/readme.txt @@ -0,0 +1,24 @@ +Allwinner Nezha +=============== + +Nezha is is a low-cost RISC-V 64-bit based platform, powered by an +Allwinner D1 SoC. + +How to build +============ + +$ make nezha_defconfig +$ make + +How to write the SD card +======================== + +Once the build process is finished you will have an image called "sdcard.img" +in the output/images/ directory. + +Copy the bootable "sdcard.img" onto an SD card with "dd": + + $ sudo dd if=output/images/sdcard.img of=/dev/sdX + +Connect a TTL UART to the debug connector, insert the microSD card and +plug in a USB-C cable to the PWR connector to boot the system. diff --git a/configs/nezha_defconfig b/configs/nezha_defconfig new file mode 100644 index 0000000000..d4724de2f3 --- /dev/null +++ b/configs/nezha_defconfig @@ -0,0 +1,33 @@ +BR2_riscv=y +BR2_GLOBAL_PATCH_DIR="board/nezha/patches" +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_14=y +BR2_ROOTFS_OVERLAY="board/nezha/overlay" +BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/nezha/genimage.cfg" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL=y +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,smaeul,linux,012f5a3d01be6d44e32c74bb3637ec281790b297)/linux-012f5a3d01be6d44e32c74bb3637ec281790b297.tar.gz" +BR2_LINUX_KERNEL_DEFCONFIG="nezha" +BR2_LINUX_KERNEL_DTS_SUPPORT=y +BR2_LINUX_KERNEL_INTREE_DTS_NAME="allwinner/sun20i-d1-nezha" +BR2_LINUX_KERNEL_INSTALL_TARGET=y +BR2_TARGET_ROOTFS_EXT2=y +BR2_TARGET_ROOTFS_EXT2_4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_OPENSBI=y +BR2_TARGET_OPENSBI_CUSTOM_TARBALL=y +BR2_TARGET_OPENSBI_CUSTOM_TARBALL_LOCATION="$(call github,smaeul,opensbi,b9125c6f8909d1cc0417795737fc13cb6297ff11)/opensbi-b9125c6f8909d1cc0417795737fc13cb6297ff11.tar.gz" +BR2_TARGET_OPENSBI_PLAT="generic" +# BR2_TARGET_OPENSBI_INSTALL_JUMP_IMG is not set +BR2_TARGET_SUN20I_D1_SPL=y +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL=y +BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="$(call github,smaeul,u-boot,62392d3b8a624a80646c1876533336f90140088d)/uboot-62392d3b8a624a80646c1876533336f90140088d.tar.gz" +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="nezha" +BR2_TARGET_UBOOT_NEEDS_DTC=y +BR2_TARGET_UBOOT_NEEDS_OPENSBI=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot.toc1" +BR2_PACKAGE_HOST_GENIMAGE=y