crypto: inside-secure - adjust the TRC configuration for EIP197D
authorOfer Heifetz <oferh@marvell.com>
Thu, 28 Jun 2018 15:15:40 +0000 (17:15 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 8 Jul 2018 16:30:14 +0000 (00:30 +0800)
This patch updates the TRC configuration so that the version of the
EIP197 engine being used is taken into account, as the configuration
differs between the EIP197B and the EIP197D.

Signed-off-by: Ofer Heifetz <oferh@marvell.com>
[Antoine: commit message]
Signed-off-by: Antoine Tenart <antoine.tenart@bootlin.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/inside-secure/safexcel.c
drivers/crypto/inside-secure/safexcel.h

index 4ad1bfd77359a240b4c72fe2424dfb9b386f96f0..b70694090353586384c5275a1a8ecb2c8bf384fa 100644 (file)
@@ -33,7 +33,19 @@ MODULE_PARM_DESC(max_rings, "Maximum number of rings to use.");
 static void eip197_trc_cache_init(struct safexcel_crypto_priv *priv)
 {
        u32 val, htable_offset;
-       int i;
+       int i, cs_rc_max, cs_ht_wc, cs_trc_rec_wc, cs_trc_lg_rec_wc;
+
+       if (priv->version == EIP197B) {
+               cs_rc_max = EIP197B_CS_RC_MAX;
+               cs_ht_wc = EIP197B_CS_HT_WC;
+               cs_trc_rec_wc = EIP197B_CS_TRC_REC_WC;
+               cs_trc_lg_rec_wc = EIP197B_CS_TRC_LG_REC_WC;
+       } else {
+               cs_rc_max = EIP197D_CS_RC_MAX;
+               cs_ht_wc = EIP197D_CS_HT_WC;
+               cs_trc_rec_wc = EIP197D_CS_TRC_REC_WC;
+               cs_trc_lg_rec_wc = EIP197D_CS_TRC_LG_REC_WC;
+       }
 
        /* Enable the record cache memory access */
        val = readl(priv->base + EIP197_CS_RAM_CTRL);
@@ -54,7 +66,7 @@ static void eip197_trc_cache_init(struct safexcel_crypto_priv *priv)
        writel(val, priv->base + EIP197_TRC_PARAMS);
 
        /* Clear all records */
-       for (i = 0; i < EIP197_CS_RC_MAX; i++) {
+       for (i = 0; i < cs_rc_max; i++) {
                u32 val, offset = EIP197_CLASSIFICATION_RAMS + i * EIP197_CS_RC_SIZE;
 
                writel(EIP197_CS_RC_NEXT(EIP197_RC_NULL) |
@@ -64,14 +76,14 @@ static void eip197_trc_cache_init(struct safexcel_crypto_priv *priv)
                val = EIP197_CS_RC_NEXT(i+1) | EIP197_CS_RC_PREV(i-1);
                if (i == 0)
                        val |= EIP197_CS_RC_PREV(EIP197_RC_NULL);
-               else if (i == EIP197_CS_RC_MAX - 1)
+               else if (i == cs_rc_max - 1)
                        val |= EIP197_CS_RC_NEXT(EIP197_RC_NULL);
                writel(val, priv->base + offset + sizeof(u32));
        }
 
        /* Clear the hash table entries */
-       htable_offset = EIP197_CS_RC_MAX * EIP197_CS_RC_SIZE;
-       for (i = 0; i < 64; i++)
+       htable_offset = cs_rc_max * EIP197_CS_RC_SIZE;
+       for (i = 0; i < cs_ht_wc; i++)
                writel(GENMASK(29, 0),
                       priv->base + EIP197_CLASSIFICATION_RAMS + htable_offset + i * sizeof(u32));
 
@@ -82,16 +94,16 @@ static void eip197_trc_cache_init(struct safexcel_crypto_priv *priv)
 
        /* Write head and tail pointers of the record free chain */
        val = EIP197_TRC_FREECHAIN_HEAD_PTR(0) |
-             EIP197_TRC_FREECHAIN_TAIL_PTR(EIP197_CS_RC_MAX - 1);
+             EIP197_TRC_FREECHAIN_TAIL_PTR(cs_rc_max - 1);
        writel(val, priv->base + EIP197_TRC_FREECHAIN);
 
        /* Configure the record cache #1 */
-       val = EIP197_TRC_PARAMS2_RC_SZ_SMALL(EIP197_CS_TRC_REC_WC) |
-             EIP197_TRC_PARAMS2_HTABLE_PTR(EIP197_CS_RC_MAX);
+       val = EIP197_TRC_PARAMS2_RC_SZ_SMALL(cs_trc_rec_wc) |
+             EIP197_TRC_PARAMS2_HTABLE_PTR(cs_rc_max);
        writel(val, priv->base + EIP197_TRC_PARAMS2);
 
        /* Configure the record cache #2 */
-       val = EIP197_TRC_PARAMS_RC_SZ_LARGE(EIP197_CS_TRC_LG_REC_WC) |
+       val = EIP197_TRC_PARAMS_RC_SZ_LARGE(cs_trc_lg_rec_wc) |
              EIP197_TRC_PARAMS_BLK_TIMER_SPEED(1) |
              EIP197_TRC_PARAMS_HTABLE_SZ(2);
        writel(val, priv->base + EIP197_TRC_PARAMS);
index 46c72306ca9f1fd2ebd70e48e374d4fc85446e1e..94a89664f3d0463d238da213085af35b5c2b855f 100644 (file)
@@ -361,13 +361,19 @@ struct safexcel_context_record {
 #define EIP197_TRC_PARAMS2_RC_SZ_SMALL(n)      ((n) << 18)
 
 /* Cache helpers */
-#define EIP197_CS_RC_MAX                       52
+#define EIP197B_CS_RC_MAX                      52
+#define EIP197D_CS_RC_MAX                      96
 #define EIP197_CS_RC_SIZE                      (4 * sizeof(u32))
 #define EIP197_CS_RC_NEXT(x)                   (x)
 #define EIP197_CS_RC_PREV(x)                   ((x) << 10)
 #define EIP197_RC_NULL                         0x3ff
-#define EIP197_CS_TRC_REC_WC                   59
-#define EIP197_CS_TRC_LG_REC_WC                        73
+#define EIP197B_CS_TRC_REC_WC                  59
+#define EIP197D_CS_TRC_REC_WC                  64
+#define EIP197B_CS_TRC_LG_REC_WC               73
+#define EIP197D_CS_TRC_LG_REC_WC               80
+#define EIP197B_CS_HT_WC                       64
+#define EIP197D_CS_HT_WC                       256
+
 
 /* Result data */
 struct result_data_desc {