@@ -160,12 +160,12 @@ REG32(MAIN_SM_STATE, 0x5cu)
160
160
(R_RECOV_ALERT_STS_ENABLE_FIELD_ALERT_MASK | \
161
161
R_RECOV_ALERT_STS_SW_APP_ENABLE_FIELD_ALERT_MASK | \
162
162
R_RECOV_ALERT_STS_READ_INT_STATE_FIELD_ALERT_MASK | \
163
- R_RECOV_ALERT_STS_FIPS_FORCE_ENABLE_FIELD_ALERT | \
164
- R_RECOV_ALERT_STS_ACMD_FLAG0_FIELD_ALERT | \
163
+ R_RECOV_ALERT_STS_FIPS_FORCE_ENABLE_FIELD_ALERT_MASK | \
164
+ R_RECOV_ALERT_STS_ACMD_FLAG0_FIELD_ALERT_MASK | \
165
165
R_RECOV_ALERT_STS_CS_BUS_CMP_ALERT_MASK | \
166
- R_RECOV_ALERT_STS_CMD_STAGE_INVALID_ACMD_ALERT | \
167
- R_RECOV_ALERT_STS_CMD_STAGE_INVALID_CMD_SEQ_ALERT | \
168
- R_RECOV_ALERT_STS_CMD_STAGE_RESEED_CNT_ALERT )
166
+ R_RECOV_ALERT_STS_CMD_STAGE_INVALID_ACMD_ALERT_MASK | \
167
+ R_RECOV_ALERT_STS_CMD_STAGE_INVALID_CMD_SEQ_ALERT_MASK | \
168
+ R_RECOV_ALERT_STS_CMD_STAGE_INVALID_RESEED_CNT_ALERT_MASK )
169
169
#define ERR_CODE_MASK 0x77e0ffffu
170
170
171
171
#define OT_CSRNG_AES_KEY_SIZE 32u /* 256 bits */
@@ -878,7 +878,7 @@ static void ot_csrng_update_alerts(OtCSRNGState *s)
878
878
uint32_t level = s -> regs [R_ALERT_TEST ];
879
879
s -> regs [R_ALERT_TEST ] = 0u ;
880
880
881
- if (__builtin_popcount ( s -> regs [R_RECOV_ALERT_STS ]) ) {
881
+ if (s -> regs [R_RECOV_ALERT_STS ]) {
882
882
level |= 1u << ALERT_RECOVERABLE ;
883
883
}
884
884
@@ -1934,6 +1934,15 @@ static void ot_csrng_regs_write(void *opaque, hwaddr addr, uint64_t val64,
1934
1934
val32 &= R_FIPS_FORCE_VAL_MASK ;
1935
1935
s -> regs [reg ] = val32 ;
1936
1936
break ;
1937
+ case R_HW_EXC_STS :
1938
+ val32 &= R_HW_EXC_STS_VAL_MASK ;
1939
+ s -> regs [reg ] &= val32 ; /* RW0C */
1940
+ break ;
1941
+ case R_RECOV_ALERT_STS :
1942
+ val32 &= RECOV_ALERT_STS_MASK ;
1943
+ s -> regs [reg ] &= val32 ; /* RW0C */
1944
+ ot_csrng_update_alerts (s );
1945
+ break ;
1937
1946
case R_ERR_CODE_TEST :
1938
1947
if (!s -> regs [R_REGWEN ]) {
1939
1948
qemu_log_mask (LOG_GUEST_ERROR , "%s: %s protected w/ REGWEN\n" ,
0 commit comments