diff options
author | Marius Schilder <mschilder@google.com> | 2016-10-05 19:29:54 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-10-11 23:01:44 -0700 |
commit | 02915f491f1621df97de8b1829ffebe62f8de0fe (patch) | |
tree | 148bd1b854753576fdfa68ca41fdc7ec36b2124e /chip | |
parent | 36c4e34bea14177927f393043c41c52d92671364 (diff) | |
download | chrome-ec-02915f491f1621df97de8b1829ffebe62f8de0fe.tar.gz |
Update TRNG handling.
Enable post processing and churn.
Slice low 2 bits.
Increase timeout and retry counters.
BRANCH=none
BUG=none
TEST=tcg_tests pass
Change-Id: I3a8a6d14d4b113fb6831a5c8b253e5544ce70f8e
Reviewed-on: https://chromium-review.googlesource.com/394130
Commit-Ready: Marius Schilder <mschilder@chromium.org>
Tested-by: Marius Schilder <mschilder@chromium.org>
Reviewed-by: Marius Schilder <mschilder@chromium.org>
Reviewed-by: William Wesson <wesson@google.com>
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r-- | chip/g/trng.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/chip/g/trng.c b/chip/g/trng.c index a7dbcf4455..02472f46ef 100644 --- a/chip/g/trng.c +++ b/chip/g/trng.c @@ -7,22 +7,25 @@ void init_trng(void) { + GWRITE(TRNG, POST_PROCESSING_CTRL, + GC_TRNG_POST_PROCESSING_CTRL_SHUFFLE_BITS_MASK | + GC_TRNG_POST_PROCESSING_CTRL_CHURN_MODE_MASK); + GWRITE(TRNG, SLICE_MAX_UPPER_LIMIT, 1); + GWRITE(TRNG, SLICE_MIN_LOWER_LIMIT, 0); + GWRITE(TRNG, TIMEOUT_COUNTER, 0x7ff); + GWRITE(TRNG, TIMEOUT_MAX_TRY_NUM, 4); GWRITE(TRNG, POWER_DOWN_B, 1); GWRITE(TRNG, GO_EVENT, 1); - while (GREAD(TRNG, EMPTY)) - ; - GREAD(TRNG, READ_DATA); } uint32_t rand(void) { while (GREAD(TRNG, EMPTY)) { - if (!GREAD_FIELD(TRNG, FSM_STATE, FSM_IDLE)) - continue; - - /* TRNG must have stopped, needs to be restarted. */ - GWRITE(TRNG, STOP_WORK, 1); - init_trng(); + if (GREAD_FIELD(TRNG, FSM_STATE, FSM_TIMEOUT)) { + /* TRNG timed out, restart */ + GWRITE(TRNG, STOP_WORK, 1); + GWRITE(TRNG, GO_EVENT, 1); + } } return GREAD(TRNG, READ_DATA); } |