[PATCH v2] firmware: Minor optimization in _scratch_init()
Anup Patel
anup at brainfault.org
Sat Jul 10 23:23:21 PDT 2021
On Sat, Jul 10, 2021 at 7:30 PM Bin Meng <bmeng.cn at gmail.com> wrote:
>
> Before entering _scratch_init(), register t3 already holds a copy
> of the firmware end address, hence there is no need to calculate
> it again. This reduces 3 instructions in each _scratch_init() loop.
>
> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
> Reviewed-by: Xiang W <wxjstz at 126.com>
> Reviewed-by: Atish Patra <atish.patra at wdc.com>
Applied this patch to the riscv/opensbi repo
Thanks,
Anup
>
> ---
>
> Changes in v2:
> - add a comment block before _scratch_init() documenting all registers
> used in the loop block
>
> firmware/fw_base.S | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/firmware/fw_base.S b/firmware/fw_base.S
> index a5ce946..8e40562 100644
> --- a/firmware/fw_base.S
> +++ b/firmware/fw_base.S
> @@ -278,6 +278,14 @@ _bss_zero:
> /* hartid 0 is mandated by ISA */
> li t1, 0
> _scratch_init:
> + /*
> + * The following registers hold values that are computed before
> + * entering this block, and should remain unchanged.
> + *
> + * t3 -> the firmware end address
> + * s7 -> HART count
> + * s8 -> HART stack size
> + */
> add tp, t3, zero
> mul a5, s8, t1
> sub tp, tp, a5
> @@ -287,10 +295,7 @@ _scratch_init:
> /* Initialize scratch space */
> /* Store fw_start and fw_size in scratch space */
> lla a4, _fw_start
> - lla a5, _fw_end
> - mul t0, s7, s8
> - add a5, a5, t0
> - sub a5, a5, a4
> + sub a5, t3, a4
> REG_S a4, SBI_SCRATCH_FW_START_OFFSET(tp)
> REG_S a5, SBI_SCRATCH_FW_SIZE_OFFSET(tp)
> /* Store next arg1 in scratch space */
> --
> 2.25.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list