summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagendra modadugu <ngm@google.com>2016-07-07 19:46:41 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2016-07-09 01:25:07 +0000
commit9b3619ddd7304359ee17e243923f1e47c925cb21 (patch)
tree47b5232313cfa57ecc3021f2a399581124007ec5
parent93fd0594c920d8794711b47c80eb057ed0f72317 (diff)
downloadchrome-ec-9b3619ddd7304359ee17e243923f1e47c925cb21.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 Change-Id: If5a79af06ea7512f19775a2f34d741b144f211f7 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>
-rw-r--r--chip/g/dcrypto/sha256.c23
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)