summaryrefslogtreecommitdiff
path: root/chip
diff options
context:
space:
mode:
authornagendra modadugu <ngm@google.com>2016-07-07 19:46:41 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-07-21 13:13:25 -0700
commitad72d6ba9260eafe67cb664b2e02c8c9b0468fce (patch)
treefeefc11af72aa8be2dac16479185687620159287 /chip
parent1ea4042f57fe36dac7e82eec9ef64246fc5e471a (diff)
downloadchrome-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.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)