Add support for the BeagleBoard.org BeagleV-Ahead, based on the T-Head TH1520 SoC with 4 GB of LPDDR4X.
The TH1520 SoC support and the devicetree are already upstream, so only a board directory, a U-Boot devicetree include and a defconfig are needed. As on the Lichee Pi 4A, the SPL is loaded into SRAM through fastboot and starts OpenSBI and U-Boot from a FIT generated by binman. The board has a single rank of memory, so the DDR firmware must be built from lpddr4x-3733-singlerank.lua instead of the dual rank configuration used by the Lichee Pi 4A. Signed-off-by: Thomas Perrot <[email protected]> --- arch/riscv/Kconfig | 9 ++ arch/riscv/dts/th1520-beaglev-ahead-u-boot.dtsi | 32 +++++++ board/beagle/beaglev_ahead/Kconfig | 43 +++++++++ board/beagle/beaglev_ahead/MAINTAINERS | 8 ++ board/beagle/beaglev_ahead/Makefile | 7 ++ board/beagle/beaglev_ahead/board.c | 14 +++ board/beagle/beaglev_ahead/spl.c | 51 +++++++++++ configs/beaglev_ahead_defconfig | 110 ++++++++++++++++++++++++ include/configs/beaglev_ahead.h | 20 +++++ 9 files changed, 294 insertions(+) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index ad7589123c6c..20bf9b54d652 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -20,6 +20,14 @@ config TARGET_BANANAPI_F3 config TARGET_BEAGLEBOARD_BEAGLEVFIRE bool "Support BeagleBoard BeagleV-Fire Board (based on Microchip MPFS)" +config TARGET_BEAGLEV_AHEAD + bool "Support BeagleBoard BeagleV-Ahead Board (based on T-Head TH1520)" + select SYS_CACHE_SHIFT_6 + help + The BeagleBoard.org BeagleV-Ahead is a single board computer based on + the T-Head TH1520 SoC (4x Xuantie C910), with 4 GB of LPDDR4X and + 16 GB of eMMC. + config TARGET_K230_CANMV bool "Support K230 CanMV Board" @@ -109,6 +117,7 @@ config SPL_ZERO_MEM_BEFORE_USE source "board/andestech/ae350/Kconfig" source "board/andestech/voyager/Kconfig" source "board/aspeed/ibex_ast2700/Kconfig" +source "board/beagle/beaglev_ahead/Kconfig" source "board/beagle/beaglev_fire/Kconfig" source "board/canaan/k230_canmv/Kconfig" source "board/emulation/qemu-riscv/Kconfig" diff --git a/arch/riscv/dts/th1520-beaglev-ahead-u-boot.dtsi b/arch/riscv/dts/th1520-beaglev-ahead-u-boot.dtsi new file mode 100644 index 000000000000..b5e77bdf9d06 --- /dev/null +++ b/arch/riscv/dts/th1520-beaglev-ahead-u-boot.dtsi @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2025 Yao Zi <[email protected]> + * Copyright (C) 2026 Thomas Perrot <[email protected]> + */ + +#include "th1520-u-boot.dtsi" +#include "thead-th1520-binman.dtsi" + +&{/memory@0} { + bootph-pre-ram; +}; + +&clk { + bootph-some-ram; +}; + +&padctrl0_apsys { + bootph-some-ram; +}; + +&uart0_pins { + bootph-some-ram; + + tx-pins { + bootph-some-ram; + }; + + rx-pins { + bootph-some-ram; + }; +}; diff --git a/board/beagle/beaglev_ahead/Kconfig b/board/beagle/beaglev_ahead/Kconfig new file mode 100644 index 000000000000..f0c4fe54678a --- /dev/null +++ b/board/beagle/beaglev_ahead/Kconfig @@ -0,0 +1,43 @@ +if TARGET_BEAGLEV_AHEAD + +config ARCH_THEAD + bool + default y + +config SYS_BOARD + default "beaglev_ahead" + +config SYS_VENDOR + default "beagle" + +config SYS_CPU + default "th1520" + +config SYS_CONFIG_NAME + default "beaglev_ahead" + +config TEXT_BASE + default 0x01b00000 if SPL + default 0x01c00000 if !RISCV_SMODE + default 0x01c00000 if RISCV_SMODE + +config SPL_TEXT_BASE + default 0xffe0000000 + +config SPL_OPENSBI_LOAD_ADDR + default 0x80000000 + +config BOARD_SPECIFIC_OPTIONS + def_bool y + select ARCH_EARLY_INIT_R + select THEAD_TH1520 + imply CPU + imply CPU_RISCV + imply RISCV_TIMER if RISCV_SMODE + imply CMD_CPU + imply SMP + imply SUPPORT_OF_CONTROL + imply OF_CONTROL + imply OF_REAL + +endif diff --git a/board/beagle/beaglev_ahead/MAINTAINERS b/board/beagle/beaglev_ahead/MAINTAINERS new file mode 100644 index 000000000000..7d6a162863b0 --- /dev/null +++ b/board/beagle/beaglev_ahead/MAINTAINERS @@ -0,0 +1,8 @@ +BeagleBoard BeagleV-Ahead +M: Thomas Perrot <[email protected]> +S: Maintained +F: arch/riscv/dts/th1520-beaglev-ahead-u-boot.dtsi +F: board/beagle/beaglev_ahead/ +F: configs/beaglev_ahead_defconfig +F: doc/board/beagle/beaglev_ahead.rst +F: include/configs/beaglev_ahead.h diff --git a/board/beagle/beaglev_ahead/Makefile b/board/beagle/beaglev_ahead/Makefile new file mode 100644 index 000000000000..ab3c61a10eca --- /dev/null +++ b/board/beagle/beaglev_ahead/Makefile @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (c) 2023, Yixun Lan <[email protected]> +# Copyright (c) 2026, Thomas Perrot <[email protected]> + +obj-y += board.o +obj-$(CONFIG_XPL_BUILD) += spl.o diff --git a/board/beagle/beaglev_ahead/board.c b/board/beagle/beaglev_ahead/board.c new file mode 100644 index 000000000000..32c3f3205078 --- /dev/null +++ b/board/beagle/beaglev_ahead/board.c @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2023, Yixun Lan <[email protected]> + * Copyright (c) 2026, Thomas Perrot <[email protected]> + */ + +#include <cpu_func.h> + +int board_init(void) +{ + enable_caches(); + + return 0; +} diff --git a/board/beagle/beaglev_ahead/spl.c b/board/beagle/beaglev_ahead/spl.c new file mode 100644 index 000000000000..d75fa6f3eff7 --- /dev/null +++ b/board/beagle/beaglev_ahead/spl.c @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2025, Yao Zi <[email protected]> + */ + +#include <asm/io.h> +#include <asm/spl.h> +#include <asm/arch/cpu.h> +#include <asm/arch/spl.h> +#include <cpu_func.h> +#include <dm.h> +#include <hang.h> +#include <spl.h> + +u32 spl_boot_device(void) +{ + /* + * We don't bother to load proper U-Boot from an external device as + * it fits in the integrated SRAM nicely. + */ + return BOOT_DEVICE_RAM; +} + +void board_init_f(ulong dummy) +{ + int ret = spl_early_init(); + struct udevice *dev; + + if (ret) + panic("spl_early_init() failed %d\n", ret); + + preloader_console_init(); + + /* + * Manually bind CPU ahead of time to make sure in-core timers are + * available in SPL. + */ + ret = uclass_get_device(UCLASS_CPU, 0, &dev); + if (ret) + panic("failed to bind CPU: %d\n", ret); + + riscv_cpu_setup(); + th1520_kick_secondary_cores(); + + spl_dram_init(); + + icache_enable(); + dcache_enable(); + + th1520_invalidate_pmp(); +} diff --git a/configs/beaglev_ahead_defconfig b/configs/beaglev_ahead_defconfig new file mode 100644 index 000000000000..1ababbd63f2a --- /dev/null +++ b/configs/beaglev_ahead_defconfig @@ -0,0 +1,110 @@ +CONFIG_RISCV=y +CONFIG_SYS_MALLOC_LEN=0x800000 +CONFIG_SYS_MALLOC_F_LEN=0x10000 +CONFIG_SPL_GPIO=y +CONFIG_NR_DRAM_BANKS=1 +CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y +CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80200000 +CONFIG_DM_GPIO=y +CONFIG_DEFAULT_DEVICE_TREE="thead/th1520-beaglev-ahead" +CONFIG_SPL_STACK=0xffe0170000 +CONFIG_SPL_BSS_START_ADDR=0xffe0160000 +CONFIG_SPL_BSS_MAX_SIZE=0x10000 +CONFIG_SYS_LOAD_ADDR=0x80200000 +CONFIG_SPL=y +CONFIG_TARGET_BEAGLEV_AHEAD=y +CONFIG_ARCH_RV64I=y +CONFIG_RISCV_SMODE=y +CONFIG_SYS_BOOT_GET_CMDLINE=y +CONFIG_SYS_BOOT_GET_KBD=y +# CONFIG_EFI_LOADER is not set +CONFIG_FIT=y +# CONFIG_FIT_FULL_CHECK is not set +# CONFIG_FIT_PRINT is not set +CONFIG_SPL_LOAD_FIT_ADDRESS=0xffe0040000 +# CONFIG_BOOTSTD is not set +CONFIG_DISTRO_DEFAULTS=y +CONFIG_BOOTARGS_SUBST=y +CONFIG_BOOTCOMMAND="" +CONFIG_DEFAULT_FDT_FILE="thead/th1520-beaglev-ahead.dtb" +CONFIG_SYS_CBSIZE=256 +CONFIG_SYS_PBSIZE=276 +CONFIG_LOG=y +CONFIG_DISPLAY_CPUINFO=y +CONFIG_DISPLAY_BOARDINFO=y +CONFIG_DISPLAY_BOARDINFO_LATE=y +CONFIG_SPL_MAX_SIZE=0x40000 +# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set +CONFIG_SPL_HAVE_INIT_STACK=y +CONFIG_SPL_SYS_MALLOC=y +CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y +CONFIG_SPL_CUSTOM_SYS_MALLOC_ADDR=0x10000000 +CONFIG_SPL_SYS_MALLOC_SIZE=0x400000 +CONFIG_SPL_RAM_DEVICE=y +CONFIG_SYS_PROMPT="Ahead=> " +CONFIG_CMD_CONFIG=y +CONFIG_CMD_LICENSE=y +CONFIG_CMD_BOOTZ=y +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set +CONFIG_CMD_BOOTMENU=y +# CONFIG_CMD_ELF is not set +# CONFIG_CMD_IMI is not set +# CONFIG_CMD_XIMG is not set +# CONFIG_CMD_EXPORTENV is not set +# CONFIG_CMD_IMPORTENV is not set +# CONFIG_CMD_EDITENV is not set +# CONFIG_CMD_SAVEENV is not set +# CONFIG_CMD_CRC32 is not set +# CONFIG_CMD_MEMORY is not set +# CONFIG_CMD_LZMADEC is not set +# CONFIG_CMD_UNLZ4 is not set +# CONFIG_CMD_UNZIP is not set +CONFIG_CMD_GPIO=y +# CONFIG_CMD_LOADB is not set +# CONFIG_CMD_LOADS is not set +CONFIG_CMD_MMC=y +CONFIG_MMC_SPEED_MODE_SET=y +# CONFIG_CMD_ITEST is not set +# CONFIG_CMD_SOURCE is not set +# CONFIG_CMD_SETEXPR is not set +# CONFIG_CMD_SLEEP is not set +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_ENV_RELOC_GD_ENV_ADDR=y +CONFIG_VERSION_VARIABLE=y +CONFIG_NET_RANDOM_ETHADDR=y +# CONFIG_BLOCK_CACHE is not set +CONFIG_DWAPB_GPIO=y +# CONFIG_I2C is not set +# CONFIG_INPUT is not set +CONFIG_MMC=y +CONFIG_MMC_IO_VOLTAGE=y +CONFIG_MMC_UHS_SUPPORT=y +CONFIG_MMC_HS400_ES_SUPPORT=y +CONFIG_MMC_HS400_SUPPORT=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_ADMA=y +CONFIG_MMC_SDHCI_SNPS=y +# CONFIG_MTD is not set +CONFIG_DM_MDIO=y +CONFIG_DM_ETH_PHY=y +CONFIG_ETH_DESIGNWARE=y +CONFIG_ETH_DESIGNWARE_THEAD=y +CONFIG_PHY_REALTEK=y +CONFIG_PINCTRL=y +# CONFIG_POWER is not set +CONFIG_RAM=y +CONFIG_SPL_RAM=y +CONFIG_SPL_THEAD_TH1520_DDR=y +CONFIG_SYS_NS16550=y +CONFIG_AES=y +CONFIG_BLAKE2=y +CONFIG_SHA512=y +CONFIG_LZ4=y +CONFIG_LZMA=y +CONFIG_LZO=y +CONFIG_ZLIB_UNCOMPRESS=y +CONFIG_BZIP2=y +CONFIG_ZSTD=y +CONFIG_LIB_RATIONAL=y diff --git a/include/configs/beaglev_ahead.h b/include/configs/beaglev_ahead.h new file mode 100644 index 000000000000..ac5df86890a3 --- /dev/null +++ b/include/configs/beaglev_ahead.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (c) 2023 Yixun Lan <[email protected]> + * Copyright (c) 2026 Thomas Perrot <[email protected]> + */ + +#ifndef __BEAGLEV_AHEAD_H +#define __BEAGLEV_AHEAD_H + +#include <linux/sizes.h> + +#define CFG_SYS_NS16550_CLK 100000000 +#define CFG_SYS_SDRAM_BASE 0x00000000 + +/* Environment options */ + +#define CFG_EXTRA_ENV_SETTINGS \ + "PS1=[BeagleV-Ahead]# \0" + +#endif /* __BEAGLEV_AHEAD_H */ -- 2.55.0
