[PATCH 1/2] riscv: cpu: cv1800b: Add support for cv1800b SoC
Heinrich Schuchardt
heinrich.schuchardt at canonical.com
Fri Feb 2 12:11:44 CET 2024
On 02.02.24 10:37, Kongyang Liu wrote:
> Add Sophgo cv1800b SoC to support RISC-V arch.
>
> Signed-off-by: Kongyang Liu <seashell11234455 at gmail.com>
>
> ---
>
> arch/riscv/Kconfig | 1 +
> arch/riscv/cpu/cv1800b/Kconfig | 12 ++++++++++++
> arch/riscv/cpu/cv1800b/Makefile | 6 ++++++
> arch/riscv/cpu/cv1800b/cpu.c | 22 ++++++++++++++++++++++
> arch/riscv/cpu/cv1800b/dram.c | 21 +++++++++++++++++++++
> board/sophgo/milkv_duo/Kconfig | 4 ++--
> 6 files changed, 64 insertions(+), 2 deletions(-)
> create mode 100644 arch/riscv/cpu/cv1800b/Kconfig
> create mode 100644 arch/riscv/cpu/cv1800b/Makefile
> create mode 100644 arch/riscv/cpu/cv1800b/cpu.c
> create mode 100644 arch/riscv/cpu/cv1800b/dram.c
>
> diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
> index ac52c5e6da..2c92b0d9f6 100644
> --- a/arch/riscv/Kconfig
> +++ b/arch/riscv/Kconfig
> @@ -93,6 +93,7 @@ source "board/xilinx/mbv/Kconfig"
>
> # platform-specific options below
> source "arch/riscv/cpu/andesv5/Kconfig"
> +source "arch/riscv/cpu/cv1800b/Kconfig"
> source "arch/riscv/cpu/fu540/Kconfig"
> source "arch/riscv/cpu/fu740/Kconfig"
> source "arch/riscv/cpu/generic/Kconfig"
> diff --git a/arch/riscv/cpu/cv1800b/Kconfig b/arch/riscv/cpu/cv1800b/Kconfig
> new file mode 100644
> index 0000000000..7225b1210c
> --- /dev/null
> +++ b/arch/riscv/cpu/cv1800b/Kconfig
> @@ -0,0 +1,12 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# Copyright (c) 2024, Kongyang Liu <seashell11234455 at gmail.com>
> +
> +config SOPHGO_CV1800B
> + bool
> + select ARCH_EARLY_INIT_R
> + select SYS_CACHE_SHIFT_6
> + imply CPU
> + imply CPU_RISCV
> + imply RISCV_TIMER
> + imply CMD_CPU
> diff --git a/arch/riscv/cpu/cv1800b/Makefile b/arch/riscv/cpu/cv1800b/Makefile
> new file mode 100644
> index 0000000000..da12e0f64e
> --- /dev/null
> +++ b/arch/riscv/cpu/cv1800b/Makefile
> @@ -0,0 +1,6 @@
> +# SPDX-License-Identifier: GPL-2.0+
> +#
> +# Copyright (c) 2024, Kongyang Liu <seashell11234455 at gmail.com>
> +
> +obj-y += dram.o
> +obj-y += cpu.o
> diff --git a/arch/riscv/cpu/cv1800b/cpu.c b/arch/riscv/cpu/cv1800b/cpu.c
> new file mode 100644
> index 0000000000..f13c18942f
> --- /dev/null
> +++ b/arch/riscv/cpu/cv1800b/cpu.c
> @@ -0,0 +1,22 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2018, Bin Meng <bmeng.cn at gmail.com>
> + */
> +
> +#include <irq_func.h>
> +#include <asm/cache.h>
> +
> +/*
> + * cleanup_before_linux() is called just before we call linux
> + * it prepares the processor for linux
> + *
> + * we disable interrupt and caches.
> + */
> +int cleanup_before_linux(void)
> +{
> + disable_interrupts();
> +
> + cache_flush();
> +
> + return 0;
> +}
Thank you for enabling another board.
The same cleanup_before_linux() code can be found in:
arch/riscv/cpu/fu740/cpu.c
arch/riscv/cpu/andesv5/cpu.c
arch/riscv/cpu/fu540/cpu.c
arch/riscv/cpu/generic/cpu.c
arch/riscv/cpu/jh7110/cpu.c
We should try to avoid this code duplication.
disable_interrupts() is already called by bootm_disable_interrupts().
flushing the instruction cache after loading a binary is not
architecture specific either. This is why bootm_load_os() calls
flush_cache().
It should be sufficient to let weak function flush_dcache_range() in
arch/riscv/lib/cache.c call flush_dcache_all(). And then remove all
cleanup_before_linux() implementations.
Best regards
Heinrich
> diff --git a/arch/riscv/cpu/cv1800b/dram.c b/arch/riscv/cpu/cv1800b/dram.c
> new file mode 100644
> index 0000000000..91007c0a3d
> --- /dev/null
> +++ b/arch/riscv/cpu/cv1800b/dram.c
> @@ -0,0 +1,21 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright (C) 2018, Bin Meng <bmeng.cn at gmail.com>
> + */
> +
> +#include <fdtdec.h>
> +#include <init.h>
> +#include <asm/global_data.h>
> +#include <linux/sizes.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/sophgo/milkv_duo/Kconfig b/board/sophgo/milkv_duo/Kconfig
> index 2a458f291c..040a7487f1 100644
> --- a/board/sophgo/milkv_duo/Kconfig
> +++ b/board/sophgo/milkv_duo/Kconfig
> @@ -7,7 +7,7 @@ config SYS_VENDOR
> default "sophgo"
>
> config SYS_CPU
> - default "generic"
> + default "cv1800b"
>
> config SYS_CONFIG_NAME
> default "milkv_duo"
> @@ -23,6 +23,6 @@ config ENV_SECT_SIZE
>
> config BOARD_SPECIFIC_OPTIONS
> def_bool y
> - select GENERIC_RISCV
> + select SOPHGO_CV1800B
>
> endif
More information about the U-Boot
mailing list