11bb92983SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause 2c6ac89bcSPeng Fan /* 3599784c7SRouven Czerwinski * Copyright (C) 2020 Pengutronix 4599784c7SRouven 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 15599784c7SRouven Czerwinski enum snvs_security_cfg snvs_get_security_cfg(void) 16c6ac89bcSPeng Fan { 17*c2e4eb43SAnton Rybakov vaddr_t snvs = core_mmu_get_va(SNVS_BASE, MEM_AREA_IO_SEC, 18*c2e4eb43SAnton Rybakov SNVS_HPSR + sizeof(uint32_t)); 19599784c7SRouven Czerwinski uint32_t val = 0; 20c6ac89bcSPeng Fan 21599784c7SRouven Czerwinski val = io_read32(snvs + SNVS_HPSR); 22599784c7SRouven Czerwinski DMSG("HPSR: 0x%"PRIx32, val); 23599784c7SRouven Czerwinski if (val & SNVS_HPSR_SYS_SECURITY_BAD) 24599784c7SRouven Czerwinski return SNVS_SECURITY_CFG_FIELD_RETURN; 25599784c7SRouven Czerwinski else if (val & SNVS_HPSR_SYS_SECURITY_CLOSED) 26599784c7SRouven Czerwinski return SNVS_SECURITY_CFG_CLOSED; 27599784c7SRouven Czerwinski else if (val & SNVS_HPSR_SYS_SECURITY_OPEN) 28599784c7SRouven Czerwinski return SNVS_SECURITY_CFG_OPEN; 29599784c7SRouven Czerwinski else if (val > 4 && val < 8) 30599784c7SRouven Czerwinski return SNVS_SECURITY_CFG_OPEN; 31c6ac89bcSPeng Fan 32599784c7SRouven Czerwinski return SNVS_SECURITY_CFG_FAB; 33c6ac89bcSPeng Fan } 34c6ac89bcSPeng Fan 35599784c7SRouven Czerwinski enum snvs_ssm_mode snvs_get_ssm_mode(void) 36c6ac89bcSPeng Fan { 37*c2e4eb43SAnton Rybakov vaddr_t snvs = core_mmu_get_va(SNVS_BASE, MEM_AREA_IO_SEC, 38*c2e4eb43SAnton Rybakov SNVS_HPSR + sizeof(uint32_t)); 39599784c7SRouven Czerwinski uint32_t val = 0; 40c6ac89bcSPeng Fan 41599784c7SRouven Czerwinski val = io_read32(snvs + SNVS_HPSR); 42599784c7SRouven Czerwinski val &= HPSR_SSM_ST_MASK; 43599784c7SRouven Czerwinski val = val >> HPSR_SSM_ST_SHIFT; 44599784c7SRouven Czerwinski DMSG("HPSR: SSM ST Mode: 0x%01"PRIx32, val); 45599784c7SRouven Czerwinski return val; 46c6ac89bcSPeng Fan } 47