diff options
author | nagendra modadugu <ngm@google.com> | 2016-07-07 19:46:41 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-07-21 13:13:25 -0700 |
commit | ad72d6ba9260eafe67cb664b2e02c8c9b0468fce (patch) | |
tree | feefc11af72aa8be2dac16479185687620159287 /chip | |
parent | 1ea4042f57fe36dac7e82eec9ef64246fc5e471a (diff) | |
download | chrome-ec-ad72d6ba9260eafe67cb664b2e02c8c9b0468fce.tar.gz |
CR50: clear SHA config register when initializing
The SHA config register should be cleared, so that
only required bits are set on init().
Doing so ensures that previous settings that used
the engine in a different mode, e.g HMAC, do not
survive.
BRANCH=none
BUG=chrome-os-partner:43025,chrome-os-partner:47524
TEST=build succeeds; tpmtest.py tests pass; manufacture works
(cherry picked from commit 9b3619ddd7304359ee17e243923f1e47c925cb21)
Signed-off-by: nagendra modadugu <ngm@google.com>
Reviewed-on: https://chromium-review.googlesource.com/359418
Reviewed-by: Marius Schilder <mschilder@chromium.org>
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: Vadim Bendebury <vbendeb@chromium.org>
Tested-by: Vadim Bendebury <vbendeb@chromium.org>
Change-Id: If5a79af06ea7512f19775a2f34d741b144f211f7
Reviewed-on: https://chromium-review.googlesource.com/358982
Commit-Ready: Vadim Bendebury <vbendeb@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r-- | chip/g/dcrypto/sha256.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/chip/g/dcrypto/sha256.c b/chip/g/dcrypto/sha256.c index e3ac6642bb..e21d54b1d6 100644 --- a/chip/g/dcrypto/sha256.c +++ b/chip/g/dcrypto/sha256.c @@ -61,7 +61,8 @@ void dcrypto_sha_wait(enum sha_mode mode, uint32_t *digest) SHA256_DIGEST_SIZE; /* Stop LIVESTREAM mode. */ - GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_STOP, 1); + GREG32(KEYMGR, SHA_TRIG) = GC_KEYMGR_SHA_TRIG_TRIG_STOP_MASK; + /* Wait for SHA DONE interrupt. */ while (!GREG32(KEYMGR, SHA_ITOP)) ; @@ -130,18 +131,24 @@ void dcrypto_sha_update(struct HASH_CTX *unused, void dcrypto_sha_init(enum sha_mode mode) { + int val; + /* Stop LIVESTREAM mode, in case final() was not called. */ - GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_STOP, 1); + GREG32(KEYMGR, SHA_TRIG) = GC_KEYMGR_SHA_TRIG_TRIG_STOP_MASK; /* Clear interrupt status. */ GREG32(KEYMGR, SHA_ITOP) = 0; - /* SHA1 or SHA256 mode */ - GWRITE_FIELD(KEYMGR, SHA_CFG_EN, SHA1, mode == SHA1_MODE ? 1 : 0); + /* Enable streaming mode. */ - GWRITE_FIELD(KEYMGR, SHA_CFG_EN, LIVESTREAM, 1); - /* Enable the SHA DONE interrupt. */ - GWRITE_FIELD(KEYMGR, SHA_CFG_EN, INT_EN_DONE, 1); + val = GC_KEYMGR_SHA_CFG_EN_LIVESTREAM_MASK; + /* Enable SHA DONE interrupt. */ + val |= GC_KEYMGR_SHA_CFG_EN_INT_EN_DONE_MASK; + /* Select SHA mode. */ + if (mode == SHA1_MODE) + val |= GC_KEYMGR_SHA_CFG_EN_SHA1_MASK; + GREG32(KEYMGR, SHA_CFG_EN) = val; + /* Start SHA engine. */ - GWRITE_FIELD(KEYMGR, SHA_TRIG, TRIG_GO, 1); + GREG32(KEYMGR, SHA_TRIG) = GC_KEYMGR_SHA_TRIG_TRIG_GO_MASK; } static void dcrypto_sha256_init(LITE_SHA256_CTX *ctx) |