Skip to content

Commit 6e8bbe0

Browse files
refactor(sep): fixup TRNG register definitions
1 parent 24dc4d8 commit 6e8bbe0

File tree

1 file changed

+28
-18
lines changed
  • hw/arm/apple-silicon

1 file changed

+28
-18
lines changed

hw/arm/apple-silicon/sep.c

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,8 +1438,8 @@ static const MemoryRegionOps debug_trace_reg_ops = {
14381438
};
14391439

14401440

1441-
#define REG_TRNG_FIFO_OUTPUT_BASE (0x00)
1442-
#define REG_TRNG_FIFO_OUTPUT_END (0x0C)
1441+
#define REG_TRNG_INOUT_START (0x00)
1442+
#define REG_TRNG_INOUT_END (0x0C)
14431443
#define REG_TRNG_STATUS (0x10)
14441444
#define TRNG_STATUS_READY BIT(0)
14451445
#define TRNG_STATUS_SHUTDOWN_OVFL BIT(1)
@@ -1451,26 +1451,36 @@ static const MemoryRegionOps debug_trace_reg_ops = {
14511451
#define TRNG_STATUS_MONOBIT_FAIL BIT(7)
14521452
#define TRNG_STATUS_TEST_READY BIT(8)
14531453
#define TRNG_STATUS_STUCK_NRBG BIT(9)
1454+
#define TRNG_STATUS_RESEED_AI BIT(10)
14541455
#define TRNG_STATUS_REPCNT_FAIL BIT(13)
1455-
#define TRNG_STATUS_APROP_FAIL BIT(13)
1456-
#define TRNG_STATUS_TEST_STUCK BIT(13)
1456+
#define TRNG_STATUS_APROP_FAIL BIT(14)
1457+
#define TRNG_STATUS_TEST_STUCK BIT(15)
1458+
// blocks_available 16..23
1459+
// blocks_threshold 24..30
14571460
#define TRNG_STATUS_NEED_CLOCK BIT(31)
14581461
#define REG_TRNG_CONTROL (0x14)
1459-
#define TRNG_CONTROL_UNKN0 BIT(0)
1460-
#define TRNG_CONTROL_UNKN1_INT_ENABLED BIT(1)
1461-
#define TRNG_CONTROL_UNKN2 BIT(2)
1462-
#define TRNG_CONTROL_UNKN3 BIT(3)
1463-
#define TRNG_CONTROL_STUCK_NRBG_MASK BIT(10)
1462+
#define TRNG_CONTROL_READY BIT(0)
1463+
#define TRNG_CONTROL_SHUTDOWN_OVFLO BIT(1)
1464+
#define TRNG_CONTROL_STUCK BIT(2)
1465+
#define TRNG_CONTROL_NOISE_FAIL BIT(3)
1466+
#define TRNG_CONTROL_RUN_FAIL BIT(4)
1467+
#define TRNG_CONTROL_LONG_RUN_FAIL BIT(5)
1468+
#define TRNG_CONTROL_POKER_FAIL BIT(6)
1469+
#define TRNG_CONTROL_MONOBIT_FAIL BIT(7)
1470+
#define TRNG_CONTROL_TEST_MODE BIT(8)
1471+
#define TRNG_CONTROL_STUCK_NRBG BIT(9)
14641472
#define TRNG_CONTROL_ENABLED BIT(10)
14651473
#define TRNG_CONTROL_DRBG_ENABLED BIT(12)
14661474
#define TRNG_CONTROL_REP_CNT_FAIL_MASK BIT(13)
14671475
#define TRNG_CONTROL_APROP_FAIL_MASK BIT(14)
14681476
#define TRNG_CONTROL_RESEED BIT(15)
1469-
#define TRNG_CONTROL_REQ_DATA BIT(16)
1470-
#define TRNG_CONTROL_REQ_HOLD BIT(17)
1477+
#define TRNG_CONTROL_REQUEST_DATA BIT(16)
1478+
#define TRNG_CONTROL_REQUEST_HOLD BIT(17)
14711479
#define TRNG_CONTROL_DATA_BLOCKS(v) (((v) >> 20) & 0xFFF)
14721480
#define REG_TRNG_CONFIG (0x18)
1473-
#define TRNG_CONFIG_NOISE_BLOCKS(v) ((v) & 0xFF)
1481+
#define TRNG_CONFIG_NOISE_BLOCKS(v) ((v) & 0x1F)
1482+
#define TRNG_CONFIG_USE_STARTUP_BITS BIT(5)
1483+
#define TRNG_CONFIG_SCALE(v) (((v) >> 6) & 0x3)
14741484
#define TRNG_CONFIG_SAMPLE_DIV(v) (((v) >> 8) & 0xF)
14751485
#define TRNG_CONFIG_READ_TIMEOUT(v) (((v) >> 12) & 0xF)
14761486
#define TRNG_CONFIG_SAMPLE_CYCLES(v) (((v) >> 16) & 0xFFFF)
@@ -1509,12 +1519,12 @@ static void trng_regs_reg_write(void *opaque, hwaddr addr, uint64_t data,
15091519
addr, data);
15101520

15111521
switch (addr) {
1512-
case REG_TRNG_FIFO_OUTPUT_BASE ... REG_TRNG_FIFO_OUTPUT_END:
1522+
case REG_TRNG_INOUT_START ... REG_TRNG_INOUT_END:
15131523
if ((s->offset_0x70 & TRNG_UNKN5_ENCRYPT_FIFO) != 0) {
15141524
data = bswap32(data);
15151525
}
1516-
memcpy(s->fifo + (addr - REG_TRNG_FIFO_OUTPUT_BASE), &data, size);
1517-
if (addr == REG_TRNG_FIFO_OUTPUT_END &&
1526+
memcpy(s->fifo + (addr - REG_TRNG_INOUT_START), &data, size);
1527+
if (addr == REG_TRNG_INOUT_END &&
15181528
((s->offset_0x70 & TRNG_UNKN5_ENCRYPT_FIFO) != 0)) {
15191529
QCryptoCipher *cipher;
15201530

@@ -1533,7 +1543,7 @@ static void trng_regs_reg_write(void *opaque, hwaddr addr, uint64_t data,
15331543
(s->offset_0x70 &
15341544
(TRNG_UNKN5_ENCRYPT_FIFO | TRNG_UNKN5_INIT_DRBG)) == 0) {
15351545
qemu_guest_getrandom_nofail(s->fifo, sizeof(s->fifo));
1536-
if ((s->config & TRNG_CONTROL_UNKN1_INT_ENABLED) != 0) {
1546+
if ((s->config & TRNG_CONTROL_SHUTDOWN_OVFLO) != 0) {
15371547
apple_a7iop_interrupt_status_push(sep->mailbox,
15381548
0x10003); // TRNG
15391549
}
@@ -1629,8 +1639,8 @@ static uint64_t trng_regs_reg_read(void *opaque, hwaddr addr, unsigned size)
16291639

16301640
// uint32_t enabled = (s->config & TRNG_CONTROL_ENABLED) != 0;
16311641
switch (addr) {
1632-
case REG_TRNG_FIFO_OUTPUT_BASE ... REG_TRNG_FIFO_OUTPUT_END:
1633-
ret = ldl_le_p(s->fifo + (addr - REG_TRNG_FIFO_OUTPUT_BASE));
1642+
case REG_TRNG_INOUT_START ... REG_TRNG_INOUT_END:
1643+
ret = ldl_le_p(s->fifo + (addr - REG_TRNG_INOUT_START));
16341644
if ((s->offset_0x70 &
16351645
(TRNG_UNKN5_ENCRYPT_FIFO | TRNG_UNKN5_INIT_DRBG)) != 0) {
16361646
ret = bswap32(ret);

0 commit comments

Comments
 (0)