summaryrefslogtreecommitdiff
path: root/chip
diff options
context:
space:
mode:
authorMarius Schilder <mschilder@google.com>2016-10-05 19:29:54 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-10-11 23:01:44 -0700
commit02915f491f1621df97de8b1829ffebe62f8de0fe (patch)
tree148bd1b854753576fdfa68ca41fdc7ec36b2124e /chip
parent36c4e34bea14177927f393043c41c52d92671364 (diff)
downloadchrome-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.c21
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);
}