xref: /rk3399_ARM-atf/include/drivers/arm/tzc_dmc620.h (revision 9d3b191a4846e42070ca35b032db0501b910690b)
1*9d3b191aSVijayenthiran Subramaniam /*
2*9d3b191aSVijayenthiran Subramaniam  * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3*9d3b191aSVijayenthiran Subramaniam  *
4*9d3b191aSVijayenthiran Subramaniam  * SPDX-License-Identifier: BSD-3-Clause
5*9d3b191aSVijayenthiran Subramaniam  */
6*9d3b191aSVijayenthiran Subramaniam 
7*9d3b191aSVijayenthiran Subramaniam #ifndef TZC_DMC620_H
8*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_H
9*9d3b191aSVijayenthiran Subramaniam 
10*9d3b191aSVijayenthiran Subramaniam #include <utils_def.h>
11*9d3b191aSVijayenthiran Subramaniam 
12*9d3b191aSVijayenthiran Subramaniam /* DMC-620 memc register offsets */
13*9d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_STATUS	U(0x0000)
14*9d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD		U(0x0008)
15*9d3b191aSVijayenthiran Subramaniam 
16*9d3b191aSVijayenthiran Subramaniam /* Mask value to check the status of memc_cmd register */
17*9d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD_MASK	U(0x00000007)
18*9d3b191aSVijayenthiran Subramaniam 
19*9d3b191aSVijayenthiran Subramaniam /* memc_cmd register's action values */
20*9d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD_GO	U(0x00000003)
21*9d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD_EXECUTE	U(0x00000004)
22*9d3b191aSVijayenthiran Subramaniam 
23*9d3b191aSVijayenthiran Subramaniam /* Address offsets of access address next region 0 registers */
24*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_31_00_NEXT_BASE	U(0x0080)
25*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_47_32_NEXT_BASE	U(0x0084)
26*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_31_00_NEXT_BASE	U(0x0088)
27*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_47_32_NEXT_BASE	U(0x008c)
28*9d3b191aSVijayenthiran Subramaniam 
29*9d3b191aSVijayenthiran Subramaniam /* Length of one block of access address next register region */
30*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_NEXT_SIZE		U(0x0010)
31*9d3b191aSVijayenthiran Subramaniam 
32*9d3b191aSVijayenthiran Subramaniam /* Address offsets of access address next registers */
33*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_31_00_NEXT(region_no)	\
34*9d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MIN_31_00_NEXT_BASE +	\
35*9d3b191aSVijayenthiran Subramaniam 			(region_no * DMC620_ACC_ADDR_NEXT_SIZE))
36*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_47_32_NEXT(region_no)	\
37*9d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MIN_47_32_NEXT_BASE +	\
38*9d3b191aSVijayenthiran Subramaniam 			(region_no * DMC620_ACC_ADDR_NEXT_SIZE))
39*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_31_00_NEXT(region_no)	\
40*9d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MAX_31_00_NEXT_BASE +	\
41*9d3b191aSVijayenthiran Subramaniam 			(region_no * DMC620_ACC_ADDR_NEXT_SIZE))
42*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_47_32_NEXT(region_no)	\
43*9d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MAX_47_32_NEXT_BASE +	\
44*9d3b191aSVijayenthiran Subramaniam 			(region_no * DMC620_ACC_ADDR_NEXT_SIZE))
45*9d3b191aSVijayenthiran Subramaniam 
46*9d3b191aSVijayenthiran Subramaniam /* Number of TZC address regions in DMC-620 */
47*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_COUNT	U(8)
48*9d3b191aSVijayenthiran Subramaniam /* Width of access address registers */
49*9d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_WIDTH	U(32)
50*9d3b191aSVijayenthiran Subramaniam 
51*9d3b191aSVijayenthiran Subramaniam /* Peripheral ID registers offsets */
52*9d3b191aSVijayenthiran Subramaniam #define DMC620_PERIPHERAL_ID_0		U(0x1fe0)
53*9d3b191aSVijayenthiran Subramaniam 
54*9d3b191aSVijayenthiran Subramaniam /* Default values in id registers */
55*9d3b191aSVijayenthiran Subramaniam #define DMC620_PERIPHERAL_ID_0_VALUE	U(0x00000054)
56*9d3b191aSVijayenthiran Subramaniam 
57*9d3b191aSVijayenthiran Subramaniam /* Secure access region attributes. */
58*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_NS_RD		U(0x00000001)
59*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_NS_WR		U(0x00000002)
60*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_NS_RDWR	\
61*9d3b191aSVijayenthiran Subramaniam 	(TZC_DMC620_REGION_NS_RD | TZC_DMC620_REGION_NS_WR)
62*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_RD		U(0x00000004)
63*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_WR		U(0x00000008)
64*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_RDWR	\
65*9d3b191aSVijayenthiran Subramaniam 	(TZC_DMC620_REGION_S_RD | TZC_DMC620_REGION_S_WR)
66*9d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_NS_RDWR	\
67*9d3b191aSVijayenthiran Subramaniam 	(TZC_DMC620_REGION_NS_RDWR | TZC_DMC620_REGION_S_RDWR)
68*9d3b191aSVijayenthiran Subramaniam 
69*9d3b191aSVijayenthiran Subramaniam /*
70*9d3b191aSVijayenthiran Subramaniam  * Contains pointer to the base addresses of all the DMC-620 instances.
71*9d3b191aSVijayenthiran Subramaniam  * 'dmc_count' specifies the number of DMC base addresses contained in the
72*9d3b191aSVijayenthiran Subramaniam  * array pointed to by dmc_base.
73*9d3b191aSVijayenthiran Subramaniam  */
74*9d3b191aSVijayenthiran Subramaniam typedef struct tzc_dmc620_driver_data {
75*9d3b191aSVijayenthiran Subramaniam 	const uintptr_t *dmc_base;
76*9d3b191aSVijayenthiran Subramaniam 	const unsigned int dmc_count;
77*9d3b191aSVijayenthiran Subramaniam } tzc_dmc620_driver_data_t;
78*9d3b191aSVijayenthiran Subramaniam 
79*9d3b191aSVijayenthiran Subramaniam /*
80*9d3b191aSVijayenthiran Subramaniam  * Contains region base, region top addresses and corresponding attributes
81*9d3b191aSVijayenthiran Subramaniam  * for configuring TZC access region registers.
82*9d3b191aSVijayenthiran Subramaniam  */
83*9d3b191aSVijayenthiran Subramaniam typedef struct tzc_dmc620_acc_addr_data {
84*9d3b191aSVijayenthiran Subramaniam 	const unsigned long long region_base;
85*9d3b191aSVijayenthiran Subramaniam 	const unsigned long long region_top;
86*9d3b191aSVijayenthiran Subramaniam 	const unsigned int sec_attr;
87*9d3b191aSVijayenthiran Subramaniam } tzc_dmc620_acc_addr_data_t;
88*9d3b191aSVijayenthiran Subramaniam 
89*9d3b191aSVijayenthiran Subramaniam /*
90*9d3b191aSVijayenthiran Subramaniam  * Contains platform specific data for configuring TZC region base and
91*9d3b191aSVijayenthiran Subramaniam  * region top address. 'acc_addr_count' specifies the number of
92*9d3b191aSVijayenthiran Subramaniam  * valid entries in 'plat_acc_addr_data' array.
93*9d3b191aSVijayenthiran Subramaniam  */
94*9d3b191aSVijayenthiran Subramaniam typedef struct tzc_dmc620_config_data {
95*9d3b191aSVijayenthiran Subramaniam 	const tzc_dmc620_driver_data_t *plat_drv_data;
96*9d3b191aSVijayenthiran Subramaniam 	const tzc_dmc620_acc_addr_data_t *plat_acc_addr_data;
97*9d3b191aSVijayenthiran Subramaniam 	const uint8_t acc_addr_count;
98*9d3b191aSVijayenthiran Subramaniam } tzc_dmc620_config_data_t;
99*9d3b191aSVijayenthiran Subramaniam 
100*9d3b191aSVijayenthiran Subramaniam /* Function prototypes */
101*9d3b191aSVijayenthiran Subramaniam void arm_tzc_dmc620_setup(const tzc_dmc620_config_data_t *plat_config_data);
102*9d3b191aSVijayenthiran Subramaniam 
103*9d3b191aSVijayenthiran Subramaniam #endif /* TZC_DMC620_H */
104*9d3b191aSVijayenthiran Subramaniam 
105