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]>

Reply via email to