crypto: caam - fix ERA retrieval function
authorAlex Porosanu <alexandru.porosanu@freescale.com>
Thu, 6 Feb 2014 08:27:19 +0000 (10:27 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 9 Feb 2014 01:59:27 +0000 (09:59 +0800)
SEC ERA has to be retrieved by reading the "fsl,sec-era" property
from the device tree. This property is updated/filled in by
u-boot.

Signed-off-by: Alex Porosanu <alexandru.porosanu@freescale.com>
Reviewed-by: Horia Geanta <horia.geanta@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/ctrl.c
drivers/crypto/caam/ctrl.h

index 30f434f..1c38f86 100644 (file)
@@ -14,7 +14,6 @@
 #include "jr.h"
 #include "desc_constr.h"
 #include "error.h"
-#include "ctrl.h"
 
 /*
  * Descriptor to instantiate RNG State Handle 0 in normal mode and
@@ -352,32 +351,17 @@ static void kick_trng(struct platform_device *pdev, int ent_delay)
 
 /**
  * caam_get_era() - Return the ERA of the SEC on SoC, based
- * on the SEC_VID register.
- * Returns the ERA number (1..4) or -ENOTSUPP if the ERA is unknown.
- * @caam_id - the value of the SEC_VID register
+ * on "sec-era" propery in the DTS. This property is updated by u-boot.
  **/
-int caam_get_era(u64 caam_id)
+int caam_get_era(void)
 {
-       struct sec_vid *sec_vid = (struct sec_vid *)&caam_id;
-       static const struct {
-               u16 ip_id;
-               u8 maj_rev;
-               u8 era;
-       } caam_eras[] = {
-               {0x0A10, 1, 1},
-               {0x0A10, 2, 2},
-               {0x0A12, 1, 3},
-               {0x0A14, 1, 3},
-               {0x0A14, 2, 4},
-               {0x0A16, 1, 4},
-               {0x0A11, 1, 4}
-       };
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(caam_eras); i++)
-               if (caam_eras[i].ip_id == sec_vid->ip_id &&
-                       caam_eras[i].maj_rev == sec_vid->maj_rev)
-                               return caam_eras[i].era;
+       struct device_node *caam_node;
+       for_each_compatible_node(caam_node, NULL, "fsl,sec-v4.0") {
+               const uint32_t *prop = (uint32_t *)of_get_property(caam_node,
+                               "fsl,sec-era",
+                               NULL);
+               return prop ? *prop : -ENOTSUPP;
+       }
 
        return -ENOTSUPP;
 }
@@ -551,7 +535,7 @@ static int caam_probe(struct platform_device *pdev)
 
        /* Report "alive" for developer to see */
        dev_info(dev, "device ID = 0x%016llx (Era %d)\n", caam_id,
-                caam_get_era(caam_id));
+                caam_get_era());
        dev_info(dev, "job rings = %d, qi = %d\n",
                 ctrlpriv->total_jobrs, ctrlpriv->qi_present);
 
index 980d44e..cac5402 100644 (file)
@@ -8,6 +8,6 @@
 #define CTRL_H
 
 /* Prototypes for backend-level services exposed to APIs */
-int caam_get_era(u64 caam_id);
+int caam_get_era(void);
 
 #endif /* CTRL_H */