123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /*
- * Copyright (c) 2023, MediaTek Inc. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #ifndef APUSYS_DAPC_V1_H
- #define APUSYS_DAPC_V1_H
- #include <lib/mmio.h>
- /******************************************************************************
- * STRUCTURE DEFINITION
- ******************************************************************************/
- enum apusys_apc_err_status {
- APUSYS_APC_OK = 0x0,
- APUSYS_APC_ERR_GENERIC = 0x1,
- };
- enum apusys_apc_perm_type {
- NO_PROTECTION = 0,
- SEC_RW_ONLY = 1,
- SEC_RW_NS_R = 2,
- FORBIDDEN = 3,
- PERM_NUM = 4,
- };
- enum apusys_apc_domain_id {
- DOMAIN_0 = 0,
- DOMAIN_1 = 1,
- DOMAIN_2 = 2,
- DOMAIN_3 = 3,
- DOMAIN_4 = 4,
- DOMAIN_5 = 5,
- DOMAIN_6 = 6,
- DOMAIN_7 = 7,
- DOMAIN_8 = 8,
- DOMAIN_9 = 9,
- DOMAIN_10 = 10,
- DOMAIN_11 = 11,
- DOMAIN_12 = 12,
- DOMAIN_13 = 13,
- DOMAIN_14 = 14,
- DOMAIN_15 = 15,
- };
- struct apc_dom_16 {
- unsigned char d0_permission;
- unsigned char d1_permission;
- unsigned char d2_permission;
- unsigned char d3_permission;
- unsigned char d4_permission;
- unsigned char d5_permission;
- unsigned char d6_permission;
- unsigned char d7_permission;
- unsigned char d8_permission;
- unsigned char d9_permission;
- unsigned char d10_permission;
- unsigned char d11_permission;
- unsigned char d12_permission;
- unsigned char d13_permission;
- unsigned char d14_permission;
- unsigned char d15_permission;
- };
- #define APUSYS_APC_AO_ATTR(DEV_NAME, \
- PERM_ATTR0, PERM_ATTR1, PERM_ATTR2, PERM_ATTR3, \
- PERM_ATTR4, PERM_ATTR5, PERM_ATTR6, PERM_ATTR7, \
- PERM_ATTR8, PERM_ATTR9, PERM_ATTR10, PERM_ATTR11, \
- PERM_ATTR12, PERM_ATTR13, PERM_ATTR14, PERM_ATTR15) \
- {(unsigned char)PERM_ATTR0, (unsigned char)PERM_ATTR1, \
- (unsigned char)PERM_ATTR2, (unsigned char)PERM_ATTR3, \
- (unsigned char)PERM_ATTR4, (unsigned char)PERM_ATTR5, \
- (unsigned char)PERM_ATTR6, (unsigned char)PERM_ATTR7, \
- (unsigned char)PERM_ATTR8, (unsigned char)PERM_ATTR9, \
- (unsigned char)PERM_ATTR10, (unsigned char)PERM_ATTR11, \
- (unsigned char)PERM_ATTR12, (unsigned char)PERM_ATTR13, \
- (unsigned char)PERM_ATTR14, (unsigned char)PERM_ATTR15}
- typedef enum apusys_apc_err_status (*dapc_cfg_func)(uint32_t slave,
- enum apusys_apc_domain_id domain_id,
- enum apusys_apc_perm_type perm);
- /* Register */
- #define DEVAPC_DOM_SIZE (0x40)
- #define DEVAPC_REG_SIZE (4)
- /* APUSYS APC offsets */
- #define APUSYS_DAPC_CON_VIO_MASK (0x80000000)
- #define APUSYS_DAPC_CON(base) ((base) + 0x00f00)
- /******************************************************************************
- * DAPC Common Function
- ******************************************************************************/
- #define SET_APUSYS_DAPC_V1(dapc, cfg) \
- set_apusys_dapc_v1(dapc, ARRAY_SIZE(dapc), cfg)
- #define DUMP_APUSYS_DAPC_V1(apc) \
- dump_apusys_dapc_v1(#apc, apc##_BASE, \
- (apc##_SLAVE_NUM / apc##_SLAVE_NUM_IN_1_DOM), apc##_DOM_NUM)
- enum apusys_apc_err_status set_apusys_dapc_v1(const struct apc_dom_16 *dapc,
- uint32_t size, dapc_cfg_func cfg);
- void dump_apusys_dapc_v1(const char *name, uintptr_t base, uint32_t reg_num, uint32_t dom_num);
- /******************************************************************************
- * DAPC Permission Policy
- ******************************************************************************/
- #define SLAVE_FORBID_EXCEPT_D0_SEC_RW(domain) \
- APUSYS_APC_AO_ATTR(domain, \
- SEC_RW_ONLY, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
- #define SLAVE_FORBID_EXCEPT_D0_SEC_RW_D5_NO_PROTECT(domain) \
- APUSYS_APC_AO_ATTR(domain, \
- SEC_RW_ONLY, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
- #define SLAVE_FORBID_EXCEPT_D5_NO_PROTECT(domain) \
- APUSYS_APC_AO_ATTR(domain, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
- #define SLAVE_FORBID_EXCEPT_D0_SEC_RW_NS_R_D5_NO_PROTECT(domain) \
- APUSYS_APC_AO_ATTR(domain, \
- SEC_RW_NS_R, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
- #define SLAVE_FORBID_EXCEPT_D7_NO_PROTECT(domain) \
- APUSYS_APC_AO_ATTR(domain, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, NO_PROTECTION, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
- #define SLAVE_FORBID_EXCEPT_D5_D7_NO_PROTECT(domain) \
- APUSYS_APC_AO_ATTR(domain, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, NO_PROTECTION, FORBIDDEN, NO_PROTECTION, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
- #define SLAVE_FORBID_EXCEPT_D0_D5_NO_PROTECT(domain) \
- APUSYS_APC_AO_ATTR(domain, \
- NO_PROTECTION, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, NO_PROTECTION, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN, \
- FORBIDDEN, FORBIDDEN, FORBIDDEN, FORBIDDEN)
- #endif /* APUSYS_DAPC_V1_H */
|