crypto: inside-secure - Add fw_little_endian option
authorPeter Harliman Liem <pliem@maxlinear.com>
Tue, 27 Sep 2022 03:10:09 +0000 (11:10 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 21 Oct 2022 11:05:24 +0000 (19:05 +0800)
This is to add fw_little_endian option, which can
be used for platform which firmware is using little-endian
(instead of big-endian).

Signed-off-by: Peter Harliman Liem <pliem@maxlinear.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/inside-secure/safexcel.c
drivers/crypto/inside-secure/safexcel.h

index 8f4872470529c8182cfc780f07224e482b4dd8f7..4d6d64ff9a0f2e2ba2b93d97a8ae7b45e7b572fa 100644 (file)
@@ -316,14 +316,20 @@ static void eip197_init_firmware(struct safexcel_crypto_priv *priv)
 static int eip197_write_firmware(struct safexcel_crypto_priv *priv,
                                  const struct firmware *fw)
 {
-       const __be32 *data = (const __be32 *)fw->data;
+       u32 val;
        int i;
 
        /* Write the firmware */
-       for (i = 0; i < fw->size / sizeof(u32); i++)
-               writel(be32_to_cpu(data[i]),
+       for (i = 0; i < fw->size / sizeof(u32); i++) {
+               if (priv->data->fw_little_endian)
+                       val = le32_to_cpu(((const __le32 *)fw->data)[i]);
+               else
+                       val = be32_to_cpu(((const __be32 *)fw->data)[i]);
+
+               writel(val,
                       priv->base + EIP197_CLASSIFICATION_RAMS +
-                      i * sizeof(__be32));
+                      i * sizeof(val));
+       }
 
        /* Exclude final 2 NOPs from size */
        return i - EIP197_FW_TERMINAL_NOPS;
index e8da8b30a39239d4a11eee9db834eab7853c1f5c..f049293870b484c437d655b8863963681a2aab2d 100644 (file)
@@ -735,6 +735,7 @@ enum safexcel_eip_version {
 
 struct safexcel_priv_data {
        enum safexcel_eip_version version;
+       bool fw_little_endian;
 };
 
 /* Priority we use for advertising our algorithms */