[PATCH 02/12] include: sbi: Store the hart index in struct sbi_scratch
Anup Patel
anup at brainfault.org
Tue Sep 24 23:44:06 PDT 2024
On Fri, Aug 30, 2024 at 10:31 PM Samuel Holland
<samuel.holland at sifive.com> wrote:
>
> This is a more efficient way to get the index of the current hart than
> calling a function to loop through the hartindex -> hartid lookup table.
Good improvement.
>
> Signed-off-by: Samuel Holland <samuel.holland at sifive.com>
LGTM.
Reviewed-by: Anup Patel <anup at brainfault.org>
Applied this patch to the riscv/opensbi repo.
Thanks,
Anup
> ---
>
> firmware/fw_base.S | 2 ++
> include/sbi/sbi_scratch.h | 10 +++++++++-
> 2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/firmware/fw_base.S b/firmware/fw_base.S
> index b950c0b8..30dc28f0 100644
> --- a/firmware/fw_base.S
> +++ b/firmware/fw_base.S
> @@ -218,6 +218,8 @@ _scratch_init:
> #endif
> REG_S a0, SBI_SCRATCH_OPTIONS_OFFSET(tp)
> MOV_3R a0, s0, a1, s1, a2, s2
> + /* Store hart index in scratch space */
> + REG_S t1, SBI_SCRATCH_HARTINDEX_OFFSET(tp)
> /* Move to next scratch space */
> add t1, t1, t2
> blt t1, s7, _scratch_init
> diff --git a/include/sbi/sbi_scratch.h b/include/sbi/sbi_scratch.h
> index 12e6a983..9ae4f891 100644
> --- a/include/sbi/sbi_scratch.h
> +++ b/include/sbi/sbi_scratch.h
> @@ -42,8 +42,10 @@
> #define SBI_SCRATCH_TMP0_OFFSET (12 * __SIZEOF_POINTER__)
> /** Offset of options member in sbi_scratch */
> #define SBI_SCRATCH_OPTIONS_OFFSET (13 * __SIZEOF_POINTER__)
> +/** Offset of hartindex member in sbi_scratch */
> +#define SBI_SCRATCH_HARTINDEX_OFFSET (14 * __SIZEOF_POINTER__)
> /** Offset of extra space in sbi_scratch */
> -#define SBI_SCRATCH_EXTRA_SPACE_OFFSET (14 * __SIZEOF_POINTER__)
> +#define SBI_SCRATCH_EXTRA_SPACE_OFFSET (15 * __SIZEOF_POINTER__)
> /** Maximum size of sbi_scratch (4KB) */
> #define SBI_SCRATCH_SIZE (0x1000)
>
> @@ -83,6 +85,8 @@ struct sbi_scratch {
> unsigned long tmp0;
> /** Options for OpenSBI library */
> unsigned long options;
> + /** Index of the hart */
> + unsigned long hartindex;
> };
>
> /**
> @@ -202,6 +206,10 @@ do { \
> = (__type)(__ptr); \
> } while (0)
>
> +/** Get the hart index of the current hart */
> +#define current_hartindex() \
> + (sbi_scratch_thishart_ptr()->hartindex)
> +
> /** Last HART index having a sbi_scratch pointer */
> extern u32 last_hartindex_having_scratch;
>
> --
> 2.45.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list