Add initial support for K3 Pico-ITX board, in this version, the DRAM information is parsed from DTS "/memory" node. And with UART enabled, the U-Boot serial console works fine now.
Signed-off-by: Yixun Lan <[email protected]> --- arch/riscv/Kconfig | 5 +++++ arch/riscv/cpu/k3/Kconfig | 18 ++++++++++++++++++ arch/riscv/cpu/k3/Makefile | 5 +++++ arch/riscv/cpu/k3/dram.c | 29 +++++++++++++++++++++++++++++ board/spacemit/k3/Kconfig | 30 ++++++++++++++++++++++++++++++ board/spacemit/k3/MAINTAINERS | 8 ++++++++ board/spacemit/k3/Makefile | 5 +++++ board/spacemit/k3/board.c | 4 ++++ include/configs/k3.h | 13 +++++++++++++ 9 files changed, 117 insertions(+) diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index c1b2890f1f3..386241efd4a 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -53,6 +53,9 @@ config TARGET_SIPEED_MAIX config TARGET_SPACEMIT_K1 bool "Support Spacemit K1 SoC" +config TARGET_SPACEMIT_K3 + bool "Support SpacemiT K3 SoC" + config TARGET_STARFIVE_VISIONFIVE2 bool "Support StarFive VisionFive2 Board" select BOARD_LATE_INIT @@ -124,6 +127,7 @@ source "board/sophgo/milkv_duo/Kconfig" source "board/sophgo/milkv_duo_256m/Kconfig" source "board/sophgo/licheerv_nano/Kconfig" source "board/spacemit/k1/Kconfig" +source "board/spacemit/k3/Kconfig" source "board/starfive/visionfive2/Kconfig" source "board/thead/th1520_lpi4a/Kconfig" source "board/xilinx/mbv/Kconfig" @@ -138,6 +142,7 @@ source "arch/riscv/cpu/mpfs/Kconfig" source "arch/riscv/cpu/generic/Kconfig" source "arch/riscv/cpu/jh7110/Kconfig" source "arch/riscv/cpu/k1/Kconfig" +source "arch/riscv/cpu/k3/Kconfig" source "arch/riscv/cpu/k230/Kconfig" source "arch/riscv/cpu/th1520/Kconfig" diff --git a/arch/riscv/cpu/k3/Kconfig b/arch/riscv/cpu/k3/Kconfig new file mode 100644 index 00000000000..5474ac11243 --- /dev/null +++ b/arch/riscv/cpu/k3/Kconfig @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright (C) 2026 Yixun Lan <[email protected]> + +if TARGET_SPACEMIT_K3 + +config SPACEMIT_K3 + bool + select BINMAN + select ARCH_EARLY_INIT_R + select SYS_CACHE_SHIFT_6 + imply CPU + imply CPU_RISCV + imply RISCV_TIMER if RISCV_SMODE + imply CMD_CPU + imply OF_UPSTREAM + +endif diff --git a/arch/riscv/cpu/k3/Makefile b/arch/riscv/cpu/k3/Makefile new file mode 100644 index 00000000000..fba4e4b0a3f --- /dev/null +++ b/arch/riscv/cpu/k3/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright (C) 2026 Yixun Lan <[email protected]> + +obj-y += dram.o diff --git a/arch/riscv/cpu/k3/dram.c b/arch/riscv/cpu/k3/dram.c new file mode 100644 index 00000000000..203d72a5da1 --- /dev/null +++ b/arch/riscv/cpu/k3/dram.c @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2026 Yixun Lan <[email protected]> + */ + +#include <fdtdec.h> +#include <init.h> +#include <linux/sizes.h> +#include <asm/global_data.h> + +DECLARE_GLOBAL_DATA_PTR; + +int dram_init(void) +{ + return fdtdec_setup_mem_size_base(); +} + +int dram_init_banksize(void) +{ + return fdtdec_setup_memory_banksize(); +} + +phys_addr_t board_get_usable_ram_top(phys_size_t total_size) +{ + if (gd->ram_size > SZ_2G) + return gd->ram_base + SZ_2G; + + return gd->ram_base + gd->ram_size; +} diff --git a/board/spacemit/k3/Kconfig b/board/spacemit/k3/Kconfig new file mode 100644 index 00000000000..b0e423d829c --- /dev/null +++ b/board/spacemit/k3/Kconfig @@ -0,0 +1,30 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright (C) 2026 Yixun Lan <[email protected]> + +if TARGET_SPACEMIT_K3 + +config SYS_BOARD + default "k3" + +config SYS_VENDOR + default "spacemit" + +config SYS_CPU + default "k3" + +config SYS_CONFIG_NAME + default "k3" + +config TEXT_BASE + default 0x102000000 + +config SPL_OPENSBI_LOAD_ADDR + hex + default 0x100000000 + +config BOARD_SPECIFIC_OPTIONS + def_bool y + select SPACEMIT_K3 + +endif diff --git a/board/spacemit/k3/MAINTAINERS b/board/spacemit/k3/MAINTAINERS new file mode 100644 index 00000000000..34cf1ed4453 --- /dev/null +++ b/board/spacemit/k3/MAINTAINERS @@ -0,0 +1,8 @@ +SPACEMIT K3 +M: Yixun Lan <[email protected]> +S: Maintained +F: arch/riscv/cpu/k3/ +F: board/spacemit/k3/ +F: configs/spacemit_k3_defconfig +F: include/configs/k3.h +F: arch/riscv/dts/k3-u-boot.dtsi diff --git a/board/spacemit/k3/Makefile b/board/spacemit/k3/Makefile new file mode 100644 index 00000000000..bd5343be789 --- /dev/null +++ b/board/spacemit/k3/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright (C) 2026 Yixun Lan <[email protected]> + +obj-y := board.o diff --git a/board/spacemit/k3/board.c b/board/spacemit/k3/board.c new file mode 100644 index 00000000000..29994e49ce8 --- /dev/null +++ b/board/spacemit/k3/board.c @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Copyright (C) 2026 Yixun Lan <[email protected]> + */ diff --git a/include/configs/k3.h b/include/configs/k3.h new file mode 100644 index 00000000000..83e4945d2b3 --- /dev/null +++ b/include/configs/k3.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2026 Yixun Lan <[email protected]> + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#define CFG_SYS_NS16550_IER 0x40 + +#define RISCV_SMODE_TIMER_FREQ 24000000 + +#endif /* __CONFIG_H */ -- 2.55.0
