Skip to content

Commit 95abb42

Browse files
committed
[ot] hw/opentitan: ot_csrng: add missing write access to 2 new registers
Signed-off-by: Emmanuel Blot <eblot@rivosinc.com>
1 parent 9dce595 commit 95abb42

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

hw/opentitan/ot_csrng.c

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,12 +160,12 @@ REG32(MAIN_SM_STATE, 0x5cu)
160160
(R_RECOV_ALERT_STS_ENABLE_FIELD_ALERT_MASK | \
161161
R_RECOV_ALERT_STS_SW_APP_ENABLE_FIELD_ALERT_MASK | \
162162
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 | \
165165
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)
169169
#define ERR_CODE_MASK 0x77e0ffffu
170170

171171
#define OT_CSRNG_AES_KEY_SIZE 32u /* 256 bits */
@@ -878,7 +878,7 @@ static void ot_csrng_update_alerts(OtCSRNGState *s)
878878
uint32_t level = s->regs[R_ALERT_TEST];
879879
s->regs[R_ALERT_TEST] = 0u;
880880

881-
if (__builtin_popcount(s->regs[R_RECOV_ALERT_STS])) {
881+
if (s->regs[R_RECOV_ALERT_STS]) {
882882
level |= 1u << ALERT_RECOVERABLE;
883883
}
884884

@@ -1934,6 +1934,15 @@ static void ot_csrng_regs_write(void *opaque, hwaddr addr, uint64_t val64,
19341934
val32 &= R_FIPS_FORCE_VAL_MASK;
19351935
s->regs[reg] = val32;
19361936
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;
19371946
case R_ERR_CODE_TEST:
19381947
if (!s->regs[R_REGWEN]) {
19391948
qemu_log_mask(LOG_GUEST_ERROR, "%s: %s protected w/ REGWEN\n",

0 commit comments

Comments
 (0)