mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-09-03 10:33:11 +02:00
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 (Vipul: Fixed merge conflicts) TODO: checkpatch warnings Signed-off-by: Vipul Kumar <vipul_kumar@mentor.com>
This commit is contained in:
parent
e31b264218
commit
9d9ca7a03e
|
@ -168,6 +168,10 @@
|
||||||
compatible = "fsl,imx6q-caam-secvio";
|
compatible = "fsl,imx6q-caam-secvio";
|
||||||
interrupts = <0 20 0x04>;
|
interrupts = <0 20 0x04>;
|
||||||
secvio_src = <0x8000001d>;
|
secvio_src = <0x8000001d>;
|
||||||
|
jtag-tamper = "disabled";
|
||||||
|
watchdog-tamper = "enabled";
|
||||||
|
internal-boot-tamper = "enabled";
|
||||||
|
external-pin-tamper = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpmi: gpmi-nand@112000 {
|
gpmi: gpmi-nand@112000 {
|
||||||
|
|
|
@ -290,6 +290,10 @@
|
||||||
compatible = "fsl,imx6q-caam-secvio";
|
compatible = "fsl,imx6q-caam-secvio";
|
||||||
interrupts = <0 20 0x04>;
|
interrupts = <0 20 0x04>;
|
||||||
secvio_src = <0x8000001d>;
|
secvio_src = <0x8000001d>;
|
||||||
|
jtag-tamper = "disabled";
|
||||||
|
watchdog-tamper = "enabled";
|
||||||
|
internal-boot-tamper = "enabled";
|
||||||
|
external-pin-tamper = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpu3d: gpu3d@01800000 {
|
gpu3d: gpu3d@01800000 {
|
||||||
|
|
|
@ -226,12 +226,16 @@
|
||||||
|
|
||||||
caam_sm: caam-sm@00100000 {
|
caam_sm: caam-sm@00100000 {
|
||||||
compatible = "fsl,imx7d-caam-sm", "fsl,imx6q-caam-sm";
|
compatible = "fsl,imx7d-caam-sm", "fsl,imx6q-caam-sm";
|
||||||
reg = <0x00100000 0x8000>;
|
reg = <0x00100000 0x3fff>;
|
||||||
};
|
};
|
||||||
|
|
||||||
irq_sec_vio: caam_secvio {
|
irq_sec_vio: caam_secvio {
|
||||||
compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
|
compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
|
||||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
jtag-tamper = "disabled";
|
||||||
|
watchdog-tamper = "enabled";
|
||||||
|
internal-boot-tamper = "enabled";
|
||||||
|
external-pin-tamper = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
gpmi: gpmi-nand@1806000 {
|
gpmi: gpmi-nand@1806000 {
|
||||||
|
|
|
@ -112,8 +112,12 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
irq_sec_vio: caam_secvio {
|
irq_sec_vio: caam_secvio {
|
||||||
compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
|
compatible = "fsl,imx7d-caam-secvio", "fsl,imx6q-caam-secvio";
|
||||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>;
|
||||||
|
jtag-tamper = "disabled";
|
||||||
|
watchdog-tamper = "enabled";
|
||||||
|
internal-boot-tamper = "enabled";
|
||||||
|
external-pin-tamper = "disabled";
|
||||||
};
|
};
|
||||||
|
|
||||||
pmu {
|
pmu {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SNVS Security Violation Handler
|
* 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"
|
#include "compat.h"
|
||||||
|
@ -205,6 +205,8 @@ static int snvs_secvio_probe(struct platform_device *pdev)
|
||||||
struct snvs_full __iomem *snvsregs;
|
struct snvs_full __iomem *snvsregs;
|
||||||
int i, error;
|
int i, error;
|
||||||
u32 hpstate;
|
u32 hpstate;
|
||||||
|
const void *jtd, *wtd, *itd, *etd;
|
||||||
|
u32 td_en;
|
||||||
|
|
||||||
svpriv = kzalloc(sizeof(struct snvs_secvio_drv_private), GFP_KERNEL);
|
svpriv = kzalloc(sizeof(struct snvs_secvio_drv_private), GFP_KERNEL);
|
||||||
if (!svpriv)
|
if (!svpriv)
|
||||||
|
@ -227,6 +229,34 @@ static int snvs_secvio_probe(struct platform_device *pdev)
|
||||||
return -EINVAL;
|
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);
|
snvsregs = of_iomap(np, 0);
|
||||||
if (!snvsregs) {
|
if (!snvsregs) {
|
||||||
dev_err(svdev, "register mapping failed\n");
|
dev_err(svdev, "register mapping failed\n");
|
||||||
|
@ -240,6 +270,10 @@ static int snvs_secvio_probe(struct platform_device *pdev)
|
||||||
svpriv->clk = NULL;
|
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 */
|
/* Device data set up. Now init interrupt source descriptions */
|
||||||
for (i = 0; i < MAX_SECVIO_SOURCES; i++) {
|
for (i = 0; i < MAX_SECVIO_SOURCES; i++) {
|
||||||
svpriv->intsrc[i].intname = violation_src_name[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);
|
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) &
|
hpstate = (rd_reg32(&svpriv->svregs->hp.status) &
|
||||||
HP_STATUS_SSM_ST_MASK) >> HP_STATUS_SSM_ST_SHIFT;
|
HP_STATUS_SSM_ST_MASK) >> HP_STATUS_SSM_ST_SHIFT;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user