From ac040ae58dba316d86edc788416fae58a5f44e3f Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 2 Jan 2025 19:11:31 +0100 Subject: [PATCH 01/16] efi_loader: build with HII configuration protocol Without the HII configuration protocol the debug version of the UEFI shell cannot be used. Signed-off-by: Heinrich Schuchardt Acked-by: Ilias Apalodimas --- lib/efi_loader/Makefile | 2 +- lib/efi_loader/efi_hii_config.c | 4 ---- lib/efi_loader/efi_root_node.c | 3 +++ 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/efi_loader/Makefile b/lib/efi_loader/Makefile index ab50a69e48b..cf050e5385d 100644 --- a/lib/efi_loader/Makefile +++ b/lib/efi_loader/Makefile @@ -37,7 +37,7 @@ obj-$(CONFIG_EFI_DEVICE_PATH_UTIL) += efi_device_path_utilities.o obj-y += efi_dt_fixup.o obj-y += efi_fdt.o obj-y += efi_file.o -obj-$(CONFIG_EFI_LOADER_HII) += efi_hii.o +obj-$(CONFIG_EFI_LOADER_HII) += efi_hii.o efi_hii_config.o obj-y += efi_image_loader.o obj-y += efi_load_options.o obj-y += efi_memory.o diff --git a/lib/efi_loader/efi_hii_config.c b/lib/efi_loader/efi_hii_config.c index 37d8c6629e2..521481a86d8 100644 --- a/lib/efi_loader/efi_hii_config.c +++ b/lib/efi_loader/efi_hii_config.c @@ -4,10 +4,6 @@ * * Copyright (c) 2017 Leif Lindholm * Copyright (c) 2018 AKASHI Takahiro, Linaro Limited - * - * As this is still a non-working stub and the protocol is neither required - * by the EFI shell nor by the UEFI SCT this module has been removed from - * the Makefile. */ #define LOG_CATEGORY LOGC_EFI diff --git a/lib/efi_loader/efi_root_node.c b/lib/efi_loader/efi_root_node.c index 74225edad29..e5246f65df2 100644 --- a/lib/efi_loader/efi_root_node.c +++ b/lib/efi_loader/efi_root_node.c @@ -80,6 +80,9 @@ efi_status_t efi_root_node_register(void) /* HII database protocol */ &efi_guid_hii_database_protocol, &efi_hii_database, + /* EFI HII Configuration Routing Protocol */ + &efi_guid_hii_config_routing_protocol, + &efi_hii_config_routing, #endif NULL); efi_root->type = EFI_OBJECT_TYPE_U_BOOT_FIRMWARE; From db3f4905bf81e89e0abd999e0c215667cdf5ef02 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 2 Jan 2025 19:11:33 +0100 Subject: [PATCH 02/16] efi_loader: print image load address in StartImage When starting image add the image load address to the debug output. Signed-off-by: Heinrich Schuchardt Reviewed-by: Ilias Apalodimas --- lib/efi_loader/efi_boottime.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index f220daa048f..dbebb37dc04 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -3195,7 +3195,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, struct efi_loaded_image_obj *image_obj = (struct efi_loaded_image_obj *)image_handle; efi_status_t ret; - void *info; + struct efi_loaded_image *info; efi_handle_t parent_image = current_image; efi_status_t exit_status; jmp_buf exit_jmp; @@ -3213,7 +3213,7 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, return EFI_EXIT(EFI_SECURITY_VIOLATION); ret = EFI_CALL(efi_open_protocol(image_handle, &efi_guid_loaded_image, - &info, NULL, NULL, + (void **)&info, NULL, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL)); if (ret != EFI_SUCCESS) return EFI_EXIT(EFI_INVALID_PARAMETER); @@ -3266,7 +3266,8 @@ efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle, current_image = image_handle; image_obj->header.type = EFI_OBJECT_TYPE_STARTED_IMAGE; - EFI_PRINT("Jumping into 0x%p\n", image_obj->entry); + EFI_PRINT("Starting image loaded at 0x%p, entry point 0x%p\n", + info->image_base, image_obj->entry); ret = EFI_CALL(image_obj->entry(image_handle, &systab)); /* From e4ead999501750724c933eebc87d9bed0b81c8df Mon Sep 17 00:00:00 2001 From: Aristo Chen Date: Sun, 20 Apr 2025 22:39:41 +0800 Subject: [PATCH 03/16] doc: remove duplicated "commands" The "commands" are duplicated, so remove one of them Signed-off-by: Aristo Chen Reviewed-by: Quentin Schulz --- doc/usage/cmd/md.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usage/cmd/md.rst b/doc/usage/cmd/md.rst index 9a9919f9ad0..1eeaa824bf2 100644 --- a/doc/usage/cmd/md.rst +++ b/doc/usage/cmd/md.rst @@ -21,7 +21,7 @@ format that includes the address, hex data and ASCII display. It supports various data sizes and uses the endianness of the target. The specified data_size and length become the defaults for future memory -commands commands. +commands. address start address to display From 5bf00b576d692f2d58b29f9e224e922eeb1b918b Mon Sep 17 00:00:00 2001 From: Aristo Chen Date: Tue, 22 Apr 2025 11:07:06 +0800 Subject: [PATCH 04/16] doc: arch: arm64: fix typos Fix typo from "recommened" to "recommended" Signed-off-by: Aristo Chen --- doc/arch/arm64.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/arch/arm64.rst b/doc/arch/arm64.rst index 19662be6fc6..d72200ffdb9 100644 --- a/doc/arch/arm64.rst +++ b/doc/arch/arm64.rst @@ -14,11 +14,11 @@ Notes ----- 1. U-Boot can run at any exception level it is entered in, it is - recommened to enter it in EL3 if U-Boot takes some responsibilities of a + recommended to enter it in EL3 if U-Boot takes some responsibilities of a classical firmware (like initial hardware setup, CPU errata workarounds or SMP bringup). U-Boot can be entered in EL2 when its main purpose is that of a boot loader. It can drop to lower exception levels before - entering the OS. For ARMv8-R it is recommened to enter at S-EL1, as for this + entering the OS. For ARMv8-R it is recommended to enter at S-EL1, as for this architecture there is no S-EL3. 2. U-Boot for arm64 is compiled with AArch64-gcc. AArch64-gcc From 06d7bd9c06110db6832af96b16ca9931c2a3855a Mon Sep 17 00:00:00 2001 From: Aristo Chen Date: Wed, 23 Apr 2025 14:52:13 +0800 Subject: [PATCH 05/16] doc: fix typo commnad fix typo from "commnad" to "command" Signed-off-by: Aristo Chen --- doc/usage/cmd/part.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usage/cmd/part.rst b/doc/usage/cmd/part.rst index e7faeccbb09..e7f6e54ecea 100644 --- a/doc/usage/cmd/part.rst +++ b/doc/usage/cmd/part.rst @@ -50,7 +50,7 @@ The 'part list' command prints or sets an environment variable to the list of pa varname an optional environment variable to store the list of partitions value into. -The 'part start' commnad sets an environment variable to the start of the partition (in blocks), +The 'part start' command sets an environment variable to the start of the partition (in blocks), part can be either partition number or partition name. interface From 393123adadd5be8aa77628b887ada32f5862ca96 Mon Sep 17 00:00:00 2001 From: Aristo Chen Date: Thu, 24 Apr 2025 17:14:16 +0800 Subject: [PATCH 06/16] doc: fix typo 'to' Fix typo from "to" to "do" Signed-off-by: Aristo Chen Reviewed-by: Quentin Schulz --- doc/usage/blkmap.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/usage/blkmap.rst b/doc/usage/blkmap.rst index 75f736c259f..4e9091e8ffa 100644 --- a/doc/usage/blkmap.rst +++ b/doc/usage/blkmap.rst @@ -39,7 +39,7 @@ network. Getting the image to the target is easy enough: dhcp ${ramdisk_addr_r} rootfs.ext4 -But now we are faced with a predicament: how to we extract the kernel +But now we are faced with a predicament: how do we extract the kernel image? Block maps to the rescue! We start by creating a new device: From 4b6f71668cded9efe0fb629ca3d6f21c36996090 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 3 Apr 2025 16:28:16 +0200 Subject: [PATCH 07/16] configs: qemu-riscv raise CONFIG_NR_DRAM_BANKS The number of memory banks in QEMU is not bounded by 1. In this example we have two banks: qemu-system-riscv64 \ -machine virt \ -nographic \ -m 8192 \ -smp 8,sockets=2,cores=4,threads=1 \ -numa node,cpus=0-3,mem=4096 \ -numa node,cpus=4-7,mem=4096 \ -kernel u-boot As we will see RISC-V NUMA systems using U-Boot we should be able to emulate these. Use the default value defined in /Kconfig as 4. Reviewed-by: Leo Yu-Chi Liang Signed-off-by: Heinrich Schuchardt --- configs/qemu-riscv32_defconfig | 1 - configs/qemu-riscv32_smode_defconfig | 1 - configs/qemu-riscv32_spl_defconfig | 1 - configs/qemu-riscv64_defconfig | 1 - configs/qemu-riscv64_smode_defconfig | 1 - configs/qemu-riscv64_spl_defconfig | 1 - 6 files changed, 6 deletions(-) diff --git a/configs/qemu-riscv32_defconfig b/configs/qemu-riscv32_defconfig index b9f28873c15..b9cb780200e 100644 --- a/configs/qemu-riscv32_defconfig +++ b/configs/qemu-riscv32_defconfig @@ -1,6 +1,5 @@ CONFIG_RISCV=y CONFIG_SYS_MALLOC_LEN=0x800000 -CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 CONFIG_ENV_SIZE=0x20000 diff --git a/configs/qemu-riscv32_smode_defconfig b/configs/qemu-riscv32_smode_defconfig index cd89571e40c..8a09d80da11 100644 --- a/configs/qemu-riscv32_smode_defconfig +++ b/configs/qemu-riscv32_smode_defconfig @@ -1,6 +1,5 @@ CONFIG_RISCV=y CONFIG_SYS_MALLOC_LEN=0x800000 -CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 CONFIG_ENV_SIZE=0x20000 diff --git a/configs/qemu-riscv32_spl_defconfig b/configs/qemu-riscv32_spl_defconfig index 8d5f9d9f5cc..c4b6d57020b 100644 --- a/configs/qemu-riscv32_spl_defconfig +++ b/configs/qemu-riscv32_spl_defconfig @@ -1,6 +1,5 @@ CONFIG_RISCV=y CONFIG_SYS_MALLOC_LEN=0x800000 -CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 CONFIG_ENV_SIZE=0x20000 diff --git a/configs/qemu-riscv64_defconfig b/configs/qemu-riscv64_defconfig index c67fb9a3352..6b2fed4ad16 100644 --- a/configs/qemu-riscv64_defconfig +++ b/configs/qemu-riscv64_defconfig @@ -1,6 +1,5 @@ CONFIG_RISCV=y CONFIG_SYS_MALLOC_LEN=0x800000 -CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 CONFIG_ENV_SIZE=0x20000 diff --git a/configs/qemu-riscv64_smode_defconfig b/configs/qemu-riscv64_smode_defconfig index d28e9fbeceb..95f24ac3d55 100644 --- a/configs/qemu-riscv64_smode_defconfig +++ b/configs/qemu-riscv64_smode_defconfig @@ -1,6 +1,5 @@ CONFIG_RISCV=y CONFIG_SYS_MALLOC_LEN=0x800000 -CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 CONFIG_ENV_SIZE=0x20000 diff --git a/configs/qemu-riscv64_spl_defconfig b/configs/qemu-riscv64_spl_defconfig index 18b7e049d86..d2b0aec8d3c 100644 --- a/configs/qemu-riscv64_spl_defconfig +++ b/configs/qemu-riscv64_spl_defconfig @@ -1,6 +1,5 @@ CONFIG_RISCV=y CONFIG_SYS_MALLOC_LEN=0x800000 -CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 CONFIG_ENV_SIZE=0x20000 From 872b55d42ae326b3bd8d4c02d2baa0f7ceabf5fb Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:08 +0200 Subject: [PATCH 08/16] configs: add jh7110-deepcomputing-fml13v01 to VF2 defconfig The DeepComputing Framework motherboard is a JH7110 device support by the upstream kernel. Add its device-tree to the list of device-trees to be included into the starfive_visionfive_defconfig. Reviewed-by: Sumit Garg Reviewed-by: Hal Feng Reviewed-by: Matthias Brugger Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- configs/starfive_visionfive2_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configs/starfive_visionfive2_defconfig b/configs/starfive_visionfive2_defconfig index 6a5b247c4b5..e145ced8db8 100644 --- a/configs/starfive_visionfive2_defconfig +++ b/configs/starfive_visionfive2_defconfig @@ -80,7 +80,7 @@ CONFIG_CMD_WDT=y CONFIG_CMD_WGET=y CONFIG_CMD_BOOTSTAGE=y CONFIG_OF_BOARD=y -CONFIG_OF_LIST="starfive/jh7110-milkv-mars starfive/jh7110-pine64-star64 starfive/jh7110-starfive-visionfive-2-v1.2a starfive/jh7110-starfive-visionfive-2-v1.3b" +CONFIG_OF_LIST="starfive/jh7110-deepcomputing-fml13v01 starfive/jh7110-milkv-mars starfive/jh7110-pine64-star64 starfive/jh7110-starfive-visionfive-2-v1.2a starfive/jh7110-starfive-visionfive-2-v1.3b" CONFIG_MULTI_DTB_FIT=y CONFIG_ENV_OVERWRITE=y CONFIG_ENV_IS_IN_SPI_FLASH=y From 7125924a62f4343d01aafef3976ad4034e0a3222 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:09 +0200 Subject: [PATCH 09/16] riscv: dts: jh7110: add DeepComputing FML13V01 device-tree Add the u-boot device-tree include needed to support the DeepComputing Framework motherboard (FML13V01). Reviewed-by: Sumit Garg Reviewed-by: Hal Feng Reviewed-by: Matthias Brugger Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- arch/riscv/dts/jh7110-deepcomputing-fml13v01-u-boot.dtsi | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 arch/riscv/dts/jh7110-deepcomputing-fml13v01-u-boot.dtsi diff --git a/arch/riscv/dts/jh7110-deepcomputing-fml13v01-u-boot.dtsi b/arch/riscv/dts/jh7110-deepcomputing-fml13v01-u-boot.dtsi new file mode 100644 index 00000000000..ab882d07f6f --- /dev/null +++ b/arch/riscv/dts/jh7110-deepcomputing-fml13v01-u-boot.dtsi @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-2.0 OR MIT +/* + * Copyright (C) 2024 StarFive Technology Co., Ltd. + */ + +#include "jh7110-common-u-boot.dtsi" +#include "starfive-visionfive2-binman.dtsi" From c5e8f3476936b56cf908e592e97bbf485f66e564 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:10 +0200 Subject: [PATCH 10/16] board: starfive: DeepComputing FML13V01 fdt selection We support all JH7110 boards with starfive_visionfive2_defconfig. The relevant device-tree is selected at runtime based on EEPROM data. Support setting $fdtfile to the file name of the DeepComputing Framework motherboard (FML13V01) device-tree. Reviewed-by: Hal Feng Reviewed-by: Matthias Brugger Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- board/starfive/visionfive2/starfive_visionfive2.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/board/starfive/visionfive2/starfive_visionfive2.c b/board/starfive/visionfive2/starfive_visionfive2.c index b8cd509bc89..5fe888d4072 100644 --- a/board/starfive/visionfive2/starfive_visionfive2.c +++ b/board/starfive/visionfive2/starfive_visionfive2.c @@ -17,6 +17,8 @@ DECLARE_GLOBAL_DATA_PTR; #define JH7110_L2_PREFETCHER_BASE_ADDR 0x2030000 #define JH7110_L2_PREFETCHER_HART_OFFSET 0x2000 +#define FDTFILE_FML13V01 \ + "starfive/jh7110-deepcomputing-fml13v01.dtb" #define FDTFILE_MILK_V_MARS \ "starfive/jh7110-milkv-mars.dtb" #define FDTFILE_VISIONFIVE2_1_2A \ @@ -63,7 +65,9 @@ static void set_fdtfile(void) log_err("Can't read EEPROM\n"); return; } - if (!strncmp(product_id, "MARS", 4)) { + if (!strncmp(product_id, "FML13V01", 8)) { + fdtfile = FDTFILE_FML13V01; + } else if (!strncmp(product_id, "MARS", 4)) { fdtfile = FDTFILE_MILK_V_MARS; } else if (!strncmp(product_id, "VF7110", 6)) { version = get_pcb_revision_from_eeprom(); From 62dad88db25545a2e0b04d570c4b28fae25849cc Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:11 +0200 Subject: [PATCH 11/16] board: starfive: spl: support DeepComputing FML13V01 On the DeepComputing Framework motherboard (FML13V01) choose the matching FIT configuration. Reviewed-by: Hal Feng Reviewed-by: Matthias Brugger Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- board/starfive/visionfive2/spl.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/board/starfive/visionfive2/spl.c b/board/starfive/visionfive2/spl.c index 3e4d3e21988..9a3081ef06f 100644 --- a/board/starfive/visionfive2/spl.c +++ b/board/starfive/visionfive2/spl.c @@ -125,7 +125,10 @@ int board_fit_config_name_match(const char *name) if (strncmp(name, "starfive/", 9)) return -EINVAL; name += 9; - if (!strncmp(product_id, "VF7110", 6)) { + if (!strncmp(product_id, "FML13V01", 8) && + !strcmp(name, "jh7110-deepcomputing-fml13v01")) { + return 0; + } else if (!strncmp(product_id, "VF7110", 6)) { version = get_pcb_revision_from_eeprom(); if ((version == 'b' || version == 'B') && !strcmp(name, "jh7110-starfive-visionfive-2-v1.3b")) From 612e832a9c47b64c9ebd2b5ed28e0ddbd0017889 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:12 +0200 Subject: [PATCH 12/16] doc: add DeepComputing FML13V01 documentation Describe building U-Boot for the board and booting. Carve out common information for JH7110 boards into an include. Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- doc/board/starfive/deepcomputing_fml13v01.rst | 80 +++++++++++++++++ doc/board/starfive/index.rst | 1 + doc/board/starfive/jh7110_common.rst | 89 +++++++++++++++++++ 3 files changed, 170 insertions(+) create mode 100644 doc/board/starfive/deepcomputing_fml13v01.rst create mode 100644 doc/board/starfive/jh7110_common.rst diff --git a/doc/board/starfive/deepcomputing_fml13v01.rst b/doc/board/starfive/deepcomputing_fml13v01.rst new file mode 100644 index 00000000000..5d9612483b4 --- /dev/null +++ b/doc/board/starfive/deepcomputing_fml13v01.rst @@ -0,0 +1,80 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +DeepComputing Framework Motherboard (FLM13V01) +============================================== + +The DeepComputing Framework motherboard (FLM13V01) can be combined with a +13 inch Framework laptop chassis to provide a complete laptop. + +U-Boot for the board uses the same binaries as the VisionFive 2 board. +Currently only serial console output is supported by mainline U-Boot. + +Building +-------- + +Setup the cross compilation environment variable: + +.. code-block:: bash + + export CROSS_COMPILE=riscv64-linux-gnu- + +The M-mode software OpenSBI provides the supervisor binary interface (SBI) and +is responsible for the switch to S-Mode. It is a prerequisite for building +U-Boot. Support for the JH7110 was introduced in OpenSBI 1.2. It is recommended +to use a current release. + +.. code-block:: bash + + git clone https://github.com/riscv/opensbi.git + cd opensbi + make PLATFORM=generic FW_TEXT_START=0x40000000 FW_OPTIONS=0 + export OPENSBI="$(pwd)/build/platform/generic/firmware/fw_dynamic.bin" + +Now build U-Boot SPL and main U-Boot. + +.. code-block:: bash + + cd + make starfive_visionfive2_defconfig + make + +This will generate the U-Boot SPL image (spl/u-boot-spl.bin.normal.out) as well +as the FIT image (u-boot.itb) with OpenSBI, U-Boot, and device-trees. + +Device-tree selection +--------------------- + +The product ID stored in the board EEPROM is used by U-Boot SPL to select the +right configuration and device-tree from the u-boot.itb FIT image. + +Furthermore if variable $fdtfile has not been saved in the environment it is +set based on the product ID to *starfive/jh7110-deepcomputing-fml13v01.dtb*. + +To overrule this default the variable can be set manually and saved in the +environment + +.. code-block:: console + + setenv fdtfile my_device-tree.dtb + env save + +Power switch +------------ + +A tiny power switch is located in right upper corner of the board. + +Open case detection +------------------- + +The board has an open case detection switch. Red lights will flash and the +board will not boot if the switch is not held down. + +UART +---- + +UART 0 is exposed via the side channel contacts SBU1 and SBU2 of the lower, +right USB C connector. A USB C cable and a breakout board are needed for +physical access. It depends on the cable orientation on which of SBU1 and SBU2 +you will find RX and TX. The signal voltage is 3.3 V. The baud rate is 115200. + +.. include:: jh7110_common.rst diff --git a/doc/board/starfive/index.rst b/doc/board/starfive/index.rst index 2cba1b6dc56..66abc6f9d98 100644 --- a/doc/board/starfive/index.rst +++ b/doc/board/starfive/index.rst @@ -6,6 +6,7 @@ StarFive .. toctree:: :maxdepth: 1 + deepcomputing_fml13v01 milk-v_mars pine64_star64 visionfive2 diff --git a/doc/board/starfive/jh7110_common.rst b/doc/board/starfive/jh7110_common.rst new file mode 100644 index 00000000000..fb8d87a1551 --- /dev/null +++ b/doc/board/starfive/jh7110_common.rst @@ -0,0 +1,89 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +Boot source selection +--------------------- + +The board provides DIP switches to select the device for loading the boot +firmware. + +=========== === === +Boot source SW1 SW2 +=========== === === +UART OFF OFF +SD-card ON OFF +eMMC OFF ON +SPI flash ON ON +=========== === === + +Flashing a new U-Boot version +----------------------------- + +U-Boot SPL is provided as file spl/u-boot-spl.bin.normal.out. Main U-Boot is +in file u-boot.itb. + +Assuming your new U-Boot version is on partition 1 of an SD-card you could +install it to the SPI flash with: + +.. code-block:: console + + sf probe + load mmc 1:1 $kernel_addr_r u-boot-spl.bin.normal.out + sf update $kernel_addr_r 0 $filesize + load mmc 1:1 $kernel_addr_r u-boot.itb + sf update $kernel_addr_r 0x100000 $filesize + +For loading the files from a TFTP server refer to the dhcp and tftpboot +commands. + +After updating U-Boot you may want to erase a saved environment and reboot. + +.. code-block:: console + + env erase + reset + +Booting from SD-Card +-------------------- + +The device boot ROM loads U-Boot SPL (u-boot-spl.bin.normal.out) from the +partition with type GUID 2E54B353-1271-4842-806F-E436D6AF6985. You are free +to choose any partition number. + +With the default configuration U-Boot SPL loads the U-Boot FIT image +(u-boot.itb) from partition 2 (CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=0x2). +When formatting it is recommended to use GUID +BC13C2FF-59E6-4262-A352-B275FD6F7172 for this partition. + +Booting from eMMC +----------------- + +The device boot ROM tries to load U-Boot SPL (u-boot-spl.bin.normal.out) from +sector 0 of the eMMC's main hardware partition. But this conflicts with GPT +partitioning. Fortunately eMMC can alternatively load U-Boot SPL from a backup +position. + +For U-Boot SPL (u-boot-spl.bin.normal.out) starting at sector 2048 (position +0x100000) write the following bytes to the eMMC device after GPT partitioning: + +======= ======================== +Address Bytes +======= ======================== +0x0000 40 02 00 00 00 00 10 00 +0x0290 40 02 00 00 00 00 10 00 +======= ======================== + +With the default configuration U-Boot SPL loads the U-Boot FIT image +(u-boot.itb) from partition 2 (CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=0x2). +When formatting it is recommended to use GUID +BC13C2FF-59E6-4262-A352-B275FD6F7172 for this partition. + +Booting from UART +----------------- + +The boot ROM supports the X-modem protocol to upload +spl/u-boot-spl.bin.normal.out. U-Boot SPL support loading the FIT image +u-boot.itb via the Y-modem protocol. + +Due to restrictions of the boot ROM not all X-modem implementations are +compatible. The package tio (https://github.com/tio/tio) has been found to be +usable. From 74412062797c9bf0bc25c6d20f29b5e71e76a934 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:13 +0200 Subject: [PATCH 13/16] doc: starfive: use consistent formatting Always use ---- for the H2 level. Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- doc/board/starfive/milk-v_mars.rst | 10 +++++----- doc/board/starfive/pine64_star64.rst | 12 ++++++------ doc/board/starfive/visionfive2.rst | 10 +++++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/doc/board/starfive/milk-v_mars.rst b/doc/board/starfive/milk-v_mars.rst index 554932ecfd4..aba9c9c53d4 100644 --- a/doc/board/starfive/milk-v_mars.rst +++ b/doc/board/starfive/milk-v_mars.rst @@ -8,7 +8,7 @@ board. In U-Boot SPL the actual board is detected and the device-tree patched accordingly. Building -~~~~~~~~ +-------- 1. Add the RISC-V toolchain to your PATH. 2. Setup ARCH & cross compilation environment variable: @@ -40,7 +40,7 @@ This will generate the U-Boot SPL image (spl/u-boot-spl.bin.normal.out) as well as the FIT image (u-boot.itb) with OpenSBI and U-Boot. Device-tree selection -~~~~~~~~~~~~~~~~~~~~~ +--------------------- Depending on the board version U-Boot set variable $fdtfile to either starfive/jh7110-starfive-visionfive-2-v1.2a.dtb or @@ -58,14 +58,14 @@ or the configuration variable CONFIG_DEFAULT_FDT_FILE can be used to set to provide a default value. Boot source selection -~~~~~~~~~~~~~~~~~~~~~ +--------------------- The board provides the DIP switches MSEL[1:0] to select the boot device out of SPI flash, eMMC, SD-card, UART. To select booting from SD-card set the DIP switches MSEL[1:0] to 10. Preparing the SD-Card -~~~~~~~~~~~~~~~~~~~~~ +--------------------- The device firmware loads U-Boot SPL (u-boot-spl.bin.normal.out) from the partition with type GUID 2E54B353-1271-4842-806F-E436D6AF6985. You are free @@ -106,6 +106,6 @@ Copy U-Boot to the SD card sudo umount /mnt Booting -~~~~~~~ +------- Once you plugin the sdcard and power up, you should see the U-Boot prompt. diff --git a/doc/board/starfive/pine64_star64.rst b/doc/board/starfive/pine64_star64.rst index 52e9a907917..1df4b68e4a0 100644 --- a/doc/board/starfive/pine64_star64.rst +++ b/doc/board/starfive/pine64_star64.rst @@ -8,7 +8,7 @@ In U-Boot SPL the actual board is detected and the device-tree patched accordingly. Building -~~~~~~~~ +-------- 1. Add the RISC-V toolchain to your PATH. 2. Setup ARCH & cross compilation environment variable: @@ -40,7 +40,7 @@ This will generate the U-Boot SPL image (spl/u-boot-spl.bin.normal.out) as well as the FIT image (u-boot.itb) with OpenSBI and U-Boot. Device-tree selection -~~~~~~~~~~~~~~~~~~~~~ +--------------------- U-Boot will set variable $fdtfile to starfive/jh7110-pine64-star64.dtb. @@ -56,7 +56,7 @@ or the configuration variable CONFIG_DEFAULT_FDT_FILE can be used to set to provide a default value. Boot source selection -~~~~~~~~~~~~~~~~~~~~~ +--------------------- Boot mode is selected by an MSEL-DIP marked S1804 and GPIO_0 position adjacent to the 40pin GPIO header. ON/ONKE and number markings of the MSEL-DIP are @@ -69,7 +69,7 @@ accurate selection. + UART: 11 Preparing the SD-Card -~~~~~~~~~~~~~~~~~~~~~ +--------------------- The device firmware loads U-Boot SPL (u-boot-spl.bin.normal.out) from the partition with type GUID 2E54B353-1271-4842-806F-E436D6AF6985. You are free @@ -110,12 +110,12 @@ Copy U-Boot to the SD card sudo umount /mnt Booting -~~~~~~~ +------- Once you plugin the sdcard and power up, you should see the U-Boot prompt. Serial Number and MAC address issues -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +------------------------------------ U-Boot requires valid EEPROM data to determine which board-specific fix-up to apply at runtime. This affects the size of memory initialized, network mac diff --git a/doc/board/starfive/visionfive2.rst b/doc/board/starfive/visionfive2.rst index 2c68df3ce4d..44e7fcb3a48 100644 --- a/doc/board/starfive/visionfive2.rst +++ b/doc/board/starfive/visionfive2.rst @@ -36,7 +36,7 @@ Currently, the u-boot.itb is used as a dynamic of the OpenSBI FW_DYNAMIC firmware with the latest. Building -~~~~~~~~ +-------- 1. Add the RISC-V toolchain to your PATH. 2. Setup ARCH & cross compilation environment variable: @@ -72,7 +72,7 @@ This will generate the U-Boot SPL image (spl/u-boot-spl.bin.normal.out) as well as the FIT image (u-boot.itb) with OpenSBI and U-Boot. Device-tree selection -~~~~~~~~~~~~~~~~~~~~~ +--------------------- Depending on the board version U-Boot set variable $fdtfile to either starfive/jh7110-starfive-visionfive-2-v1.2a.dtb or @@ -90,7 +90,7 @@ or the configuration variable CONFIG_DEFAULT_FDT_FILE can be used to provide a default value. Flashing -~~~~~~~~ +-------- The device firmware loads U-Boot SPL (u-boot-spl.bin.normal.out) from the partition with type GUID 2E54B353-1271-4842-806F-E436D6AF6985. You are free @@ -133,7 +133,7 @@ Program the SD card sudo umount /mnt Booting -~~~~~~~ +------- The board provides the DIP switches MSEL[1:0] to select the boot device. To select booting from SD-card set the DIP switches MSEL[1:0] to 10. @@ -141,7 +141,7 @@ To select booting from SD-card set the DIP switches MSEL[1:0] to 10. Once you plugin the sdcard and power up, you should see the U-Boot prompt. Sample boot log from StarFive VisionFive2 board -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +----------------------------------------------- .. code-block:: none From 8cb4a4239698c18d8efe15338e72d4b0776a4af3 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:14 +0200 Subject: [PATCH 14/16] doc: starfive: use jh7110_common.rst To avoid duplicate maintenance just include jh7110_common.rst to describe the usage of the different boot sources. Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- doc/board/starfive/milk-v_mars.rst | 12 +-------- doc/board/starfive/pine64_star64.rst | 18 +------------ doc/board/starfive/visionfive2.rst | 39 +--------------------------- 3 files changed, 3 insertions(+), 66 deletions(-) diff --git a/doc/board/starfive/milk-v_mars.rst b/doc/board/starfive/milk-v_mars.rst index aba9c9c53d4..ce4539a46f1 100644 --- a/doc/board/starfive/milk-v_mars.rst +++ b/doc/board/starfive/milk-v_mars.rst @@ -57,13 +57,6 @@ environment or the configuration variable CONFIG_DEFAULT_FDT_FILE can be used to set to provide a default value. -Boot source selection ---------------------- - -The board provides the DIP switches MSEL[1:0] to select the boot device out of -SPI flash, eMMC, SD-card, UART. To select booting from SD-card set the DIP -switches MSEL[1:0] to 10. - Preparing the SD-Card --------------------- @@ -105,7 +98,4 @@ Copy U-Boot to the SD card sudo cp jh7110-starfive-visionfive-2.dtb /mnt/ sudo umount /mnt -Booting -------- - -Once you plugin the sdcard and power up, you should see the U-Boot prompt. +.. include:: jh7110_common.rst diff --git a/doc/board/starfive/pine64_star64.rst b/doc/board/starfive/pine64_star64.rst index 1df4b68e4a0..d1752c452da 100644 --- a/doc/board/starfive/pine64_star64.rst +++ b/doc/board/starfive/pine64_star64.rst @@ -55,19 +55,6 @@ environment or the configuration variable CONFIG_DEFAULT_FDT_FILE can be used to set to provide a default value. -Boot source selection ---------------------- - -Boot mode is selected by an MSEL-DIP marked S1804 and GPIO_0 position adjacent -to the 40pin GPIO header. ON/ONKE and number markings of the MSEL-DIP are -misleading; Instead refer to the ``L`` (0) and ``H`` (1) silkscreen for -accurate selection. - -+ (QSPI) Flash: 00 -+ SD: 01 -+ EMMC: 10 -+ UART: 11 - Preparing the SD-Card --------------------- @@ -109,10 +96,7 @@ Copy U-Boot to the SD card sudo cp jh7110-starfive-visionfive-2.dtb /mnt/ sudo umount /mnt -Booting -------- - -Once you plugin the sdcard and power up, you should see the U-Boot prompt. +.. include:: jh7110_common.rst Serial Number and MAC address issues ------------------------------------ diff --git a/doc/board/starfive/visionfive2.rst b/doc/board/starfive/visionfive2.rst index 44e7fcb3a48..6f3c572f1f8 100644 --- a/doc/board/starfive/visionfive2.rst +++ b/doc/board/starfive/visionfive2.rst @@ -132,13 +132,7 @@ Program the SD card sudo cp jh7110-starfive-visionfive-2.dtb /mnt/ sudo umount /mnt -Booting -------- - -The board provides the DIP switches MSEL[1:0] to select the boot device. -To select booting from SD-card set the DIP switches MSEL[1:0] to 10. - -Once you plugin the sdcard and power up, you should see the U-Boot prompt. +.. include:: jh7110_common.rst Sample boot log from StarFive VisionFive2 board ----------------------------------------------- @@ -479,34 +473,3 @@ Sample boot log from StarFive VisionFive2 board Welcome to Buildroot buildroot login: - -Booting from SPI ----------------- - -Use Building steps from "Booting from MMC using U-Boot SPL" section. - -Partition the SPI in Linux via mtdblock. (Require to boot the board in -SD boot mode by enabling MTD block in Linux) - -Use prebuilt image from here [1], which support to partition the SPI flash. - - -Program the SPI (Require to boot the board in SD boot mode) - -Execute below steps on U-Boot proper, - -.. code-block:: none - - sf probe - fatload mmc 1:3 $kernel_addr_r u-boot.itb - sf update $kernel_addr_r 0x100000 $filesize - - fatload mmc 1:3 $kernel_addr_r u-boot-spl.bin.normal.out - sf update $kernel_addr_r 0x0 $filesize - - -Power off the board - -Change DIP switches MSEL[1:0] are set to 00, select the boot mode to flash - -Power up the board. From fcfe4e7ac005e832764c63c05c2a4ae381dc7d92 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Thu, 24 Apr 2025 14:13:15 +0200 Subject: [PATCH 15/16] doc: jh7110: describe debug UART Provide the settings for using the debug UART in SPL. Reviewed-by: E Shattow Signed-off-by: Heinrich Schuchardt --- doc/board/starfive/jh7110_common.rst | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/board/starfive/jh7110_common.rst b/doc/board/starfive/jh7110_common.rst index fb8d87a1551..4a8058ee5da 100644 --- a/doc/board/starfive/jh7110_common.rst +++ b/doc/board/starfive/jh7110_common.rst @@ -87,3 +87,17 @@ u-boot.itb via the Y-modem protocol. Due to restrictions of the boot ROM not all X-modem implementations are compatible. The package tio (https://github.com/tio/tio) has been found to be usable. + +Debug UART +---------- + +By default the SBI interface is used for the debug UART. But this only works +in main U-Boot. To enable the debug UART in SPL, too, use the following +settings:: + + CONFIG_DEBUG_UART=y + CONFIG_DEBUG_UART_NS16550=y + CONFIG_DEBUG_UART_BASE=0x10000000 + CONFIG_SPL_DEBUG_UART_BASE=0x10000000 + CONFIG_DEBUG_UART_CLOCK=24000000 + CONFIG_DEBUG_UART_SHIFT=2 From 0ded46384952ab74eb7dd54515a3e23bcbb9ca88 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Tue, 22 Apr 2025 20:55:10 +0200 Subject: [PATCH 16/16] configs: add UNIT_TESTS to big-endian Malta boards We currently only run the unit tests on low-endian boards. We should run them on big-endian, too. Reviewed-by: Heiko Schocher Reviewed-by: Daniel Schwierzeck Signed-off-by: Heinrich Schuchardt --- configs/malta64_defconfig | 1 + configs/malta_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/configs/malta64_defconfig b/configs/malta64_defconfig index ec5df0b5a7a..d1211b07f8a 100644 --- a/configs/malta64_defconfig +++ b/configs/malta64_defconfig @@ -46,3 +46,4 @@ CONFIG_PCI_MSC01=y CONFIG_RTC_MC146818=y CONFIG_SYS_NS16550=y CONFIG_SYS_NS16550_PORT_MAPPED=y +CONFIG_UNIT_TEST=y diff --git a/configs/malta_defconfig b/configs/malta_defconfig index ca017c4865d..dfa37d1ddd9 100644 --- a/configs/malta_defconfig +++ b/configs/malta_defconfig @@ -45,3 +45,4 @@ CONFIG_PCI_MSC01=y CONFIG_RTC_MC146818=y CONFIG_SYS_NS16550=y CONFIG_SYS_NS16550_PORT_MAPPED=y +CONFIG_UNIT_TEST=y