1 /* 2 * Copyright (c) 2023-2024, MediaTek Inc. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef APUSYS_RV_H 8 #define APUSYS_RV_H 9 10 #include <platform_def.h> 11 12 #define APU_SEC_FW_IOVA (0x200000UL) 13 14 /* APU_SCTRL_REVISER */ 15 #define UP_NORMAL_DOMAIN_NS (APU_REVISER + 0x0000) 16 #define UP_PRI_DOMAIN_NS (APU_REVISER + 0x0004) 17 #define UP_IOMMU_CTRL (APU_REVISER + 0x0008) 18 #define UP_CORE0_VABASE0 (APU_REVISER + 0x000c) 19 #define UP_CORE0_MVABASE0 (APU_REVISER + 0x0010) 20 #define UP_CORE0_VABASE1 (APU_REVISER + 0x0014) 21 #define UP_CORE0_MVABASE1 (APU_REVISER + 0x0018) 22 #define UP_CORE0_VABASE2 (APU_REVISER + 0x001c) 23 #define UP_CORE0_MVABASE2 (APU_REVISER + 0x0020) 24 #define UP_CORE0_VABASE3 (APU_REVISER + 0x0024) 25 #define UP_CORE0_MVABASE3 (APU_REVISER + 0x0028) 26 #define USERFW_CTXT (APU_REVISER + 0x1000) 27 #define SECUREFW_CTXT (APU_REVISER + 0x1004) 28 #define UP_NORMAL_DOMAIN (7) 29 #define UP_NORMAL_NS (1) 30 #define UP_PRI_DOMAIN (5) 31 #define UP_PRI_NS (1) 32 #define UP_DOMAIN_SHIFT (0) 33 #define UP_NS_SHIFT (4) 34 #define MMU_EN BIT(0) 35 #define MMU_CTRL BIT(1) 36 #define MMU_CTRL_LOCK BIT(2) 37 #define VLD BIT(0) 38 #define PARTIAL_ENABLE BIT(1) 39 #define THREAD_NUM_PRI (1) 40 #define THREAD_NUM_NORMAL (0) 41 #define THREAD_NUM_SHIFT (2) 42 #define VASIZE_1MB BIT(0) 43 #define CFG_4GB_SEL_EN BIT(2) 44 #define CFG_4GB_SEL (0) 45 #define MVA_34BIT_SHIFT (2) 46 47 /* APU_MD32_SYSCTRL */ 48 #define MD32_SYS_CTRL (APU_MD32_SYSCTRL + 0x0000) 49 #define UP_INT_EN2 (APU_MD32_SYSCTRL + 0x000c) 50 #define MD32_CLK_CTRL (APU_MD32_SYSCTRL + 0x00b8) 51 #define UP_WAKE_HOST_MASK0 (APU_MD32_SYSCTRL + 0x00bc) 52 #define UP_WAKE_HOST_MASK1 (APU_MD32_SYSCTRL + 0x00c0) 53 #define MD32_SYS_CTRL_RST (0) 54 #define MD32_G2B_CG_EN BIT(11) 55 #define MD32_DBG_EN BIT(10) 56 #define MD32_DM_AWUSER_IOMMU_EN BIT(9) 57 #define MD32_DM_ARUSER_IOMMU_EN BIT(7) 58 #define MD32_PM_AWUSER_IOMMU_EN BIT(5) 59 #define MD32_PM_ARUSER_IOMMU_EN BIT(3) 60 #define MD32_SOFT_RSTN BIT(0) 61 #define MD32_CLK_EN (1) 62 #define MD32_CLK_DIS (0) 63 #define WDT_IRQ_EN BIT(0) 64 #define MBOX0_IRQ_EN BIT(21) 65 #define MBOX1_IRQ_EN BIT(22) 66 #define MBOX2_IRQ_EN BIT(23) 67 #define RESET_DEALY_US (10) 68 #define DBG_APB_EN BIT(31) 69 70 /* APU_AO_CTRL */ 71 #define MD32_PRE_DEFINE (APU_AO_CTRL + 0x0000) 72 #define MD32_BOOT_CTRL (APU_AO_CTRL + 0x0004) 73 #define MD32_RUNSTALL (APU_AO_CTRL + 0x0008) 74 #define PREDEFINE_NON_CACHE (0) 75 #define PREDEFINE_TCM (1) 76 #define PREDEFINE_CACHE (2) 77 #define PREDEFINE_CACHE_TCM (3) 78 #define PREDEF_1G_OFS (0) 79 #define PREDEF_2G_OFS (2) 80 #define PREDEF_3G_OFS (4) 81 #define PREDEF_4G_OFS (6) 82 #define MD32_RUN (0) 83 #define MD32_STALL (1) 84 85 /* APU_MD32_WDT */ 86 #define WDT_INT (APU_MD32_WDT + 0x0) 87 #define WDT_CTRL0 (APU_MD32_WDT + 0x4) 88 #define WDT_INT_W1C (1) 89 #define WDT_EN BIT(31) 90 91 enum APU_PWR_OP { 92 APU_PWR_OFF = 0, 93 APU_PWR_ON = 1, 94 }; 95 96 /* APU_LOGTOP */ 97 #define APU_LOGTOP_CON (APU_LOGTOP + 0x0) 98 #define APU_LOG_BUF_T_SIZE (APU_LOGTOP + 0x78) 99 #define APU_LOG_BUF_W_PTR (APU_LOGTOP + 0x80) 100 #define APU_LOG_BUF_R_PTR (APU_LOGTOP + 0x84) 101 #define HW_SEMA2 (APU_ARE_REG_BASE + 0x0E08) 102 #define HW_SEMA_USER (0x2) 103 #define HW_SEMA_LOGGER_USER (0x3) 104 #define MAX_SMC_OP_NUM (0x3) 105 #define LOGTOP_OP_MASK (0xFF) 106 #define LOGTOP_OP_SHIFT (8) 107 enum { 108 SMC_OP_APU_LOG_BUF_NULL = 0, 109 SMC_OP_APU_LOG_BUF_T_SIZE, 110 SMC_OP_APU_LOG_BUF_W_PTR, 111 SMC_OP_APU_LOG_BUF_R_PTR, 112 SMC_OP_APU_LOG_BUF_CON, 113 SMC_OP_APU_LOG_BUF_NUM 114 }; 115 116 struct smccc_res; 117 118 void apusys_rv_mbox_mpu_init(void); 119 int apusys_infra_dcm_setup(void); 120 int apusys_kernel_apusys_rv_setup_reviser(void); 121 int apusys_kernel_apusys_rv_reset_mp(void); 122 int apusys_kernel_apusys_rv_setup_boot(void); 123 int apusys_kernel_apusys_rv_start_mp(void); 124 int apusys_kernel_apusys_rv_stop_mp(void); 125 int apusys_kernel_apusys_rv_setup_sec_mem(void); 126 int apusys_kernel_apusys_rv_disable_wdt_isr(void); 127 int apusys_kernel_apusys_rv_clear_wdt_isr(void); 128 int apusys_kernel_apusys_rv_cg_gating(void); 129 int apusys_kernel_apusys_rv_cg_ungating(void); 130 int apusys_kernel_apusys_rv_setup_apummu(void); 131 int apusys_kernel_apusys_rv_pwr_ctrl(enum APU_PWR_OP op); 132 int apusys_kernel_apusys_logtop_reg_dump(uint32_t op, struct smccc_res *smccc_ret); 133 int apusys_kernel_apusys_logtop_reg_write(uint32_t op, uint32_t write_val, 134 struct smccc_res *smccc_ret); 135 int apusys_kernel_apusys_logtop_reg_w1c(uint32_t op, struct smccc_res *smccc_ret); 136 int apusys_rv_cold_boot_clr_mbox_dummy(void); 137 int apusys_rv_setup_ce_bin(void); 138 139 #endif /* APUSYS_RV_H */ 140