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>
This commit is contained in:
Marius Schilder
2016-10-05 19:29:54 -07:00
committed by chrome-bot
parent 36c4e34bea
commit 02915f491f

View File

@@ -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);
}