Skip to content

Commit 56f0be5

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 5c06e48 commit 56f0be5

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 */
@@ -885,7 +885,7 @@ static void ot_csrng_update_alerts(OtCSRNGState *s)
885885
uint32_t level = s->regs[R_ALERT_TEST];
886886
s->regs[R_ALERT_TEST] = 0u;
887887

888-
if (__builtin_popcount(s->regs[R_RECOV_ALERT_STS])) {
888+
if (s->regs[R_RECOV_ALERT_STS]) {
889889
level |= 1u << ALERT_RECOVERABLE;
890890
}
891891

@@ -1945,6 +1945,15 @@ static void ot_csrng_regs_write(void *opaque, hwaddr addr, uint64_t val64,
19451945
val32 &= R_FIPS_FORCE_VAL_MASK;
19461946
s->regs[reg] = val32;
19471947
break;
1948+
case R_HW_EXC_STS:
1949+
val32 &= R_HW_EXC_STS_VAL_MASK;
1950+
s->regs[reg] &= val32; /* RW0C */
1951+
break;
1952+
case R_RECOV_ALERT_STS:
1953+
val32 &= RECOV_ALERT_STS_MASK;
1954+
s->regs[reg] &= val32; /* RW0C */
1955+
ot_csrng_update_alerts(s);
1956+
break;
19481957
case R_ERR_CODE_TEST:
19491958
if (!s->regs[R_REGWEN]) {
19501959
qemu_log_mask(LOG_GUEST_ERROR, "%s: %s protected w/ REGWEN\n",

0 commit comments

Comments
 (0)