[PATCH 1/2] riscv: cpu: cv1800b: Add support for cv1800b SoC

Kongyang Liu seashell11234455 at gmail.com
Sat Feb 3 15:02:09 CET 2024


Heinrich Schuchardt <heinrich.schuchardt at canonical.com> 于2024年2月2日周五 19:11写道:
>
> 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.
>

Thanks for your explanation.

Currently, we have only implemented cache for SoC cv1800b, and for the sake
of compatibility, the remaining code has been simply copied from the generic
folder without a thorough examination.

If this function is unnecessary, it will be removed in the next version.

Best regards
Kongyang Liu

> 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