xref: /rk3399_ARM-atf/include/drivers/arm/tzc_common.h (revision 82cb2c1ad9897473743f08437d0a3995bed561b9)
16b477063SVikram Kanigiri /*
26b477063SVikram Kanigiri  * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
36b477063SVikram Kanigiri  *
4*82cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
56b477063SVikram Kanigiri  */
66b477063SVikram Kanigiri 
76b477063SVikram Kanigiri #ifndef __TZC_COMMON_H__
86b477063SVikram Kanigiri #define __TZC_COMMON_H__
96b477063SVikram Kanigiri 
106b477063SVikram Kanigiri /*
116b477063SVikram Kanigiri  * Offset of core registers from the start of the base of configuration
126b477063SVikram Kanigiri  * registers for each region.
136b477063SVikram Kanigiri  */
146b477063SVikram Kanigiri 
156b477063SVikram Kanigiri /* ID Registers */
166b477063SVikram Kanigiri #define PID0_OFF					0xfe0
176b477063SVikram Kanigiri #define PID1_OFF					0xfe4
186b477063SVikram Kanigiri #define PID2_OFF					0xfe8
196b477063SVikram Kanigiri #define PID3_OFF					0xfec
206b477063SVikram Kanigiri #define PID4_OFF					0xfd0
216b477063SVikram Kanigiri #define CID0_OFF					0xff0
226b477063SVikram Kanigiri #define CID1_OFF					0xff4
236b477063SVikram Kanigiri #define CID2_OFF					0xff8
246b477063SVikram Kanigiri #define CID3_OFF					0xffc
256b477063SVikram Kanigiri 
266b477063SVikram Kanigiri /* Bit positions of TZC_ACTION registers */
276b477063SVikram Kanigiri #define TZC_ACTION_RV_SHIFT				0
286b477063SVikram Kanigiri #define TZC_ACTION_RV_MASK				0x3
296b477063SVikram Kanigiri #define TZC_ACTION_RV_LOWOK				0x0
306b477063SVikram Kanigiri #define TZC_ACTION_RV_LOWERR				0x1
316b477063SVikram Kanigiri #define TZC_ACTION_RV_HIGHOK				0x2
326b477063SVikram Kanigiri #define TZC_ACTION_RV_HIGHERR				0x3
336b477063SVikram Kanigiri 
346b477063SVikram Kanigiri /* Used along with 'tzc_region_attributes_t' below */
356b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_RD_SHIFT			30
366b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_WR_SHIFT			31
376b477063SVikram Kanigiri #define TZC_REGION_ATTR_F_EN_SHIFT			0
386b477063SVikram Kanigiri #define TZC_REGION_ATTR_SEC_SHIFT			30
396b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_RD_MASK			0x1
406b477063SVikram Kanigiri #define TZC_REGION_ATTR_S_WR_MASK			0x1
416b477063SVikram Kanigiri #define TZC_REGION_ATTR_SEC_MASK			0x3
426b477063SVikram Kanigiri 
436b477063SVikram Kanigiri #define TZC_REGION_ACCESS_WR_EN_SHIFT			16
446b477063SVikram Kanigiri #define TZC_REGION_ACCESS_RD_EN_SHIFT			0
456b477063SVikram Kanigiri #define TZC_REGION_ACCESS_ID_MASK			0xf
466b477063SVikram Kanigiri 
476b477063SVikram Kanigiri /* Macros for allowing Non-Secure access to a region based on NSAID */
486b477063SVikram Kanigiri #define TZC_REGION_ACCESS_RD(nsaid)				\
496b477063SVikram Kanigiri 	((1 << (nsaid & TZC_REGION_ACCESS_ID_MASK)) <<		\
506b477063SVikram Kanigiri 	 TZC_REGION_ACCESS_RD_EN_SHIFT)
516b477063SVikram Kanigiri #define TZC_REGION_ACCESS_WR(nsaid)				\
526b477063SVikram Kanigiri 	((1 << (nsaid & TZC_REGION_ACCESS_ID_MASK)) <<		\
536b477063SVikram Kanigiri 	 TZC_REGION_ACCESS_WR_EN_SHIFT)
546b477063SVikram Kanigiri #define TZC_REGION_ACCESS_RDWR(nsaid)				\
556b477063SVikram Kanigiri 	(TZC_REGION_ACCESS_RD(nsaid) |				\
566b477063SVikram Kanigiri 	TZC_REGION_ACCESS_WR(nsaid))
576b477063SVikram Kanigiri 
586b477063SVikram Kanigiri #ifndef __ASSEMBLY__
596b477063SVikram Kanigiri 
606b477063SVikram Kanigiri /* Returns offset of registers to program for a given region no */
616b477063SVikram Kanigiri #define TZC_REGION_OFFSET(region_size, region_no)	\
626b477063SVikram Kanigiri 				((region_size) * (region_no))
636b477063SVikram Kanigiri 
646b477063SVikram Kanigiri /*
656b477063SVikram Kanigiri  * What type of action is expected when an access violation occurs.
666b477063SVikram Kanigiri  * The memory requested is returned as zero. But we can also raise an event to
676b477063SVikram Kanigiri  * let the system know it happened.
686b477063SVikram Kanigiri  * We can raise an interrupt(INT) and/or cause an exception(ERR).
696b477063SVikram Kanigiri  *  TZC_ACTION_NONE    - No interrupt, no Exception
706b477063SVikram Kanigiri  *  TZC_ACTION_ERR     - No interrupt, raise exception -> sync external
716b477063SVikram Kanigiri  *                       data abort
726b477063SVikram Kanigiri  *  TZC_ACTION_INT     - Raise interrupt, no exception
736b477063SVikram Kanigiri  *  TZC_ACTION_ERR_INT - Raise interrupt, raise exception -> sync
746b477063SVikram Kanigiri  *                       external data abort
756b477063SVikram Kanigiri  */
766b477063SVikram Kanigiri typedef enum {
776b477063SVikram Kanigiri 	TZC_ACTION_NONE = 0,
786b477063SVikram Kanigiri 	TZC_ACTION_ERR = 1,
796b477063SVikram Kanigiri 	TZC_ACTION_INT = 2,
806b477063SVikram Kanigiri 	TZC_ACTION_ERR_INT = (TZC_ACTION_ERR | TZC_ACTION_INT)
816b477063SVikram Kanigiri } tzc_action_t;
826b477063SVikram Kanigiri 
836b477063SVikram Kanigiri /*
846b477063SVikram Kanigiri  * Controls secure access to a region. If not enabled secure access is not
856b477063SVikram Kanigiri  * allowed to region.
866b477063SVikram Kanigiri  */
876b477063SVikram Kanigiri typedef enum {
886b477063SVikram Kanigiri 	TZC_REGION_S_NONE = 0,
896b477063SVikram Kanigiri 	TZC_REGION_S_RD = 1,
906b477063SVikram Kanigiri 	TZC_REGION_S_WR = 2,
916b477063SVikram Kanigiri 	TZC_REGION_S_RDWR = (TZC_REGION_S_RD | TZC_REGION_S_WR)
926b477063SVikram Kanigiri } tzc_region_attributes_t;
936b477063SVikram Kanigiri 
946b477063SVikram Kanigiri #endif /* __ASSEMBLY__ */
956b477063SVikram Kanigiri #endif /* __TZC_COMMON_H__ */
96