1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef TZC_COMMON_H 8*91f16700Schasinglulu #define TZC_COMMON_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <lib/utils_def.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu /* 13*91f16700Schasinglulu * Offset of core registers from the start of the base of configuration 14*91f16700Schasinglulu * registers for each region. 15*91f16700Schasinglulu */ 16*91f16700Schasinglulu 17*91f16700Schasinglulu /* ID Registers */ 18*91f16700Schasinglulu #define PID0_OFF U(0xfe0) 19*91f16700Schasinglulu #define PID1_OFF U(0xfe4) 20*91f16700Schasinglulu #define PID2_OFF U(0xfe8) 21*91f16700Schasinglulu #define PID3_OFF U(0xfec) 22*91f16700Schasinglulu #define PID4_OFF U(0xfd0) 23*91f16700Schasinglulu #define CID0_OFF U(0xff0) 24*91f16700Schasinglulu #define CID1_OFF U(0xff4) 25*91f16700Schasinglulu #define CID2_OFF U(0xff8) 26*91f16700Schasinglulu #define CID3_OFF U(0xffc) 27*91f16700Schasinglulu 28*91f16700Schasinglulu /* 29*91f16700Schasinglulu * What type of action is expected when an access violation occurs. 30*91f16700Schasinglulu * The memory requested is returned as zero. But we can also raise an event to 31*91f16700Schasinglulu * let the system know it happened. 32*91f16700Schasinglulu * We can raise an interrupt(INT) and/or cause an exception(ERR). 33*91f16700Schasinglulu * TZC_ACTION_NONE - No interrupt, no Exception 34*91f16700Schasinglulu * TZC_ACTION_ERR - No interrupt, raise exception -> sync external 35*91f16700Schasinglulu * data abort 36*91f16700Schasinglulu * TZC_ACTION_INT - Raise interrupt, no exception 37*91f16700Schasinglulu * TZC_ACTION_ERR_INT - Raise interrupt, raise exception -> sync 38*91f16700Schasinglulu * external data abort 39*91f16700Schasinglulu */ 40*91f16700Schasinglulu #define TZC_ACTION_NONE U(0) 41*91f16700Schasinglulu #define TZC_ACTION_ERR U(1) 42*91f16700Schasinglulu #define TZC_ACTION_INT U(2) 43*91f16700Schasinglulu #define TZC_ACTION_ERR_INT (TZC_ACTION_ERR | TZC_ACTION_INT) 44*91f16700Schasinglulu 45*91f16700Schasinglulu /* Bit positions of TZC_ACTION registers */ 46*91f16700Schasinglulu #define TZC_ACTION_RV_SHIFT 0 47*91f16700Schasinglulu #define TZC_ACTION_RV_MASK U(0x3) 48*91f16700Schasinglulu #define TZC_ACTION_RV_LOWOK U(0x0) 49*91f16700Schasinglulu #define TZC_ACTION_RV_LOWERR U(0x1) 50*91f16700Schasinglulu #define TZC_ACTION_RV_HIGHOK U(0x2) 51*91f16700Schasinglulu #define TZC_ACTION_RV_HIGHERR U(0x3) 52*91f16700Schasinglulu 53*91f16700Schasinglulu /* 54*91f16700Schasinglulu * Controls secure access to a region. If not enabled secure access is not 55*91f16700Schasinglulu * allowed to region. 56*91f16700Schasinglulu */ 57*91f16700Schasinglulu #define TZC_REGION_S_NONE U(0) 58*91f16700Schasinglulu #define TZC_REGION_S_RD U(1) 59*91f16700Schasinglulu #define TZC_REGION_S_WR U(2) 60*91f16700Schasinglulu #define TZC_REGION_S_RDWR (TZC_REGION_S_RD | TZC_REGION_S_WR) 61*91f16700Schasinglulu 62*91f16700Schasinglulu #define TZC_REGION_ATTR_S_RD_SHIFT 30 63*91f16700Schasinglulu #define TZC_REGION_ATTR_S_WR_SHIFT 31 64*91f16700Schasinglulu #define TZC_REGION_ATTR_F_EN_SHIFT 0 65*91f16700Schasinglulu #define TZC_REGION_ATTR_SEC_SHIFT 30 66*91f16700Schasinglulu #define TZC_REGION_ATTR_S_RD_MASK U(0x1) 67*91f16700Schasinglulu #define TZC_REGION_ATTR_S_WR_MASK U(0x1) 68*91f16700Schasinglulu #define TZC_REGION_ATTR_SEC_MASK U(0x3) 69*91f16700Schasinglulu 70*91f16700Schasinglulu #define TZC_REGION_ACCESS_WR_EN_SHIFT 16 71*91f16700Schasinglulu #define TZC_REGION_ACCESS_RD_EN_SHIFT 0 72*91f16700Schasinglulu #define TZC_REGION_ACCESS_ID_MASK U(0xf) 73*91f16700Schasinglulu 74*91f16700Schasinglulu /* Macros for allowing Non-Secure access to a region based on NSAID */ 75*91f16700Schasinglulu #define TZC_REGION_ACCESS_RD(nsaid) \ 76*91f16700Schasinglulu ((U(1) << ((nsaid) & TZC_REGION_ACCESS_ID_MASK)) << \ 77*91f16700Schasinglulu TZC_REGION_ACCESS_RD_EN_SHIFT) 78*91f16700Schasinglulu #define TZC_REGION_ACCESS_WR(nsaid) \ 79*91f16700Schasinglulu ((U(1) << ((nsaid) & TZC_REGION_ACCESS_ID_MASK)) << \ 80*91f16700Schasinglulu TZC_REGION_ACCESS_WR_EN_SHIFT) 81*91f16700Schasinglulu #define TZC_REGION_ACCESS_RDWR(nsaid) \ 82*91f16700Schasinglulu (TZC_REGION_ACCESS_RD(nsaid) | \ 83*91f16700Schasinglulu TZC_REGION_ACCESS_WR(nsaid)) 84*91f16700Schasinglulu 85*91f16700Schasinglulu /* Returns offset of registers to program for a given region no */ 86*91f16700Schasinglulu #define TZC_REGION_OFFSET(region_size, region_no) \ 87*91f16700Schasinglulu ((region_size) * (region_no)) 88*91f16700Schasinglulu 89*91f16700Schasinglulu #endif /* TZC_COMMON_H */ 90