|
@@ -11,6 +11,7 @@
|
|
|
#include "jr.h"
|
|
|
#include "desc_constr.h"
|
|
|
#include "error.h"
|
|
|
+#include "ctrl.h"
|
|
|
|
|
|
static int caam_remove(struct platform_device *pdev)
|
|
|
{
|
|
@@ -155,10 +156,44 @@ static void kick_trng(struct platform_device *pdev)
|
|
|
clrbits32(&r4tst->rtmctl, RTMCTL_PRGM);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * 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
|
|
|
+ **/
|
|
|
+int caam_get_era(u64 caam_id)
|
|
|
+{
|
|
|
+ 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;
|
|
|
+
|
|
|
+ return -ENOTSUPP;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(caam_get_era);
|
|
|
+
|
|
|
/* Probe routine for CAAM top (controller) level */
|
|
|
static int caam_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
int ret, ring, rspec;
|
|
|
+ u64 caam_id;
|
|
|
struct device *dev;
|
|
|
struct device_node *nprop, *np;
|
|
|
struct caam_ctrl __iomem *ctrl;
|
|
@@ -276,9 +311,11 @@ static int caam_probe(struct platform_device *pdev)
|
|
|
/* Initialize queue allocator lock */
|
|
|
spin_lock_init(&ctrlpriv->jr_alloc_lock);
|
|
|
|
|
|
+ caam_id = rd_reg64(&topregs->ctrl.perfmon.caam_id);
|
|
|
+
|
|
|
/* Report "alive" for developer to see */
|
|
|
- dev_info(dev, "device ID = 0x%016llx\n",
|
|
|
- rd_reg64(&topregs->ctrl.perfmon.caam_id));
|
|
|
+ dev_info(dev, "device ID = 0x%016llx (Era %d)\n", caam_id,
|
|
|
+ caam_get_era(caam_id));
|
|
|
dev_info(dev, "job rings = %d, qi = %d\n",
|
|
|
ctrlpriv->total_jobrs, ctrlpriv->qi_present);
|
|
|
|