summaryrefslogtreecommitdiff
path: root/drivers/crypto
diff options
context:
space:
mode:
authorMallikarjun Kasoju <mkasoju@nvidia.com>2012-10-30 19:46:45 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 00:48:27 -0700
commit940f4670c56b1fc5c4c8606abfd6a2bbfdc4259f (patch)
tree9adc15ab9faf6803d529edeaf97378295e3efddd /drivers/crypto
parent9dce0d301c503e161e293789976ffb3dd3e9ded9 (diff)
crypto: tegra-se: Fix t114 SE context save failure
t114 has sticky bits for RSA key slots which is not there in t30. Context save buffer offsets are adjusted appropriately for this. Change-Id: Ifd4e59772a869358d8dd12262e882fa63c53f054 Signed-off-by: Mallikarjun Kasoju <mkasoju@nvidia.com> Reviewed-on: http://git-master/r/159890 Reviewed-by: Simone Willett <swillett@nvidia.com> Tested-by: Simone Willett <swillett@nvidia.com> Rebase-Id: R39b4f1e4608ae52b3ab499c0df9472797d9b0c50
Diffstat (limited to 'drivers/crypto')
-rw-r--r--drivers/crypto/tegra-se.c20
-rw-r--r--drivers/crypto/tegra-se.h16
2 files changed, 31 insertions, 5 deletions
diff --git a/drivers/crypto/tegra-se.c b/drivers/crypto/tegra-se.c
index 70f3960ccc13..c8a43698d8da 100644
--- a/drivers/crypto/tegra-se.c
+++ b/drivers/crypto/tegra-se.c
@@ -2840,7 +2840,15 @@ static int tegra_se_lp_keytable_context_save(struct tegra_se_dev *se_dev)
*se_dev->dst_ll_buf = 0;
dst_ll = (struct tegra_se_ll *)(se_dev->dst_ll_buf + 1);
- dst_ll->addr = (se_dev->ctx_save_buf_adr + SE_CONTEXT_SAVE_KEYS_OFFSET);
+ if (!se_dev->chipdata->drbg_supported)
+ dst_ll->addr =
+ (se_dev->ctx_save_buf_adr +
+ SE_CONTEXT_SAVE_KEYS_OFFSET);
+ else
+ dst_ll->addr =
+ (se_dev->ctx_save_buf_adr +
+ SE11_CONTEXT_SAVE_KEYS_OFFSET);
+
dst_ll->data_len = TEGRA_SE_KEY_128_SIZE;
for (i = 0; i < TEGRA_SE_KEYSLOT_COUNT; i++) {
@@ -3042,7 +3050,10 @@ static int tegra_se_suspend(struct device *dev)
/* Original iv context save*/
err = tegra_se_lp_iv_context_save(se_dev,
- true, SE_CONTEXT_ORIGINAL_IV_OFFSET);
+ true,
+ (se_dev->chipdata->drbg_supported ?
+ SE11_CONTEXT_ORIGINAL_IV_OFFSET :
+ SE_CONTEXT_ORIGINAL_IV_OFFSET));
if (err) {
dev_err(se_dev->dev, "\n LP original iv save failure\n");
goto out;
@@ -3050,7 +3061,10 @@ static int tegra_se_suspend(struct device *dev)
/* Updated iv context save*/
err = tegra_se_lp_iv_context_save(se_dev,
- false, SE_CONTEXT_UPDATED_IV_OFFSET);
+ false,
+ (se_dev->chipdata->drbg_supported ?
+ SE11_CONTEXT_UPDATED_IV_OFFSET :
+ SE_CONTEXT_UPDATED_IV_OFFSET));
if (err) {
dev_err(se_dev->dev, "\n LP updated iv save failure\n");
goto out;
diff --git a/drivers/crypto/tegra-se.h b/drivers/crypto/tegra-se.h
index af4a93a83dd1..88df933b4b6a 100644
--- a/drivers/crypto/tegra-se.h
+++ b/drivers/crypto/tegra-se.h
@@ -256,23 +256,35 @@
#define SE_CONTEXT_SAVE_STICKY_BITS_OFFSET \
(SE_CONTEXT_SAVE_RANDOM_DATA_OFFSET + SE_CONTEXT_SAVE_RANDOM_DATA_SIZE)
#define SE_CONTEXT_SAVE_STICKY_BITS_SIZE 16
+
#define SE_CONTEXT_SAVE_KEYS_OFFSET (SE_CONTEXT_SAVE_STICKY_BITS_OFFSET + \
SE_CONTEXT_SAVE_STICKY_BITS_SIZE)
+#define SE11_CONTEXT_SAVE_KEYS_OFFSET (SE_CONTEXT_SAVE_STICKY_BITS_OFFSET + \
+ SE_CONTEXT_SAVE_STICKY_BITS_SIZE + \
+ SE_CONTEXT_SAVE_STICKY_BITS_SIZE)
+
#define SE_CONTEXT_SAVE_KEY_LENGTH 512
#define SE_CONTEXT_ORIGINAL_IV_OFFSET (SE_CONTEXT_SAVE_KEYS_OFFSET + \
SE_CONTEXT_SAVE_KEY_LENGTH)
+#define SE11_CONTEXT_ORIGINAL_IV_OFFSET (SE11_CONTEXT_SAVE_KEYS_OFFSET + \
+ SE_CONTEXT_SAVE_KEY_LENGTH)
+
#define SE_CONTEXT_ORIGINAL_IV_LENGTH 256
#define SE_CONTEXT_UPDATED_IV_OFFSET (SE_CONTEXT_ORIGINAL_IV_OFFSET + \
SE_CONTEXT_ORIGINAL_IV_LENGTH)
+#define SE11_CONTEXT_UPDATED_IV_OFFSET (SE11_CONTEXT_ORIGINAL_IV_OFFSET + \
+ SE_CONTEXT_ORIGINAL_IV_LENGTH)
#define SE_CONTEXT_UPDATED_IV_LENGTH 256
-
#define SE_CONTEXT_SAVE_KNOWN_PATTERN_OFFSET (SE_CONTEXT_UPDATED_IV_OFFSET + \
SE_CONTEXT_UPDATED_IV_LENGTH)
+#define SE11_CONTEXT_SAVE_KNOWN_PATTERN_OFFSET \
+ (SE11_CONTEXT_UPDATED_IV_OFFSET + \
+ SE_CONTEXT_UPDATED_IV_LENGTH)
-#define SE_CONTEXT_SAVE_RSA_KEYS_OFFSET SE_CONTEXT_SAVE_KNOWN_PATTERN_OFFSET
+#define SE_CONTEXT_SAVE_RSA_KEYS_OFFSET SE11_CONTEXT_SAVE_KNOWN_PATTERN_OFFSET
#define SE_CONTEXT_SAVE_RSA_KEY_LENGTH 1024