[PATCH v3] generic: mips: support harts to boot from mips_warm_boot
Anup Patel
anup at brainfault.org
Wed Aug 27 22:32:05 PDT 2025
On Thu, Jul 24, 2025 at 2:10 AM Chao-ying Fu <icebergfu at gmail.com> wrote:
>
> We program reset base for harts (other than hart 0) to boot at
> mips_warm_boot that jumps to _start_warm. This helps to skip some code
> sequence to speed up.
>
> Signed-off-by: Chao-ying Fu <cfu at mips.com>
> ---
> platform/generic/mips/mips_warm_boot.S | 20 ++++++++++++++++++++
> platform/generic/mips/objects.mk | 2 +-
> platform/generic/mips/p8700.c | 5 +++++
> 3 files changed, 26 insertions(+), 1 deletion(-)
> create mode 100644 platform/generic/mips/mips_warm_boot.S
>
> diff --git a/platform/generic/mips/mips_warm_boot.S b/platform/generic/mips/mips_warm_boot.S
> new file mode 100644
> index 0000000..25cdb83
> --- /dev/null
> +++ b/platform/generic/mips/mips_warm_boot.S
> @@ -0,0 +1,20 @@
> +/*
> + * SPDX-License-Identifier: BSD-2-Clause
> + *
> + * Copyright (c) 2025 MIPS
> + *
> + */
> + .text
> + .align 12
> + .globl mips_warm_boot
> +mips_warm_boot:
> + j _start_warm
> + .align 2
> +nmi_vector:
> + j _start_warm
> + .align 2
> +cacheerr_vector:
> + j _start_warm
> + .align 2
> +debugexc_vector:
> + j _start_warm
nmi_vector, cacheerr_vector, and debugexc_vector are not used
anywhere so I have dropped these at the time of merging. Please
send separate patches to add these when they are being used
somewhere.
Reviewed-by: Anup Patel <anup at brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> diff --git a/platform/generic/mips/objects.mk b/platform/generic/mips/objects.mk
> index bbbc15a..a08c4c6 100644
> --- a/platform/generic/mips/objects.mk
> +++ b/platform/generic/mips/objects.mk
> @@ -4,5 +4,5 @@
>
> ifeq ($(PLATFORM_RISCV_XLEN), 64)
> carray-platform_override_modules-$(CONFIG_PLATFORM_MIPS_P8700) += mips_p8700
> -platform-objs-$(CONFIG_PLATFORM_MIPS_P8700) += mips/p8700.o
> +platform-objs-$(CONFIG_PLATFORM_MIPS_P8700) += mips/p8700.o mips/mips_warm_boot.o
> endif
> diff --git a/platform/generic/mips/p8700.c b/platform/generic/mips/p8700.c
> index 888a45c..d3e015b 100644
> --- a/platform/generic/mips/p8700.c
> +++ b/platform/generic/mips/p8700.c
> @@ -16,6 +16,8 @@
> #include <mips/p8700.h>
> #include <mips/mips-cm.h>
>
> +extern void mips_warm_boot(void);
> +
> static unsigned long mips_csr_read_num(int csr_num)
> {
> #define switchcase_csr_read(__csr_num, __val) \
> @@ -150,6 +152,9 @@ static int mips_hart_start(u32 hartid, ulong saddr)
> if (hartid == 0)
> return SBI_ENOTSUPP;
>
> + /* Change reset base to mips_warm_boot */
> + write_gcr_co_reset_base(hartid, (unsigned long)mips_warm_boot, local_p);
> +
> if (cpu_hart(hartid) == 0) {
> /* Ensure its coherency is disabled */
> write_gcr_co_coherence(hartid, 0, local_p);
> --
> 2.47.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list