1*6b477063SVikram Kanigiri /* 2*6b477063SVikram Kanigiri * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3*6b477063SVikram Kanigiri * 4*6b477063SVikram Kanigiri * Redistribution and use in source and binary forms, with or without 5*6b477063SVikram Kanigiri * modification, are permitted provided that the following conditions are met: 6*6b477063SVikram Kanigiri * 7*6b477063SVikram Kanigiri * Redistributions of source code must retain the above copyright notice, this 8*6b477063SVikram Kanigiri * list of conditions and the following disclaimer. 9*6b477063SVikram Kanigiri * 10*6b477063SVikram Kanigiri * Redistributions in binary form must reproduce the above copyright notice, 11*6b477063SVikram Kanigiri * this list of conditions and the following disclaimer in the documentation 12*6b477063SVikram Kanigiri * and/or other materials provided with the distribution. 13*6b477063SVikram Kanigiri * 14*6b477063SVikram Kanigiri * Neither the name of ARM nor the names of its contributors may be used 15*6b477063SVikram Kanigiri * to endorse or promote products derived from this software without specific 16*6b477063SVikram Kanigiri * prior written permission. 17*6b477063SVikram Kanigiri * 18*6b477063SVikram Kanigiri * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19*6b477063SVikram Kanigiri * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*6b477063SVikram Kanigiri * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*6b477063SVikram Kanigiri * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22*6b477063SVikram Kanigiri * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23*6b477063SVikram Kanigiri * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24*6b477063SVikram Kanigiri * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25*6b477063SVikram Kanigiri * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26*6b477063SVikram Kanigiri * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27*6b477063SVikram Kanigiri * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28*6b477063SVikram Kanigiri * POSSIBILITY OF SUCH DAMAGE. 29*6b477063SVikram Kanigiri */ 30*6b477063SVikram Kanigiri 31*6b477063SVikram Kanigiri #ifndef __TZC_COMMON_H__ 32*6b477063SVikram Kanigiri #define __TZC_COMMON_H__ 33*6b477063SVikram Kanigiri 34*6b477063SVikram Kanigiri /* 35*6b477063SVikram Kanigiri * Offset of core registers from the start of the base of configuration 36*6b477063SVikram Kanigiri * registers for each region. 37*6b477063SVikram Kanigiri */ 38*6b477063SVikram Kanigiri 39*6b477063SVikram Kanigiri /* ID Registers */ 40*6b477063SVikram Kanigiri #define PID0_OFF 0xfe0 41*6b477063SVikram Kanigiri #define PID1_OFF 0xfe4 42*6b477063SVikram Kanigiri #define PID2_OFF 0xfe8 43*6b477063SVikram Kanigiri #define PID3_OFF 0xfec 44*6b477063SVikram Kanigiri #define PID4_OFF 0xfd0 45*6b477063SVikram Kanigiri #define CID0_OFF 0xff0 46*6b477063SVikram Kanigiri #define CID1_OFF 0xff4 47*6b477063SVikram Kanigiri #define CID2_OFF 0xff8 48*6b477063SVikram Kanigiri #define CID3_OFF 0xffc 49*6b477063SVikram Kanigiri 50*6b477063SVikram Kanigiri /* Bit positions of TZC_ACTION registers */ 51*6b477063SVikram Kanigiri #define TZC_ACTION_RV_SHIFT 0 52*6b477063SVikram Kanigiri #define TZC_ACTION_RV_MASK 0x3 53*6b477063SVikram Kanigiri #define TZC_ACTION_RV_LOWOK 0x0 54*6b477063SVikram Kanigiri #define TZC_ACTION_RV_LOWERR 0x1 55*6b477063SVikram Kanigiri #define TZC_ACTION_RV_HIGHOK 0x2 56*6b477063SVikram Kanigiri #define TZC_ACTION_RV_HIGHERR 0x3 57*6b477063SVikram Kanigiri 58*6b477063SVikram Kanigiri /* Used along with 'tzc_region_attributes_t' below */ 59*6b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_RD_SHIFT 30 60*6b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_WR_SHIFT 31 61*6b477063SVikram Kanigiri #define TZC_REGION_ATTR_F_EN_SHIFT 0 62*6b477063SVikram Kanigiri #define TZC_REGION_ATTR_SEC_SHIFT 30 63*6b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_RD_MASK 0x1 64*6b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_WR_MASK 0x1 65*6b477063SVikram Kanigiri #define TZC_REGION_ATTR_SEC_MASK 0x3 66*6b477063SVikram Kanigiri 67*6b477063SVikram Kanigiri #define TZC_REGION_ACCESS_WR_EN_SHIFT 16 68*6b477063SVikram Kanigiri #define TZC_REGION_ACCESS_RD_EN_SHIFT 0 69*6b477063SVikram Kanigiri #define TZC_REGION_ACCESS_ID_MASK 0xf 70*6b477063SVikram Kanigiri 71*6b477063SVikram Kanigiri /* Macros for allowing Non-Secure access to a region based on NSAID */ 72*6b477063SVikram Kanigiri #define TZC_REGION_ACCESS_RD(nsaid) \ 73*6b477063SVikram Kanigiri ((1 << (nsaid & TZC_REGION_ACCESS_ID_MASK)) << \ 74*6b477063SVikram Kanigiri TZC_REGION_ACCESS_RD_EN_SHIFT) 75*6b477063SVikram Kanigiri #define TZC_REGION_ACCESS_WR(nsaid) \ 76*6b477063SVikram Kanigiri ((1 << (nsaid & TZC_REGION_ACCESS_ID_MASK)) << \ 77*6b477063SVikram Kanigiri TZC_REGION_ACCESS_WR_EN_SHIFT) 78*6b477063SVikram Kanigiri #define TZC_REGION_ACCESS_RDWR(nsaid) \ 79*6b477063SVikram Kanigiri (TZC_REGION_ACCESS_RD(nsaid) | \ 80*6b477063SVikram Kanigiri TZC_REGION_ACCESS_WR(nsaid)) 81*6b477063SVikram Kanigiri 82*6b477063SVikram Kanigiri #ifndef __ASSEMBLY__ 83*6b477063SVikram Kanigiri 84*6b477063SVikram Kanigiri /* Returns offset of registers to program for a given region no */ 85*6b477063SVikram Kanigiri #define TZC_REGION_OFFSET(region_size, region_no) \ 86*6b477063SVikram Kanigiri ((region_size) * (region_no)) 87*6b477063SVikram Kanigiri 88*6b477063SVikram Kanigiri /* 89*6b477063SVikram Kanigiri * What type of action is expected when an access violation occurs. 90*6b477063SVikram Kanigiri * The memory requested is returned as zero. But we can also raise an event to 91*6b477063SVikram Kanigiri * let the system know it happened. 92*6b477063SVikram Kanigiri * We can raise an interrupt(INT) and/or cause an exception(ERR). 93*6b477063SVikram Kanigiri * TZC_ACTION_NONE - No interrupt, no Exception 94*6b477063SVikram Kanigiri * TZC_ACTION_ERR - No interrupt, raise exception -> sync external 95*6b477063SVikram Kanigiri * data abort 96*6b477063SVikram Kanigiri * TZC_ACTION_INT - Raise interrupt, no exception 97*6b477063SVikram Kanigiri * TZC_ACTION_ERR_INT - Raise interrupt, raise exception -> sync 98*6b477063SVikram Kanigiri * external data abort 99*6b477063SVikram Kanigiri */ 100*6b477063SVikram Kanigiri typedef enum { 101*6b477063SVikram Kanigiri TZC_ACTION_NONE = 0, 102*6b477063SVikram Kanigiri TZC_ACTION_ERR = 1, 103*6b477063SVikram Kanigiri TZC_ACTION_INT = 2, 104*6b477063SVikram Kanigiri TZC_ACTION_ERR_INT = (TZC_ACTION_ERR | TZC_ACTION_INT) 105*6b477063SVikram Kanigiri } tzc_action_t; 106*6b477063SVikram Kanigiri 107*6b477063SVikram Kanigiri /* 108*6b477063SVikram Kanigiri * Controls secure access to a region. If not enabled secure access is not 109*6b477063SVikram Kanigiri * allowed to region. 110*6b477063SVikram Kanigiri */ 111*6b477063SVikram Kanigiri typedef enum { 112*6b477063SVikram Kanigiri TZC_REGION_S_NONE = 0, 113*6b477063SVikram Kanigiri TZC_REGION_S_RD = 1, 114*6b477063SVikram Kanigiri TZC_REGION_S_WR = 2, 115*6b477063SVikram Kanigiri TZC_REGION_S_RDWR = (TZC_REGION_S_RD | TZC_REGION_S_WR) 116*6b477063SVikram Kanigiri } tzc_region_attributes_t; 117*6b477063SVikram Kanigiri 118*6b477063SVikram Kanigiri #endif /* __ASSEMBLY__ */ 119*6b477063SVikram Kanigiri #endif /* __TZC_COMMON_H__ */ 120