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