xref: /rk3399_ARM-atf/include/drivers/arm/tzc_dmc620.h (revision 858e69e85e3a2021d053cdf1e4cc6b03e429561e)
19d3b191aSVijayenthiran Subramaniam /*
2*858e69e8SAlexei Fedorov  * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
39d3b191aSVijayenthiran Subramaniam  *
49d3b191aSVijayenthiran Subramaniam  * SPDX-License-Identifier: BSD-3-Clause
59d3b191aSVijayenthiran Subramaniam  */
69d3b191aSVijayenthiran Subramaniam 
79d3b191aSVijayenthiran Subramaniam #ifndef TZC_DMC620_H
89d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_H
99d3b191aSVijayenthiran Subramaniam 
1009d40e0eSAntonio Nino Diaz #include <lib/utils_def.h>
119d3b191aSVijayenthiran Subramaniam 
129d3b191aSVijayenthiran Subramaniam /* DMC-620 memc register offsets */
139d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_STATUS	U(0x0000)
149d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD		U(0x0008)
159d3b191aSVijayenthiran Subramaniam 
169d3b191aSVijayenthiran Subramaniam /* Mask value to check the status of memc_cmd register */
179d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD_MASK	U(0x00000007)
189d3b191aSVijayenthiran Subramaniam 
199d3b191aSVijayenthiran Subramaniam /* memc_cmd register's action values */
209d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD_GO	U(0x00000003)
219d3b191aSVijayenthiran Subramaniam #define DMC620_MEMC_CMD_EXECUTE	U(0x00000004)
229d3b191aSVijayenthiran Subramaniam 
239d3b191aSVijayenthiran Subramaniam /* Address offsets of access address next region 0 registers */
249d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_31_00_NEXT_BASE	U(0x0080)
259d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_47_32_NEXT_BASE	U(0x0084)
269d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_31_00_NEXT_BASE	U(0x0088)
279d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_47_32_NEXT_BASE	U(0x008c)
289d3b191aSVijayenthiran Subramaniam 
299d3b191aSVijayenthiran Subramaniam /* Length of one block of access address next register region */
309d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_NEXT_SIZE		U(0x0010)
319d3b191aSVijayenthiran Subramaniam 
329d3b191aSVijayenthiran Subramaniam /* Address offsets of access address next registers */
339d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_31_00_NEXT(region_no)	\
349d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MIN_31_00_NEXT_BASE +	\
35*858e69e8SAlexei Fedorov 			((region_no) * DMC620_ACC_ADDR_NEXT_SIZE))
369d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MIN_47_32_NEXT(region_no)	\
379d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MIN_47_32_NEXT_BASE +	\
38*858e69e8SAlexei Fedorov 			((region_no) * DMC620_ACC_ADDR_NEXT_SIZE))
399d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_31_00_NEXT(region_no)	\
409d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MAX_31_00_NEXT_BASE +	\
41*858e69e8SAlexei Fedorov 			((region_no) * DMC620_ACC_ADDR_NEXT_SIZE))
429d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_MAX_47_32_NEXT(region_no)	\
439d3b191aSVijayenthiran Subramaniam 		(DMC620_ACC_ADDR_MAX_47_32_NEXT_BASE +	\
44*858e69e8SAlexei Fedorov 			((region_no) * DMC620_ACC_ADDR_NEXT_SIZE))
459d3b191aSVijayenthiran Subramaniam 
469d3b191aSVijayenthiran Subramaniam /* Number of TZC address regions in DMC-620 */
479d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_COUNT	U(8)
489d3b191aSVijayenthiran Subramaniam /* Width of access address registers */
499d3b191aSVijayenthiran Subramaniam #define DMC620_ACC_ADDR_WIDTH	U(32)
509d3b191aSVijayenthiran Subramaniam 
519d3b191aSVijayenthiran Subramaniam /* Peripheral ID registers offsets */
529d3b191aSVijayenthiran Subramaniam #define DMC620_PERIPHERAL_ID_0		U(0x1fe0)
539d3b191aSVijayenthiran Subramaniam 
549d3b191aSVijayenthiran Subramaniam /* Default values in id registers */
559d3b191aSVijayenthiran Subramaniam #define DMC620_PERIPHERAL_ID_0_VALUE	U(0x00000054)
569d3b191aSVijayenthiran Subramaniam 
579d3b191aSVijayenthiran Subramaniam /* Secure access region attributes. */
589d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_NS_RD		U(0x00000001)
599d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_NS_WR		U(0x00000002)
609d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_NS_RDWR	\
619d3b191aSVijayenthiran Subramaniam 	(TZC_DMC620_REGION_NS_RD | TZC_DMC620_REGION_NS_WR)
629d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_RD		U(0x00000004)
639d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_WR		U(0x00000008)
649d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_RDWR	\
659d3b191aSVijayenthiran Subramaniam 	(TZC_DMC620_REGION_S_RD | TZC_DMC620_REGION_S_WR)
669d3b191aSVijayenthiran Subramaniam #define TZC_DMC620_REGION_S_NS_RDWR	\
679d3b191aSVijayenthiran Subramaniam 	(TZC_DMC620_REGION_NS_RDWR | TZC_DMC620_REGION_S_RDWR)
689d3b191aSVijayenthiran Subramaniam 
699d3b191aSVijayenthiran Subramaniam /*
709d3b191aSVijayenthiran Subramaniam  * Contains pointer to the base addresses of all the DMC-620 instances.
719d3b191aSVijayenthiran Subramaniam  * 'dmc_count' specifies the number of DMC base addresses contained in the
729d3b191aSVijayenthiran Subramaniam  * array pointed to by dmc_base.
739d3b191aSVijayenthiran Subramaniam  */
749d3b191aSVijayenthiran Subramaniam typedef struct tzc_dmc620_driver_data {
759d3b191aSVijayenthiran Subramaniam 	const uintptr_t *dmc_base;
769d3b191aSVijayenthiran Subramaniam 	const unsigned int dmc_count;
779d3b191aSVijayenthiran Subramaniam } tzc_dmc620_driver_data_t;
789d3b191aSVijayenthiran Subramaniam 
799d3b191aSVijayenthiran Subramaniam /*
809d3b191aSVijayenthiran Subramaniam  * Contains region base, region top addresses and corresponding attributes
819d3b191aSVijayenthiran Subramaniam  * for configuring TZC access region registers.
829d3b191aSVijayenthiran Subramaniam  */
839d3b191aSVijayenthiran Subramaniam typedef struct tzc_dmc620_acc_addr_data {
849d3b191aSVijayenthiran Subramaniam 	const unsigned long long region_base;
859d3b191aSVijayenthiran Subramaniam 	const unsigned long long region_top;
869d3b191aSVijayenthiran Subramaniam 	const unsigned int sec_attr;
879d3b191aSVijayenthiran Subramaniam } tzc_dmc620_acc_addr_data_t;
889d3b191aSVijayenthiran Subramaniam 
899d3b191aSVijayenthiran Subramaniam /*
909d3b191aSVijayenthiran Subramaniam  * Contains platform specific data for configuring TZC region base and
919d3b191aSVijayenthiran Subramaniam  * region top address. 'acc_addr_count' specifies the number of
929d3b191aSVijayenthiran Subramaniam  * valid entries in 'plat_acc_addr_data' array.
939d3b191aSVijayenthiran Subramaniam  */
949d3b191aSVijayenthiran Subramaniam typedef struct tzc_dmc620_config_data {
959d3b191aSVijayenthiran Subramaniam 	const tzc_dmc620_driver_data_t *plat_drv_data;
969d3b191aSVijayenthiran Subramaniam 	const tzc_dmc620_acc_addr_data_t *plat_acc_addr_data;
979d3b191aSVijayenthiran Subramaniam 	const uint8_t acc_addr_count;
989d3b191aSVijayenthiran Subramaniam } tzc_dmc620_config_data_t;
999d3b191aSVijayenthiran Subramaniam 
1009d3b191aSVijayenthiran Subramaniam /* Function prototypes */
1019d3b191aSVijayenthiran Subramaniam void arm_tzc_dmc620_setup(const tzc_dmc620_config_data_t *plat_config_data);
1029d3b191aSVijayenthiran Subramaniam 
1039d3b191aSVijayenthiran Subramaniam #endif /* TZC_DMC620_H */
1049d3b191aSVijayenthiran Subramaniam 
105