@@ -58,9 +58,6 @@ reset__find_lookup_start:
5858
5959 set LOOKUP_START i
6060
61- # clear LR/SC reservation set
62- set reservation_set null
63-
6461 # read initial CSR values
6562 read mtime {{CSRS}} "{{ 'time'|csr }}"
6663 read mtimeh {{CSRS}} "{{ 'timeh'|csr }}"
@@ -69,17 +66,35 @@ reset__find_lookup_start:
6966 read minstret {{CSRS}} "{{ 'minstret'|csr }}"
7067 read minstreth {{CSRS}} "{{ 'minstreth'|csr }}"
7168
72- # start executing code at address 0
73- set pc 0
74- set icache_var null
75- set __etext 0
76- set STATE "running"
77-
78- # schedule time update
69+ # reset time/cycle reference point
7970 set last_time_update @time
8071 set last_cycle_update @tick
8172 set next_time_update @time
8273
74+ # reset icache
75+ set icache_var null
76+ set __etext 0
77+
78+ # reset hart state as per machine-level ISA
79+
80+ # reset MIE and MPRV to 0
81+ read mstatus {{CSRS}} "{{ 'mstatus'|csr }}"
82+ # MPRV -
83+ # MIE -
84+ op and mstatus mstatus 0b11111111111111011111111111110111
85+ write mstatus {{CSRS}} "{{ 'mstatus'|csr }}"
86+
87+ # set pc to reset vector
88+ set pc 0
89+
90+ # set mcause to 0, since we don't distinguish different reset conditions
91+ write 0 {{CSRS}} "{{ 'mcause'|csr }}"
92+
93+ # clear LR/SC reservation set
94+ set reservation_set null
95+
96+ set STATE "running"
97+
8398main:
8499 jump main__skip_time_update lessThan @time next_time_update
85100
0 commit comments