Hi Yixun, On 10/2/26 17:34, Yixun Lan wrote: > 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 | 21 +++++++++++++++++++++ > board/spacemit/k3/Kconfig | 30 ++++++++++++++++++++++++++++++ > board/spacemit/k3/MAINTAINERS | 8 ++++++++ > include/configs/spacemit-k3.h | 13 +++++++++++++ > 7 files changed, 100 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..e20d35dc1bf > --- /dev/null > +++ b/arch/riscv/cpu/k3/dram.c > @@ -0,0 +1,21 @@ > +// 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(); > +} > diff --git a/board/spacemit/k3/Kconfig b/board/spacemit/k3/Kconfig > new file mode 100644 > index 00000000000..1a63c73b6bb > --- /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" Let's arbitrarily change user-facing SYS_BOARD to "spacemit_k3" stem of u-boot config filename "spacemit_k3_defconfig": +config SYS_BOARD - default "k3" + default "spacemit_k3" The use of SYS_BOARD is compiled-in as various runtime outputs e.g. SMBIOS data structure. I think "spacemit_k3" is not a very interesting or descriptive name to communicate all the boards that may be supported, but it is better for a user to see this defconfig filename stem than simply "k3" as the board name. I do not have any better suggestion because it is a compile-time substitution and board selection is likely to be at runtime. > + > +config SYS_VENDOR > + default "spacemit" > + > +config SYS_CPU > + default "k3" > + > +config SYS_CONFIG_NAME > + default "spacemit-k3" > + Looks good, thanks for picking up that rename. > +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/include/configs/spacemit-k3.h b/include/configs/spacemit-k3.h > new file mode 100644 > index 00000000000..9dd545e2a3b > --- /dev/null > +++ b/include/configs/spacemit-k3.h > @@ -0,0 +1,13 @@ > +/* SPDX-License-Identifier: GPL-2.0-or-later */ > +/* > + * Copyright (C) 2026 Yixun Lan <[email protected]> > + */ > + > +#ifndef __SPACEMIT_K3_H > +#define __SPACEMIT_K3_H > + > +#define CFG_SYS_NS16550_IER 0x40 > + > +#define RISCV_SMODE_TIMER_FREQ 24000000 > + > +#endif /* __SPACEMIT_K3_H */ > With that, looks good to me. Reviewed-by: E Shattow <[email protected]>
