diff options
author | Mallikarjun Kasoju <mkasoju@nvidia.com> | 2012-10-30 19:46:45 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 00:48:27 -0700 |
commit | 940f4670c56b1fc5c4c8606abfd6a2bbfdc4259f (patch) | |
tree | 9adc15ab9faf6803d529edeaf97378295e3efddd /drivers/crypto | |
parent | 9dce0d301c503e161e293789976ffb3dd3e9ded9 (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.c | 20 | ||||
-rw-r--r-- | drivers/crypto/tegra-se.h | 16 |
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 |