@@ -238,6 +238,7 @@ struct OtIbexWrapperState {
238
238
uint8_t qemu_version ;
239
239
bool lc_ignore ;
240
240
bool alias_mode ;
241
+ bool dv_sim_status_exit ;
241
242
CharBackend chr ;
242
243
};
243
244
@@ -1136,30 +1137,39 @@ static void ot_ibex_wrapper_write_dv_sim_status(OtIbexWrapperState *s,
1136
1137
(void )reg ;
1137
1138
1138
1139
ot_ibex_wrapper_status_report (s , value );
1139
- switch (value & DV_SIM_STATUS_CODE_MASK ) {
1140
- case TEST_STATUS_PASSED :
1141
- trace_ot_ibex_wrapper_exit (s -> ot_id , "DV SIM success, exiting" , 0 );
1142
- qemu_system_shutdown_request_with_code (SHUTDOWN_CAUSE_GUEST_SHUTDOWN ,
1143
- 0 );
1144
- break ;
1145
- case TEST_STATUS_FAILED : {
1146
- uint32_t info = SHARED_FIELD_EX32 (value , DV_SIM_STATUS_INFO );
1147
- int ret ;
1148
- if (info == 0 ) {
1149
- /* no extra info */
1150
- ret = 1 ;
1151
- } else {
1152
- ret = (int )(info & 0x7fu );
1140
+
1141
+ if (s -> dv_sim_status_exit ) {
1142
+ switch (value & DV_SIM_STATUS_CODE_MASK ) {
1143
+ case TEST_STATUS_PASSED :
1144
+ trace_ot_ibex_wrapper_exit (s -> ot_id , "DV SIM success, exiting" , 0 );
1145
+ qemu_system_shutdown_request_with_code (
1146
+ SHUTDOWN_CAUSE_GUEST_SHUTDOWN , 0 );
1147
+ break ;
1148
+ case TEST_STATUS_FAILED : {
1149
+ uint32_t info = SHARED_FIELD_EX32 (value , DV_SIM_STATUS_INFO );
1150
+ int ret ;
1151
+ if (info == 0 ) {
1152
+ /* no extra info */
1153
+ ret = 1 ;
1154
+ } else {
1155
+ ret = (int )(info & 0x7fu );
1156
+ }
1157
+ trace_ot_ibex_wrapper_exit (s -> ot_id , "DV SIM failure, exiting" ,
1158
+ ret );
1159
+ qemu_system_shutdown_request_with_code (
1160
+ SHUTDOWN_CAUSE_GUEST_SHUTDOWN , ret );
1161
+ break ;
1153
1162
}
1154
- trace_ot_ibex_wrapper_exit (s -> ot_id , "DV SIM failure, exiting" , ret );
1155
- qemu_system_shutdown_request_with_code (SHUTDOWN_CAUSE_GUEST_SHUTDOWN ,
1156
- ret );
1157
- break ;
1158
- }
1159
- default :
1160
- s -> regs .dv_sim_win [DV_SIM_STATUS ] = value ;
1161
- break ;
1163
+ default :
1164
+ break ;
1165
+ }
1166
+ } else {
1167
+ trace_ot_ibex_wrapper_exit (s -> ot_id ,
1168
+ "dv-sim-status-exit disabled, not exiting" ,
1169
+ 0 );
1162
1170
}
1171
+
1172
+ s -> regs .dv_sim_win [DV_SIM_STATUS ] = value ;
1163
1173
}
1164
1174
1165
1175
static void ot_ibex_wrapper_write_dv_sim_log (OtIbexWrapperState * s ,
@@ -1381,6 +1391,8 @@ static Property ot_ibex_wrapper_properties[] = {
1381
1391
DEFINE_PROP_UINT8 ("edn-ep" , OtIbexWrapperState , edn_ep , UINT8_MAX ),
1382
1392
DEFINE_PROP_BOOL ("lc-ignore" , OtIbexWrapperState , lc_ignore , false),
1383
1393
DEFINE_PROP_BOOL ("alias-mode" , OtIbexWrapperState , alias_mode , false),
1394
+ DEFINE_PROP_BOOL ("dv-sim-status-exit" , OtIbexWrapperState ,
1395
+ dv_sim_status_exit , true),
1384
1396
DEFINE_PROP_UINT8 ("qemu_version" , OtIbexWrapperState , qemu_version , 0 ),
1385
1397
DEFINE_PROP_STRING ("lc-ignore-ids" , OtIbexWrapperState , lc_ignore_ids ),
1386
1398
DEFINE_PROP_CHR ("logdev" , OtIbexWrapperState , chr ),
0 commit comments