16b477063SVikram Kanigiri /* 2*af6491f8SAntonio Nino Diaz * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved. 36b477063SVikram Kanigiri * 482cb2c1aSdp-arm * SPDX-License-Identifier: BSD-3-Clause 56b477063SVikram Kanigiri */ 66b477063SVikram Kanigiri 7*af6491f8SAntonio Nino Diaz #ifndef TZC_COMMON_H 8*af6491f8SAntonio Nino Diaz #define TZC_COMMON_H 9*af6491f8SAntonio Nino Diaz 10*af6491f8SAntonio Nino Diaz #include <utils_def.h> 116b477063SVikram Kanigiri 126b477063SVikram Kanigiri /* 136b477063SVikram Kanigiri * Offset of core registers from the start of the base of configuration 146b477063SVikram Kanigiri * registers for each region. 156b477063SVikram Kanigiri */ 166b477063SVikram Kanigiri 176b477063SVikram Kanigiri /* ID Registers */ 18*af6491f8SAntonio Nino Diaz #define PID0_OFF U(0xfe0) 19*af6491f8SAntonio Nino Diaz #define PID1_OFF U(0xfe4) 20*af6491f8SAntonio Nino Diaz #define PID2_OFF U(0xfe8) 21*af6491f8SAntonio Nino Diaz #define PID3_OFF U(0xfec) 22*af6491f8SAntonio Nino Diaz #define PID4_OFF U(0xfd0) 23*af6491f8SAntonio Nino Diaz #define CID0_OFF U(0xff0) 24*af6491f8SAntonio Nino Diaz #define CID1_OFF U(0xff4) 25*af6491f8SAntonio Nino Diaz #define CID2_OFF U(0xff8) 26*af6491f8SAntonio Nino Diaz #define CID3_OFF U(0xffc) 276b477063SVikram Kanigiri 286b477063SVikram Kanigiri /* 296b477063SVikram Kanigiri * What type of action is expected when an access violation occurs. 306b477063SVikram Kanigiri * The memory requested is returned as zero. But we can also raise an event to 316b477063SVikram Kanigiri * let the system know it happened. 326b477063SVikram Kanigiri * We can raise an interrupt(INT) and/or cause an exception(ERR). 336b477063SVikram Kanigiri * TZC_ACTION_NONE - No interrupt, no Exception 346b477063SVikram Kanigiri * TZC_ACTION_ERR - No interrupt, raise exception -> sync external 356b477063SVikram Kanigiri * data abort 366b477063SVikram Kanigiri * TZC_ACTION_INT - Raise interrupt, no exception 376b477063SVikram Kanigiri * TZC_ACTION_ERR_INT - Raise interrupt, raise exception -> sync 386b477063SVikram Kanigiri * external data abort 396b477063SVikram Kanigiri */ 40*af6491f8SAntonio Nino Diaz #define TZC_ACTION_NONE U(0) 41*af6491f8SAntonio Nino Diaz #define TZC_ACTION_ERR U(1) 42*af6491f8SAntonio Nino Diaz #define TZC_ACTION_INT U(2) 43*af6491f8SAntonio Nino Diaz #define TZC_ACTION_ERR_INT (TZC_ACTION_ERR | TZC_ACTION_INT) 44*af6491f8SAntonio Nino Diaz 45*af6491f8SAntonio Nino Diaz /* Bit positions of TZC_ACTION registers */ 46*af6491f8SAntonio Nino Diaz #define TZC_ACTION_RV_SHIFT 0 47*af6491f8SAntonio Nino Diaz #define TZC_ACTION_RV_MASK U(0x3) 48*af6491f8SAntonio Nino Diaz #define TZC_ACTION_RV_LOWOK U(0x0) 49*af6491f8SAntonio Nino Diaz #define TZC_ACTION_RV_LOWERR U(0x1) 50*af6491f8SAntonio Nino Diaz #define TZC_ACTION_RV_HIGHOK U(0x2) 51*af6491f8SAntonio Nino Diaz #define TZC_ACTION_RV_HIGHERR U(0x3) 526b477063SVikram Kanigiri 536b477063SVikram Kanigiri /* 546b477063SVikram Kanigiri * Controls secure access to a region. If not enabled secure access is not 556b477063SVikram Kanigiri * allowed to region. 566b477063SVikram Kanigiri */ 57*af6491f8SAntonio Nino Diaz #define TZC_REGION_S_NONE U(0) 58*af6491f8SAntonio Nino Diaz #define TZC_REGION_S_RD U(1) 59*af6491f8SAntonio Nino Diaz #define TZC_REGION_S_WR U(2) 60*af6491f8SAntonio Nino Diaz #define TZC_REGION_S_RDWR (TZC_REGION_S_RD | TZC_REGION_S_WR) 61*af6491f8SAntonio Nino Diaz 62*af6491f8SAntonio Nino Diaz #define TZC_REGION_ATTR_S_RD_SHIFT 30 63*af6491f8SAntonio Nino Diaz #define TZC_REGION_ATTR_S_WR_SHIFT 31 64*af6491f8SAntonio Nino Diaz #define TZC_REGION_ATTR_F_EN_SHIFT 0 65*af6491f8SAntonio Nino Diaz #define TZC_REGION_ATTR_SEC_SHIFT 30 66*af6491f8SAntonio Nino Diaz #define TZC_REGION_ATTR_S_RD_MASK U(0x1) 67*af6491f8SAntonio Nino Diaz #define TZC_REGION_ATTR_S_WR_MASK U(0x1) 68*af6491f8SAntonio Nino Diaz #define TZC_REGION_ATTR_SEC_MASK U(0x3) 69*af6491f8SAntonio Nino Diaz 70*af6491f8SAntonio Nino Diaz #define TZC_REGION_ACCESS_WR_EN_SHIFT 16 71*af6491f8SAntonio Nino Diaz #define TZC_REGION_ACCESS_RD_EN_SHIFT 0 72*af6491f8SAntonio Nino Diaz #define TZC_REGION_ACCESS_ID_MASK U(0xf) 73*af6491f8SAntonio Nino Diaz 74*af6491f8SAntonio Nino Diaz /* Macros for allowing Non-Secure access to a region based on NSAID */ 75*af6491f8SAntonio Nino Diaz #define TZC_REGION_ACCESS_RD(nsaid) \ 76*af6491f8SAntonio Nino Diaz ((U(1) << (nsaid & TZC_REGION_ACCESS_ID_MASK)) << \ 77*af6491f8SAntonio Nino Diaz TZC_REGION_ACCESS_RD_EN_SHIFT) 78*af6491f8SAntonio Nino Diaz #define TZC_REGION_ACCESS_WR(nsaid) \ 79*af6491f8SAntonio Nino Diaz ((U(1) << (nsaid & TZC_REGION_ACCESS_ID_MASK)) << \ 80*af6491f8SAntonio Nino Diaz TZC_REGION_ACCESS_WR_EN_SHIFT) 81*af6491f8SAntonio Nino Diaz #define TZC_REGION_ACCESS_RDWR(nsaid) \ 82*af6491f8SAntonio Nino Diaz (TZC_REGION_ACCESS_RD(nsaid) | \ 83*af6491f8SAntonio Nino Diaz TZC_REGION_ACCESS_WR(nsaid)) 84*af6491f8SAntonio Nino Diaz 85*af6491f8SAntonio Nino Diaz /* Returns offset of registers to program for a given region no */ 86*af6491f8SAntonio Nino Diaz #define TZC_REGION_OFFSET(region_size, region_no) \ 87*af6491f8SAntonio Nino Diaz ((region_size) * (region_no)) 88*af6491f8SAntonio Nino Diaz 89*af6491f8SAntonio Nino Diaz #ifndef __ASSEMBLY__ 90*af6491f8SAntonio Nino Diaz 91*af6491f8SAntonio Nino Diaz #if !ERROR_DEPRECATED 92*af6491f8SAntonio Nino Diaz typedef unsigned int tzc_action_t; 93*af6491f8SAntonio Nino Diaz typedef unsigned int tzc_region_attributes_t; 94*af6491f8SAntonio Nino Diaz #endif 956b477063SVikram Kanigiri 966b477063SVikram Kanigiri #endif /* __ASSEMBLY__ */ 97*af6491f8SAntonio Nino Diaz #endif /* TZC_COMMON_H */ 98