summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorulises <ulises.cardenas@freescale.com>2015-11-18 08:10:26 -0600
committerDan Douglass <dan.douglass@freescale.com>2016-03-18 14:28:58 -0500
commitb51b2dab78c43e6483c4d2028253880b36fcfdff (patch)
tree95c3aea88dab6724573bd79287706b8e0b094f11
parent52c42162b059bda9461378ca2942766fee7b572f (diff)
MLK-11922 i.mx6: Linux 3.14.28 CAAM & SNVS enabled by default.
JTAG, DS-5 attachment causes exceptions Added properties to device tree, in order to enable and disable alarms. The following are the available alarms: -JTAG active -WatchDOG 2 reset -Internal Boot -External Tamper Detection pad
-rw-r--r--arch/arm/boot/dts/imx6qdl.dtsi4
-rw-r--r--arch/arm/boot/dts/imx6sx.dtsi4
-rw-r--r--arch/arm/boot/dts/imx6ul.dtsi12
-rw-r--r--arch/arm/boot/dts/imx7d.dtsi8
-rw-r--r--drivers/crypto/caam/secvio.c45
5 files changed, 57 insertions, 16 deletions
diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
index 777504753370..c712087a97db 100644
--- a/arch/arm/boot/dts/imx6qdl.dtsi
+++ b/arch/arm/boot/dts/imx6qdl.dtsi
@@ -109,6 +109,10 @@
compatible = "fsl,imx6q-caam-secvio";
interrupts = <0 20 0x04>;
secvio_src = <0x8000001d>;
+ jtag-tamper = "disabled";
+ watchdog-tamper = "enabled";
+ internal-boot-tamper = "enabled";
+ external-pin-tamper = "disabled";
};
gpmi: gpmi-nand@00112000 {
diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi
index 521113d65592..5b4dbd09f134 100644
--- a/arch/arm/boot/dts/imx6sx.dtsi
+++ b/arch/arm/boot/dts/imx6sx.dtsi
@@ -239,6 +239,10 @@
compatible = "fsl,imx6q-caam-secvio";
interrupts = <0 20 0x04>;
secvio_src = <0x8000001d>;
+ jtag-tamper = "disabled";
+ watchdog-tamper = "enabled";
+ internal-boot-tamper = "enabled";
+ external-pin-tamper = "disabled";
};
gpu: gpu@01800000 {
diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi
index af8bcf3cc5a5..618fd476b1de 100644
--- a/arch/arm/boot/dts/imx6ul.dtsi
+++ b/arch/arm/boot/dts/imx6ul.dtsi
@@ -159,13 +159,17 @@
};
caam_sm: caam-sm@00100000 {
- compatible = "fsl,imx7d-caam-sm", "fsl,imx6q-caam-sm";
- reg = <0x00100000 0x3fff>;
+ compatible = "fsl,imx7d-caam-sm", "fsl,imx6q-caam-sm";
+ reg = <0x00100000 0x3fff>;
};
irq_sec_vio: caam_secvio {
- compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
- interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+ compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
+ interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+ jtag-tamper = "disabled";
+ watchdog-tamper = "enabled";
+ internal-boot-tamper = "enabled";
+ external-pin-tamper = "disabled";
};
ocrams: sram@00900000 {
diff --git a/arch/arm/boot/dts/imx7d.dtsi b/arch/arm/boot/dts/imx7d.dtsi
index a6fc3f0bcabe..e947783ae4c3 100644
--- a/arch/arm/boot/dts/imx7d.dtsi
+++ b/arch/arm/boot/dts/imx7d.dtsi
@@ -343,8 +343,12 @@
};
irq_sec_vio: caam_secvio {
- compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
- interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+ compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
+ interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
+ jtag-tamper = "disabled";
+ watchdog-tamper = "enabled";
+ internal-boot-tamper = "enabled";
+ external-pin-tamper = "disabled";
};
pmu {
diff --git a/drivers/crypto/caam/secvio.c b/drivers/crypto/caam/secvio.c
index e798bdbd482e..79c06b07812b 100644
--- a/drivers/crypto/caam/secvio.c
+++ b/drivers/crypto/caam/secvio.c
@@ -1,7 +1,7 @@
/*
* SNVS Security Violation Handler
- * Copyright (C) 2012-2015 Freescale Semiconductor, Inc., All Rights Reserved
+ * Copyright (C) 2012-2016 Freescale Semiconductor, Inc., All Rights Reserved
*/
#include "compat.h"
@@ -205,6 +205,8 @@ static int snvs_secvio_probe(struct platform_device *pdev)
struct snvs_full __iomem *snvsregs;
int i, error;
u32 hpstate;
+ const void *jtd, *wtd, *itd, *etd;
+ u32 td_en;
svpriv = kzalloc(sizeof(struct snvs_secvio_drv_private), GFP_KERNEL);
if (!svpriv)
@@ -227,6 +229,34 @@ static int snvs_secvio_probe(struct platform_device *pdev)
return -EINVAL;
}
+ jtd = of_get_property(npirq, "jtag-tamper", NULL);
+ wtd = of_get_property(npirq, "watchdog-tamper", NULL);
+ itd = of_get_property(npirq, "internal-boot-tamper", NULL);
+ etd = of_get_property(npirq, "external-pin-tamper", NULL);
+ if (!jtd | !wtd | !itd | !etd ) {
+ dev_err(svdev, "can't identify tamper alarm configuration\n");
+ kfree(svpriv);
+ return -EINVAL;
+ }
+
+ /*
+ * Configure all sources according to device tree property.
+ * If the property is enabled then the source is ser as
+ * fatal violations except LP section,
+ * source #5 (typically used as an external tamper detect), and
+ * source #3 (typically unused). Whenever the transition to
+ * secure mode has occurred, these will now be "fatal" violations
+ */
+ td_en = HP_SECVIO_INTEN_SRC0;
+ if (!strcmp(jtd, "enabled"))
+ td_en |= HP_SECVIO_INTEN_SRC1;
+ if (!strcmp(wtd, "enabled"))
+ td_en |= HP_SECVIO_INTEN_SRC2;
+ if (!strcmp(itd, "enabled"))
+ td_en |= HP_SECVIO_INTEN_SRC4;
+ if (!strcmp(etd, "enabled"))
+ td_en |= HP_SECVIO_INTEN_SRC5;
+
snvsregs = of_iomap(np, 0);
if (!snvsregs) {
dev_err(svdev, "register mapping failed\n");
@@ -240,6 +270,10 @@ static int snvs_secvio_probe(struct platform_device *pdev)
svpriv->clk = NULL;
}
+ /* Write the Secvio Enable Config the SVCR */
+ wr_reg32(&svpriv->svregs->hp.secvio_ctl, td_en);
+ wr_reg32(&svpriv->svregs->hp.secvio_intcfg, td_en);
+
/* Device data set up. Now init interrupt source descriptions */
for (i = 0; i < MAX_SECVIO_SOURCES; i++) {
svpriv->intsrc[i].intname = violation_src_name[i];
@@ -262,15 +296,6 @@ static int snvs_secvio_probe(struct platform_device *pdev)
}
clk_prepare_enable(svpriv->clk);
- /*
- * Configure all sources as fatal violations except LP section,
- * source #5 (typically used as an external tamper detect), and
- * source #3 (typically unused). Whenever the transition to
- * secure mode has occurred, these will now be "fatal" violations
- */
- wr_reg32(&svpriv->svregs->hp.secvio_intcfg,
- HP_SECVIO_INTEN_SRC4 | HP_SECVIO_INTEN_SRC2 |
- HP_SECVIO_INTEN_SRC1 | HP_SECVIO_INTEN_SRC0);
hpstate = (rd_reg32(&svpriv->svregs->hp.status) &
HP_STATUS_SSM_ST_MASK) >> HP_STATUS_SSM_ST_SHIFT;