summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorBin Meng <bmeng.cn@gmail.com>2021-07-10 17:00:31 +0300
committerAnup Patel <anup@brainfault.org>2021-07-11 09:11:50 +0300
commit14c7f71c0da641ece1b91ef0bde190f66c980a3e (patch)
tree262d89849c3faf6de46ff0e111bfe1c98c9c5f67 /firmware
parent0e12aa8dee632f67dbb458aa5d3ee38f7db4e70c (diff)
downloadopensbi-14c7f71c0da641ece1b91ef0bde190f66c980a3e.tar.xz
firmware: Minor optimization in _scratch_init()
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@gmail.com> Reviewed-by: Xiang W <wxjstz@126.com> Reviewed-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'firmware')
-rw-r--r--firmware/fw_base.S13
1 files 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 */