All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package
@ 2021-11-06 17:29 Peter Korsgaard
  2021-11-06 17:29 ` [Buildroot] [PATCH v2 2/2] configs/nezha_defconfig: new defconfig Peter Korsgaard
  2021-11-08  8:46 ` [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package Peter Korsgaard
  0 siblings, 2 replies; 4+ messages in thread
From: Peter Korsgaard @ 2021-11-06 17:29 UTC (permalink / raw)
  To: buildroot; +Cc: Thomas Petazzoni, samuel

U-Boot does not yet have SPL code to initialize the DDR controller on the
Allwinner D1 - So instead package the sun20i-d1-spl bootloader, which is
based on boot0 from the Allwinner BSP with some modifications to build it
separately from the BSP and boot mainline U-Boot as explained on the
linux-sunxi wiki:

https://linux-sunxi.org/Allwinner_Nezha

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
---
 Changes since v1:
 - None

DEVELOPERS                            |  1 +
 boot/Config.in                        |  1 +
 boot/sun20i-d1-spl/Config.in          |  8 ++++++++
 boot/sun20i-d1-spl/sun20i-d1-spl.hash |  2 ++
 boot/sun20i-d1-spl/sun20i-d1-spl.mk   | 23 +++++++++++++++++++++++
 5 files changed, 35 insertions(+)
 create mode 100644 boot/sun20i-d1-spl/Config.in
 create mode 100644 boot/sun20i-d1-spl/sun20i-d1-spl.hash
 create mode 100644 boot/sun20i-d1-spl/sun20i-d1-spl.mk

diff --git a/DEVELOPERS b/DEVELOPERS
index a2d34fdcc7..19d527b396 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2112,6 +2112,7 @@ F:	board/orangepi/
 F:	board/pandaboard/
 F:	board/roseapplepi/
 F:	boot/shim/
+F:	boot/sun20i-d1-spl/
 F:	configs/avenger96_defconfig
 F:	configs/beagleboneai_defconfig
 F:	configs/lafrite_defconfig
diff --git a/boot/Config.in b/boot/Config.in
index ff98a49796..40472ae07d 100644
--- a/boot/Config.in
+++ b/boot/Config.in
@@ -20,6 +20,7 @@ source "boot/optee-os/Config.in"
 source "boot/opensbi/Config.in"
 source "boot/s500-bootloader/Config.in"
 source "boot/shim/Config.in"
+source "boot/sun20i-d1-spl/Config.in"
 source "boot/syslinux/Config.in"
 source "boot/uboot/Config.in"
 source "boot/vexpress-firmware/Config.in"
diff --git a/boot/sun20i-d1-spl/Config.in b/boot/sun20i-d1-spl/Config.in
new file mode 100644
index 0000000000..9d94d87b1c
--- /dev/null
+++ b/boot/sun20i-d1-spl/Config.in
@@ -0,0 +1,8 @@
+config BR2_TARGET_SUN20I_D1_SPL
+	bool "sun20-d1-spl"
+	depends on BR2_RISCV_64
+	help
+	  Allwinner D1 boot0 code with modifications to use as U-Boot
+	  SPL.
+
+	  https://github.com/smaeul/sun20i_d1_spl
diff --git a/boot/sun20i-d1-spl/sun20i-d1-spl.hash b/boot/sun20i-d1-spl/sun20i-d1-spl.hash
new file mode 100644
index 0000000000..6ca60e5278
--- /dev/null
+++ b/boot/sun20i-d1-spl/sun20i-d1-spl.hash
@@ -0,0 +1,2 @@
+# Locally computed
+sha256  69063601239a7254fb72e486b138d88a6f2b5c645b24cdfe9792123f975d4a8f  sun20i-d1-spl-771192d0b3737798d7feca87263c8fa74a449787.tar.gz
diff --git a/boot/sun20i-d1-spl/sun20i-d1-spl.mk b/boot/sun20i-d1-spl/sun20i-d1-spl.mk
new file mode 100644
index 0000000000..2462ce2322
--- /dev/null
+++ b/boot/sun20i-d1-spl/sun20i-d1-spl.mk
@@ -0,0 +1,23 @@
+################################################################################
+#
+# sun20i-d1-spl
+#
+################################################################################
+
+# Commit on the 'mainline' branch
+SUN20I_D1_SPL_VERSION = 771192d0b3737798d7feca87263c8fa74a449787
+SUN20I_D1_SPL_SITE = $(call github,smaeul,sun20i_d1_spl,$(SUN20I_D1_SPL_VERSION))
+SUN20I_D1_SPL_INSTALL_TARGET = NO
+SUN20I_D1_SPL_INSTALL_IMAGES = YES
+SUN20I_D1_SPL_LICENSE = GPL-2.0+
+
+define SUN20I_D1_SPL_BUILD_CMDS
+	$(MAKE) -C $(@D) CROSS_COMPILE="$(TARGET_CROSS)" p=sun20iw1p1 mmc
+endef
+
+define SUN20I_D1_SPL_INSTALL_IMAGES_CMDS
+	$(INSTALL) -D -m 0644 $(@D)/nboot/boot0_sdcard_sun20iw1p1.bin \
+		$(BINARIES_DIR)/boot0_sdcard_sun20iw1p1.bin
+endef
+
+$(eval $(generic-package))
-- 
2.20.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [Buildroot] [PATCH v2 2/2] configs/nezha_defconfig: new defconfig
  2021-11-06 17:29 [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package Peter Korsgaard
@ 2021-11-06 17:29 ` Peter Korsgaard
  2021-11-08  8:47   ` Peter Korsgaard
  2021-11-08  8:46 ` [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package Peter Korsgaard
  1 sibling, 1 reply; 4+ messages in thread
From: Peter Korsgaard @ 2021-11-06 17:29 UTC (permalink / raw)
  To: buildroot; +Cc: samuel

Add a defconfig for the Allwinner Nezha, a raspberrypi-style board built
around the RISC-V 64bit D1 SoC.

There is currently no upstream support, so use the git repos from Samuel
Holland as explained on the linux-sunxi wiki:

https://linux-sunxi.org/Allwinner_Nezha

The U-Boot DTB is also used by opensbi, but the two branches are
unfortunately not in sync at the moment, so add a patch to fix the
compatible for the PLIC so opensbi makes it available to S-Mode (Linux).

The use of the sun20i-d1-spl SPL bootloader / TOC1 file format also makes it
a bit more complicated to build the boot image.  As this is expected to only
be a temporary issue, add a U-Boot patch to build the TOC1 image as part of
the build rather than adding explicit support in our U-Boot package to do
it.

Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
---
 Changes since v1:
 - Use github macro/tarballs for linux/opensbi/u-boot
 - Use rootfs overlay for extlinux.conf
 - Use kilobytes (K) for offsets in genimage.cfg

 DEVELOPERS                                    |  2 +
 board/nezha/genimage.cfg                      | 37 +++++++++++++
 .../nezha/overlay/boot/extlinux/extlinux.conf |  4 ++
 ...un20i-d1.dtsi-adjust-plic-compatible.patch | 36 +++++++++++++
 ...pport-building-u-boot.toc1-for-nezda.patch | 54 +++++++++++++++++++
 board/nezha/readme.txt                        | 24 +++++++++
 configs/nezha_defconfig                       | 33 ++++++++++++
 7 files changed, 190 insertions(+)
 create mode 100644 board/nezha/genimage.cfg
 create mode 100644 board/nezha/overlay/boot/extlinux/extlinux.conf
 create mode 100644 board/nezha/patches/uboot/0001-arch-riscv-dts-sun20i-d1.dtsi-adjust-plic-compatible.patch
 create mode 100644 board/nezha/patches/uboot/0002-Makefile-HACK-Support-building-u-boot.toc1-for-nezda.patch
 create mode 100644 board/nezha/readme.txt
 create mode 100644 configs/nezha_defconfig

diff --git a/DEVELOPERS b/DEVELOPERS
index 19d527b396..70262eac8c 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2105,6 +2105,7 @@ N:	Peter Korsgaard <peter@korsgaard.com>
 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 <peter@korsgaard.com>
+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 <peter@korsgaard.com>
+---
+ 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 <peter@korsgaard.com>
+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 <peter@korsgaard.com>
+---
+ 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
-- 
2.20.1

_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package
  2021-11-06 17:29 [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package Peter Korsgaard
  2021-11-06 17:29 ` [Buildroot] [PATCH v2 2/2] configs/nezha_defconfig: new defconfig Peter Korsgaard
@ 2021-11-08  8:46 ` Peter Korsgaard
  1 sibling, 0 replies; 4+ messages in thread
From: Peter Korsgaard @ 2021-11-08  8:46 UTC (permalink / raw)
  To: buildroot; +Cc: Thomas Petazzoni, samuel

>>>>> "Peter" == Peter Korsgaard <peter@korsgaard.com> writes:

 > U-Boot does not yet have SPL code to initialize the DDR controller on the
 > Allwinner D1 - So instead package the sun20i-d1-spl bootloader, which is
 > based on boot0 from the Allwinner BSP with some modifications to build it
 > separately from the BSP and boot mainline U-Boot as explained on the
 > linux-sunxi wiki:

 > https://linux-sunxi.org/Allwinner_Nezha

 > Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
 > ---
 >  Changes since v1:
 >  - None

Committed, thanks.

-- 
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Buildroot] [PATCH v2 2/2] configs/nezha_defconfig: new defconfig
  2021-11-06 17:29 ` [Buildroot] [PATCH v2 2/2] configs/nezha_defconfig: new defconfig Peter Korsgaard
@ 2021-11-08  8:47   ` Peter Korsgaard
  0 siblings, 0 replies; 4+ messages in thread
From: Peter Korsgaard @ 2021-11-08  8:47 UTC (permalink / raw)
  To: buildroot; +Cc: samuel

>>>>> "Peter" == Peter Korsgaard <peter@korsgaard.com> writes:

 > Add a defconfig for the Allwinner Nezha, a raspberrypi-style board built
 > around the RISC-V 64bit D1 SoC.

 > There is currently no upstream support, so use the git repos from Samuel
 > Holland as explained on the linux-sunxi wiki:

 > https://linux-sunxi.org/Allwinner_Nezha

 > The U-Boot DTB is also used by opensbi, but the two branches are
 > unfortunately not in sync at the moment, so add a patch to fix the
 > compatible for the PLIC so opensbi makes it available to S-Mode (Linux).

 > The use of the sun20i-d1-spl SPL bootloader / TOC1 file format also makes it
 > a bit more complicated to build the boot image.  As this is expected to only
 > be a temporary issue, add a U-Boot patch to build the TOC1 image as part of
 > the build rather than adding explicit support in our U-Boot package to do
 > it.

 > Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
 > ---
 >  Changes since v1:
 >  - Use github macro/tarballs for linux/opensbi/u-boot
 >  - Use rootfs overlay for extlinux.conf
 >  - Use kilobytes (K) for offsets in genimage.cfg

Committed, thanks.

-- 
Bye, Peter Korsgaard
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-11-08  8:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-06 17:29 [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package Peter Korsgaard
2021-11-06 17:29 ` [Buildroot] [PATCH v2 2/2] configs/nezha_defconfig: new defconfig Peter Korsgaard
2021-11-08  8:47   ` Peter Korsgaard
2021-11-08  8:46 ` [Buildroot] [PATCH v2 1/2] boot/sun20i-d1-spl: new package Peter Korsgaard

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.