xref: /optee_os/core/drivers/imx_snvs.c (revision 599784c7ffd43203014ed6596ab115e05b574cdd)
11bb92983SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
2c6ac89bcSPeng Fan /*
3*599784c7SRouven Czerwinski  * Copyright (C) 2020 Pengutronix
4*599784c7SRouven Czerwinski  * Rouven Czerwinski <entwicklung@pengutronix.de>
5c6ac89bcSPeng Fan  */
6c6ac89bcSPeng Fan 
7c6ac89bcSPeng Fan #include <io.h>
8c6ac89bcSPeng Fan #include <drivers/imx_snvs.h>
9c6ac89bcSPeng Fan #include <mm/core_memprot.h>
10c6ac89bcSPeng Fan #include <mm/core_mmu.h>
11c6ac89bcSPeng Fan #include <stdint.h>
12c6ac89bcSPeng Fan #include <types_ext.h>
13c6ac89bcSPeng Fan #include <trace.h>
14c6ac89bcSPeng Fan 
15*599784c7SRouven Czerwinski enum snvs_security_cfg snvs_get_security_cfg(void)
16c6ac89bcSPeng Fan {
17c6ac89bcSPeng Fan 	vaddr_t snvs = core_mmu_get_va(SNVS_BASE, MEM_AREA_IO_SEC);
18*599784c7SRouven Czerwinski 	uint32_t val = 0;
19c6ac89bcSPeng Fan 
20*599784c7SRouven Czerwinski 	val = io_read32(snvs + SNVS_HPSR);
21*599784c7SRouven Czerwinski 	DMSG("HPSR: 0x%"PRIx32, val);
22*599784c7SRouven Czerwinski 	if (val & SNVS_HPSR_SYS_SECURITY_BAD)
23*599784c7SRouven Czerwinski 		return SNVS_SECURITY_CFG_FIELD_RETURN;
24*599784c7SRouven Czerwinski 	else if (val & SNVS_HPSR_SYS_SECURITY_CLOSED)
25*599784c7SRouven Czerwinski 		return SNVS_SECURITY_CFG_CLOSED;
26*599784c7SRouven Czerwinski 	else if (val & SNVS_HPSR_SYS_SECURITY_OPEN)
27*599784c7SRouven Czerwinski 		return SNVS_SECURITY_CFG_OPEN;
28*599784c7SRouven Czerwinski 	else if (val > 4 && val < 8)
29*599784c7SRouven Czerwinski 		return SNVS_SECURITY_CFG_OPEN;
30c6ac89bcSPeng Fan 
31*599784c7SRouven Czerwinski 	return SNVS_SECURITY_CFG_FAB;
32c6ac89bcSPeng Fan }
33c6ac89bcSPeng Fan 
34*599784c7SRouven Czerwinski enum snvs_ssm_mode snvs_get_ssm_mode(void)
35c6ac89bcSPeng Fan {
36c6ac89bcSPeng Fan 	vaddr_t snvs = core_mmu_get_va(SNVS_BASE, MEM_AREA_IO_SEC);
37*599784c7SRouven Czerwinski 	uint32_t val = 0;
38c6ac89bcSPeng Fan 
39*599784c7SRouven Czerwinski 	val = io_read32(snvs + SNVS_HPSR);
40*599784c7SRouven Czerwinski 	val &= HPSR_SSM_ST_MASK;
41*599784c7SRouven Czerwinski 	val = val >> HPSR_SSM_ST_SHIFT;
42*599784c7SRouven Czerwinski 	DMSG("HPSR: SSM ST Mode: 0x%01"PRIx32, val);
43*599784c7SRouven Czerwinski 	return val;
44c6ac89bcSPeng Fan }
45