xref: /rk3399_ARM-atf/plat/mediatek/drivers/apusys/mt8196/apusys_devapc.c (revision f31932b43087af86c56f919307a3ba4f7e994138)
131a0b877SKarl Li /*
231a0b877SKarl Li  * Copyright (c) 2024, MediaTek Inc. All rights reserved.
331a0b877SKarl Li  *
431a0b877SKarl Li  * SPDX-License-Identifier: BSD-3-Clause
531a0b877SKarl Li  */
631a0b877SKarl Li 
731a0b877SKarl Li #include <common/debug.h>
831a0b877SKarl Li #include <lib/utils_def.h>
931a0b877SKarl Li #include <platform_def.h>
1031a0b877SKarl Li 
1131a0b877SKarl Li #include <apusys_devapc.h>
1231a0b877SKarl Li #include <apusys_devapc_def.h>
1331a0b877SKarl Li #include <mtk_mmap_pool.h>
1431a0b877SKarl Li 
1531a0b877SKarl Li /* AO CONTROL DEVAPC - apu_rcx_ao_infra_dapc_con */
1631a0b877SKarl Li static const struct apc_dom_16 APUSYS_CTRL_DAPC_AO[] = {
1731a0b877SKarl Li 	/* ctrl index = 0 */
1831a0b877SKarl Li 	SLAVE_RCX_BULK0("apu_ao_ctl_o-0"),
1931a0b877SKarl Li 	SLAVE_MD32_APB("apu_ao_ctl_o-1"),
2031a0b877SKarl Li 	SLAVE_ACP_TCU_SSC("apu_ao_ctl_o-2"),
2131a0b877SKarl Li 	SLAVE_PTP_THM("apu_ao_ctl_o-3"),
2231a0b877SKarl Li 	SLAVE_VCORE("apu_ao_ctl_o-4"),
2331a0b877SKarl Li 	SLAVE_IOMMU0_BANK0("apu_ao_ctl_o-5"),
2431a0b877SKarl Li 	SLAVE_IOMMU0_BANK1("apu_ao_ctl_o-6"),
2531a0b877SKarl Li 	SLAVE_IOMMU0_BANK2("apu_ao_ctl_o-7"),
2631a0b877SKarl Li 	SLAVE_IOMMU0_BANK3("apu_ao_ctl_o-8"),
2731a0b877SKarl Li 	SLAVE_IOMMU0_BANK4("apu_ao_ctl_o-9"),
2831a0b877SKarl Li 
2931a0b877SKarl Li 	/* ctrl index = 10 */
3031a0b877SKarl Li 	SLAVE_IOMMU1_BANK0("apu_ao_ctl_o-10"),
3131a0b877SKarl Li 	SLAVE_IOMMU1_BANK1("apu_ao_ctl_o-11"),
3231a0b877SKarl Li 	SLAVE_IOMMU1_BANK2("apu_ao_ctl_o-12"),
3331a0b877SKarl Li 	SLAVE_IOMMU1_BANK3("apu_ao_ctl_o-13"),
3431a0b877SKarl Li 	SLAVE_IOMMU1_BANK4("apu_ao_ctl_o-14"),
3531a0b877SKarl Li 	SLAVE_S0_SSC("apu_ao_ctl_o-15"),
3631a0b877SKarl Li 	SLAVE_N0_SSC("apu_ao_ctl_o-16"),
3731a0b877SKarl Li 	SLAVE_S1_SSC("apu_ao_ctl_o-17"),
3831a0b877SKarl Li 	SLAVE_N1_SSC("apu_ao_ctl_o-18"),
3931a0b877SKarl Li 	SLAVE_ACP_SSC("apu_ao_ctl_o-19"),
4031a0b877SKarl Li 
4131a0b877SKarl Li 	/* ctrl index = 20 */
4231a0b877SKarl Li 	SLAVE_WDEC("apu_ao_ctl_o-20"),
4331a0b877SKarl Li 	SLAVE_SMMU_IP_REG("apu_ao_ctl_o-21"),
4431a0b877SKarl Li 	SLAVE_SMMU_NSEC("apu_ao_ctl_o-22"),
4531a0b877SKarl Li 	SLAVE_SMMU_SEC("apu_ao_ctl_o-23"),
4631a0b877SKarl Li 	SLAVE_ARE0("apu_ao_ctl_o-24"),
4731a0b877SKarl Li 	SLAVE_ARE1("apu_ao_ctl_o-25"),
4831a0b877SKarl Li 	SLAVE_SONC("apu_ao_ctl_o-26"),
4931a0b877SKarl Li 	SLAVE_RPC("apu_ao_ctl_o-28"),
5031a0b877SKarl Li 	SLAVE_PCU("apu_ao_ctl_o-29"),
5131a0b877SKarl Li 	SLAVE_AO_CTRL("apu_ao_ctl_o-30"),
5231a0b877SKarl Li 
5331a0b877SKarl Li 	/* ctrl index = 30 */
5431a0b877SKarl Li 	SLAVE_AO_CTRL("apu_ao_ctl_o-31"),
5531a0b877SKarl Li 	SLAVE_ACC("apu_ao_ctl_o-32"),
5631a0b877SKarl Li 	SLAVE_SEC("apu_ao_ctl_o-33"),
5731a0b877SKarl Li 	SLAVE_PLL("apu_ao_ctl_o-34"),
5831a0b877SKarl Li 	SLAVE_RPC_MDLA("apu_ao_ctl_o-35"),
5931a0b877SKarl Li 	SLAVE_TOP_PMU("apu_ao_ctl_o-36"),
6031a0b877SKarl Li 	SLAVE_AO_BCRM("apu_ao_ctl_o-37"),
6131a0b877SKarl Li 	SLAVE_AO_DAPC_WRAP("apu_ao_ctl_o-38"),
6231a0b877SKarl Li 	SLAVE_AO_DAPC_CON("apu_ao_ctl_o-39"),
6331a0b877SKarl Li 	SLAVE_UNDEFINE0("apu_ao_ctl_o-40"),
6431a0b877SKarl Li 
6531a0b877SKarl Li 	/* ctrl index = 40 */
6631a0b877SKarl Li 	SLAVE_UNDEFINE1("apu_ao_ctl_o-41"),
6731a0b877SKarl Li 	SLAVE_RCX_BULK0("apu_ao_ctl_o-42"),
6831a0b877SKarl Li 	SLAVE_UNDEFINE2("apu_ao_ctl_o-43"),
6931a0b877SKarl Li 	SLAVE_UNDEFINE3("apu_ao_ctl_o-44"),
7031a0b877SKarl Li 	SLAVE_UNDEFINE4("apu_ao_ctl_o-45"),
7131a0b877SKarl Li 	SLAVE_UNDEFINE5("apu_ao_ctl_o-46"),
7231a0b877SKarl Li 	SLAVE_UNDEFINE6("apu_ao_ctl_o-47"),
7331a0b877SKarl Li 	SLAVE_UNDEFINE7("apu_ao_ctl_o-48"),
7431a0b877SKarl Li 	SLAVE_DATA_BULK("apu_ao_ctl_o-49"),
7531a0b877SKarl Li 	SLAVE_ACX0_BULK("apu_ao_ctl_o-50"),
7631a0b877SKarl Li 
7731a0b877SKarl Li 	/* ctrl index = 50 */
7831a0b877SKarl Li 	SLAVE_ACX0_AO("apu_ao_ctl_o-51"),
7931a0b877SKarl Li 	SLAVE_ACX1_BULK("apu_ao_ctl_o-52"),
8031a0b877SKarl Li 	SLAVE_ACX1_AO("apu_ao_ctl_o-53"),
8131a0b877SKarl Li 	SLAVE_NCX_BULK("apu_ao_ctl_o-54"),
8231a0b877SKarl Li 	SLAVE_NCX_AO("apu_ao_ctl_o-55"),
8331a0b877SKarl Li 	SLAVE_ACX0_BULK("apu_rcx2acx0_o-0"),
8431a0b877SKarl Li 	SLAVE_ACX0_AO("apu_rcx2acx0_o-1"),
8531a0b877SKarl Li 	SLAVE_ACX0_BULK("apu_sae2acx0_o-0"),
8631a0b877SKarl Li 	SLAVE_ACX0_AO("apu_sae2acx0_o-1"),
8731a0b877SKarl Li 	SLAVE_ACX1_BULK("apu_rcx2acx1_o-0"),
8831a0b877SKarl Li 
8931a0b877SKarl Li 	/* ctrl index = 60 */
9031a0b877SKarl Li 	SLAVE_ACX1_AO("apu_rcx2acx1_o-1"),
9131a0b877SKarl Li 	SLAVE_ACX1_BULK("apu_sae2acx1_o-0"),
9231a0b877SKarl Li 	SLAVE_ACX1_AO("apu_sae2acx1_o-1"),
9331a0b877SKarl Li 	SLAVE_NCX_BULK("apu_rcx2ncx_o-0"),
9431a0b877SKarl Li 	SLAVE_NCX_AO("apu_rcx2ncx_o-1"),
9531a0b877SKarl Li 	SLAVE_NCX_BULK("apu_sae2ncx_o-0"),
9631a0b877SKarl Li 	SLAVE_NCX_AO("apu_sae2ncx_o-1"),
9731a0b877SKarl Li };
9831a0b877SKarl Li 
99*f31932b4SKarl Li 
100*f31932b4SKarl Li /* RCX CONTROL DEVAPC - apu_rcx_infra_dapc_con */
101*f31932b4SKarl Li static const struct apc_dom_16 APUSYS_CTRL_DAPC_RCX[] = {
102*f31932b4SKarl Li 	/* ctrl index = 0 */
103*f31932b4SKarl Li 	SLAVE_ACX0_BULK("acx0_apbs-0"),
104*f31932b4SKarl Li 	SLAVE_ACX0_RPC("acx0_apbs-1"),
105*f31932b4SKarl Li 	SLAVE_ACX0_AO_CTRL("acx0_apbs-2"),
106*f31932b4SKarl Li 	SLAVE_UNDEFINE8("acx0_apbs-3"),
107*f31932b4SKarl Li 	SLAVE_ACX1_BULK("acx1_apbs-0"),
108*f31932b4SKarl Li 	SLAVE_ACX1_RPC("acx1_apbs-1"),
109*f31932b4SKarl Li 	SLAVE_ACX1_AO_CTRL("acx1_apbs-2"),
110*f31932b4SKarl Li 	SLAVE_UNDEFINE9("acx1_apbs-3"),
111*f31932b4SKarl Li 	SLAVE_NCX_BULK("ncx_apbs-0"),
112*f31932b4SKarl Li 	SLAVE_NCX_RPC("ncx_apbs-1"),
113*f31932b4SKarl Li 
114*f31932b4SKarl Li 	/* ctrl index = 10 */
115*f31932b4SKarl Li 	SLAVE_NCX_AO_CTRL("ncx_apbs-2"),
116*f31932b4SKarl Li 	SLAVE_UNDEFINE10("ncx_apbs-3"),
117*f31932b4SKarl Li 	SLAVE_MD32_SYSCTRL("md32_apb_s-0"),
118*f31932b4SKarl Li 	SLAVE_MD32_PMU("md32_apb_s-1"),
119*f31932b4SKarl Li 	SLAVE_MD32_WDT("md32_apb_s-2"),
120*f31932b4SKarl Li 	SLAVE_MD32_CACHE("md32_apb_s-3"),
121*f31932b4SKarl Li 	SLAVE_ARE0("apusys_ao-0"),
122*f31932b4SKarl Li 	SLAVE_ARE1("apusys_ao-1"),
123*f31932b4SKarl Li 	SLAVE_SONC("apusys_ao-2"),
124*f31932b4SKarl Li 	SLAVE_RPC("apusys_ao-3"),
125*f31932b4SKarl Li 
126*f31932b4SKarl Li 	/* ctrl index = 20 */
127*f31932b4SKarl Li 	SLAVE_PCU("apusys_ao-4"),
128*f31932b4SKarl Li 	SLAVE_AO_CTRL("apusys_ao-5"),
129*f31932b4SKarl Li 	SLAVE_AO_CTRL("apusys_ao-6"),
130*f31932b4SKarl Li 	SLAVE_SEC("apusys_ao-7"),
131*f31932b4SKarl Li 	SLAVE_PLL("apusys_ao-8"),
132*f31932b4SKarl Li 	SLAVE_RPC_MDLA("apusys_ao-9"),
133*f31932b4SKarl Li 	SLAVE_TOP_PMU("apusys_ao-10"),
134*f31932b4SKarl Li 	SLAVE_AO_BCRM("apusys_ao-11"),
135*f31932b4SKarl Li 	SLAVE_AO_DAPC_WRAP("apusys_ao-12"),
136*f31932b4SKarl Li 	SLAVE_AO_DAPC_CON("apusys_ao-13"),
137*f31932b4SKarl Li 
138*f31932b4SKarl Li 	/* ctrl index = 30 */
139*f31932b4SKarl Li 	SLAVE_VCORE("apusys_ao-14"),
140*f31932b4SKarl Li 	SLAVE_IOMMU0_BANK0("apusys_ao-15"),
141*f31932b4SKarl Li 	SLAVE_IOMMU0_BANK1("apusys_ao-16"),
142*f31932b4SKarl Li 	SLAVE_IOMMU0_BANK2("apusys_ao-17"),
143*f31932b4SKarl Li 	SLAVE_IOMMU0_BANK3("apusys_ao-18"),
144*f31932b4SKarl Li 	SLAVE_IOMMU0_BANK4("apusys_ao-19"),
145*f31932b4SKarl Li 	SLAVE_IOMMU1_BANK0("apu_ao_ctl_o-20"),
146*f31932b4SKarl Li 	SLAVE_IOMMU1_BANK1("apu_ao_ctl_o-21"),
147*f31932b4SKarl Li 	SLAVE_IOMMU1_BANK2("apu_ao_ctl_o-22"),
148*f31932b4SKarl Li 	SLAVE_IOMMU1_BANK3("apu_ao_ctl_o-23"),
149*f31932b4SKarl Li 
150*f31932b4SKarl Li 	/* ctrl index = 40 */
151*f31932b4SKarl Li 	SLAVE_IOMMU1_BANK4("apu_ao_ctl_o-24"),
152*f31932b4SKarl Li 	SLAVE_S0_SSC("apu_ao_ctl_o-25"),
153*f31932b4SKarl Li 	SLAVE_N0_SSC("apu_ao_ctl_o-26"),
154*f31932b4SKarl Li 	SLAVE_S1_SSC("apu_ao_ctl_o-27"),
155*f31932b4SKarl Li 	SLAVE_N1_SSC("apu_ao_ctl_o-28"),
156*f31932b4SKarl Li 	SLAVE_ACP_SSC("apu_ao_ctl_o-29"),
157*f31932b4SKarl Li 	SLAVE_ACP_TCU_SSC("apu_ao_ctl_o-30"),
158*f31932b4SKarl Li 	SLAVE_PTP_THM("apu_ao_ctl_o-31"),
159*f31932b4SKarl Li 	SLAVE_WDEC("apu_ao_ctl_o-32"),
160*f31932b4SKarl Li 	SLAVE_SMMU_IP_REG("apu_ao_ctl_o-33"),
161*f31932b4SKarl Li 
162*f31932b4SKarl Li 	/* ctrl index = 50 */
163*f31932b4SKarl Li 	SLAVE_SMMU_NSEC("apu_ao_ctl_o-34"),
164*f31932b4SKarl Li 	SLAVE_SMMU_SEC("apu_ao_ctl_o-35"),
165*f31932b4SKarl Li 	SLAVE_DATA_BULK("noc_axi"),
166*f31932b4SKarl Li 	SLAVE_MD32_DBG("md32_dbg"),
167*f31932b4SKarl Li 	SLAVE_MDLA_DBG("mdla_dbg"),
168*f31932b4SKarl Li 	SLAVE_INFRA_DBG("apb_infra_dbg"),
169*f31932b4SKarl Li 	SLAVE_LOG_TOP0("apu_logtop-0"),
170*f31932b4SKarl Li 	SLAVE_LOG_TOP1("apu_logtop-1"),
171*f31932b4SKarl Li 	SLAVE_RCX_CFG("apu_rcx_cfg"),
172*f31932b4SKarl Li 	SLAVE_ACX_IPS("apu_acx_ips"),
173*f31932b4SKarl Li 
174*f31932b4SKarl Li 	/* ctrl index = 60 */
175*f31932b4SKarl Li 	SLAVE_SEMA_STIMER("apu_sema_stimer"),
176*f31932b4SKarl Li 	SLAVE_EMI_CFG("apu_emi_cfg"),
177*f31932b4SKarl Li 	SLAVE_CPE_SENSOR("apu_cpe_sensor"),
178*f31932b4SKarl Li 	SLAVE_CPE_COEF("apu_cpe_coef"),
179*f31932b4SKarl Li 	SLAVE_CPE_CTRL("apu_cpe_ctrl"),
180*f31932b4SKarl Li 	SLAVE_TPPA("apu_dfd"),
181*f31932b4SKarl Li 	SLAVE_SENSOR_ACX0_DLA0("apu_sen_acx0_dla0"),
182*f31932b4SKarl Li 	SLAVE_SENSOR_ACX0_VPU("apu_sen_acx0_vpu"),
183*f31932b4SKarl Li 	SLAVE_SENSOR_ACX1_DLA0("apu_sen_acx1_dla0"),
184*f31932b4SKarl Li 	SLAVE_SENSOR_ACX1_VPU("apu_sen_acx1_vpu"),
185*f31932b4SKarl Li 
186*f31932b4SKarl Li 	/* ctrl index = 70 */
187*f31932b4SKarl Li 	SLAVE_SENSOR_NCX_DLA0("apu_sen_ncx_dla0"),
188*f31932b4SKarl Li 	SLAVE_SENSOR_NCX_NVE("apu_sen_ncx_nve"),
189*f31932b4SKarl Li 	SLAVE_RCX_TCU0("noc_cfg-0"),
190*f31932b4SKarl Li 	SLAVE_RCX_TCU1("noc_cfg-1"),
191*f31932b4SKarl Li 	SLAVE_RCX_TCU2("noc_cfg-2"),
192*f31932b4SKarl Li 	SLAVE_RCX_TCU3("noc_cfg-3"),
193*f31932b4SKarl Li 	SLAVE_RCX_TCU4("noc_cfg-4"),
194*f31932b4SKarl Li 	SLAVE_RCX_TCU5("noc_cfg-5"),
195*f31932b4SKarl Li 	SLAVE_RCX_TCU6("noc_cfg-6"),
196*f31932b4SKarl Li 	SLAVE_RCX_NOC_CFG("noc_cfg-7"),
197*f31932b4SKarl Li 
198*f31932b4SKarl Li 	/* ctrl index = 80 */
199*f31932b4SKarl Li 	SLAVE_SCMDQ("apu_hse-0"),
200*f31932b4SKarl Li 	SLAVE_HSE("apu_hse-1"),
201*f31932b4SKarl Li 	SLAVE_MDLA_CORE_CTRL("mdla_cfg-0"),
202*f31932b4SKarl Li 	SLAVE_MDLA_BIU("mdla_cfg-1"),
203*f31932b4SKarl Li 	SLAVE_MDLA_PMU("mdla_cfg-2"),
204*f31932b4SKarl Li 	SLAVE_MDLA_CMDE("mdla_cfg-3"),
205*f31932b4SKarl Li 	SLAVE_EDPA0("apu_edpa-0"),
206*f31932b4SKarl Li 	SLAVE_EDPA1("apu_edpa-1"),
207*f31932b4SKarl Li 	SLAVE_RCX_BCRM("infra_bcrm"),
208*f31932b4SKarl Li 	SLAVE_RCX_DAPC_WRAP("infra_dpac_wrap"),
209*f31932b4SKarl Li 
210*f31932b4SKarl Li 	/* ctrl index = 90 */
211*f31932b4SKarl Li 	SLAVE_RCX_DAPC_CON("infra_dapc_con"),
212*f31932b4SKarl Li 	SLAVE_RCX_CMU("rcx_cmu"),
213*f31932b4SKarl Li 	SLAVE_RCX_ACS("apu_rcx_acs"),
214*f31932b4SKarl Li 	SLAVE_RCX_CBFC("rcx_cbfc"),
215*f31932b4SKarl Li 	SLAVE_ACC("acc"),
216*f31932b4SKarl Li };
217*f31932b4SKarl Li 
21831a0b877SKarl Li static enum apusys_apc_err_status set_slave_ctrl_apc(uint32_t slave,
21931a0b877SKarl Li 						     enum apusys_apc_type type,
22031a0b877SKarl Li 						     enum apusys_apc_domain_id domain_id,
22131a0b877SKarl Li 						     enum apusys_apc_perm_type perm)
22231a0b877SKarl Li {
22331a0b877SKarl Li 	uint32_t apc_register_index;
22431a0b877SKarl Li 	uint32_t apc_set_index;
22531a0b877SKarl Li 	uint32_t base = 0;
22631a0b877SKarl Li 	uint32_t clr_bit;
22731a0b877SKarl Li 	uint32_t set_bit;
22831a0b877SKarl Li 	uint32_t slave_num_in_1_dom;
22931a0b877SKarl Li 	uint32_t slave_num, dom_num;
23031a0b877SKarl Li 	uint32_t dapc_base;
23131a0b877SKarl Li 
23231a0b877SKarl Li 	if (perm >= PERM_NUM) {
23331a0b877SKarl Li 		ERROR("%s: permission type:0x%x is not supported!\n", __func__, perm);
23431a0b877SKarl Li 		return APUSYS_APC_ERR_PERMISSION_NOT_SUPPORTED;
23531a0b877SKarl Li 	}
23631a0b877SKarl Li 
23731a0b877SKarl Li 	switch (type) {
23831a0b877SKarl Li 	case DAPC_AO:
23931a0b877SKarl Li 		slave_num_in_1_dom = APUSYS_CTRL_DAPC_AO_SLAVE_NUM_IN_1_DOM;
24031a0b877SKarl Li 		slave_num = APUSYS_CTRL_DAPC_AO_SLAVE_NUM;
24131a0b877SKarl Li 		dom_num = APUSYS_CTRL_DAPC_AO_DOM_NUM;
24231a0b877SKarl Li 		dapc_base = APUSYS_CTRL_DAPC_AO_BASE;
24331a0b877SKarl Li 		break;
244*f31932b4SKarl Li 	case DAPC_RCX:
245*f31932b4SKarl Li 		slave_num_in_1_dom = APUSYS_CTRL_DAPC_RCX_SLAVE_NUM_IN_1_DOM;
246*f31932b4SKarl Li 		slave_num = APUSYS_CTRL_DAPC_RCX_SLAVE_NUM;
247*f31932b4SKarl Li 		dom_num = APUSYS_CTRL_DAPC_RCX_DOM_NUM;
248*f31932b4SKarl Li 		dapc_base = APUSYS_CTRL_DAPC_RCX_BASE;
249*f31932b4SKarl Li 		break;
25031a0b877SKarl Li 	default:
25131a0b877SKarl Li 		ERROR("%s: unsupported devapc type: %u\n", __func__, type);
25231a0b877SKarl Li 		return APUSYS_APC_ERR_GENERIC;
25331a0b877SKarl Li 	}
25431a0b877SKarl Li 
25531a0b877SKarl Li 	apc_register_index = slave / slave_num_in_1_dom;
25631a0b877SKarl Li 	apc_set_index = slave % slave_num_in_1_dom;
25731a0b877SKarl Li 
25831a0b877SKarl Li 	clr_bit = DEVAPC_MASK << (apc_set_index * DEVAPC_DOM_SHIFT);
25931a0b877SKarl Li 	set_bit = (uint32_t)perm << (apc_set_index * DEVAPC_DOM_SHIFT);
26031a0b877SKarl Li 
26131a0b877SKarl Li 	if (slave < slave_num && domain_id < dom_num) {
26231a0b877SKarl Li 		base = dapc_base + domain_id * DEVAPC_DOM_SIZE
26331a0b877SKarl Li 		       + apc_register_index * DEVAPC_REG_SIZE;
26431a0b877SKarl Li 	} else {
26531a0b877SKarl Li 		ERROR("%s: out of boundary, devapc type: %d, slave: 0x%x, domain_id: 0x%x\n",
26631a0b877SKarl Li 			__func__, type, slave, domain_id);
26731a0b877SKarl Li 		return APUSYS_APC_ERR_OUT_OF_BOUNDARY;
26831a0b877SKarl Li 	}
26931a0b877SKarl Li 
27031a0b877SKarl Li 	if (!base)
27131a0b877SKarl Li 		return APUSYS_APC_ERR_GENERIC;
27231a0b877SKarl Li 
27331a0b877SKarl Li 	mmio_clrsetbits_32(base, clr_bit, set_bit);
27431a0b877SKarl Li 	return APUSYS_APC_OK;
27531a0b877SKarl Li }
27631a0b877SKarl Li 
27731a0b877SKarl Li static enum apusys_apc_err_status set_slave_ao_ctrl_apc(uint32_t slave,
27831a0b877SKarl Li 							enum apusys_apc_domain_id domain_id,
27931a0b877SKarl Li 							enum apusys_apc_perm_type perm)
28031a0b877SKarl Li {
28131a0b877SKarl Li 	return set_slave_ctrl_apc(slave, DAPC_AO, domain_id, perm);
28231a0b877SKarl Li }
28331a0b877SKarl Li 
284*f31932b4SKarl Li static enum apusys_apc_err_status set_slave_rcx_ctrl_apc(uint32_t slave,
285*f31932b4SKarl Li 							 enum apusys_apc_domain_id domain_id,
286*f31932b4SKarl Li 							 enum apusys_apc_perm_type perm)
287*f31932b4SKarl Li {
288*f31932b4SKarl Li 	return set_slave_ctrl_apc(slave, DAPC_RCX, domain_id, perm);
289*f31932b4SKarl Li }
290*f31932b4SKarl Li 
29131a0b877SKarl Li static void apusys_devapc_init(uint32_t base)
29231a0b877SKarl Li {
29331a0b877SKarl Li 	mmio_write_32(APUSYS_DAPC_CON(base), APUSYS_DAPC_CON_VIO_MASK);
29431a0b877SKarl Li }
29531a0b877SKarl Li 
29631a0b877SKarl Li int apusys_devapc_ao_init(void)
29731a0b877SKarl Li {
29831a0b877SKarl Li 	int32_t ret = APUSYS_APC_OK;
29931a0b877SKarl Li 
30031a0b877SKarl Li 	apusys_devapc_init(APUSYS_CTRL_DAPC_AO_BASE);
30131a0b877SKarl Li 
30231a0b877SKarl Li 	ret = SET_APUSYS_DAPC_V1(APUSYS_CTRL_DAPC_AO, set_slave_ao_ctrl_apc);
30331a0b877SKarl Li 
30431a0b877SKarl Li 	if (ret) {
30531a0b877SKarl Li 		ERROR("[APUAPC_AO] %s: set_apusys_ao_ctrl_dapc failed\n", __func__);
30631a0b877SKarl Li 		return ret;
30731a0b877SKarl Li 	}
30831a0b877SKarl Li 
30931a0b877SKarl Li #ifdef DUMP_CFG
31031a0b877SKarl Li 	DUMP_APUSYS_DAPC_V1(APUSYS_CTRL_DAPC_AO);
31131a0b877SKarl Li #endif
31231a0b877SKarl Li 
31331a0b877SKarl Li 	INFO("[APUAPC_AO] %s done\n", __func__);
31431a0b877SKarl Li 
31531a0b877SKarl Li 	return ret;
31631a0b877SKarl Li }
317*f31932b4SKarl Li 
318*f31932b4SKarl Li int apusys_devapc_rcx_init(void)
319*f31932b4SKarl Li {
320*f31932b4SKarl Li 	int32_t ret = APUSYS_APC_OK;
321*f31932b4SKarl Li 
322*f31932b4SKarl Li 	apusys_devapc_init(APUSYS_CTRL_DAPC_RCX_BASE);
323*f31932b4SKarl Li 
324*f31932b4SKarl Li 	ret = SET_APUSYS_DAPC_V1(APUSYS_CTRL_DAPC_RCX, set_slave_rcx_ctrl_apc);
325*f31932b4SKarl Li 	if (ret) {
326*f31932b4SKarl Li 		ERROR("[APUAPC_RCX] %s: set_slave_rcx_ctrl_apc failed\n", __func__);
327*f31932b4SKarl Li 		return ret;
328*f31932b4SKarl Li 	}
329*f31932b4SKarl Li 
330*f31932b4SKarl Li #ifdef DUMP_CFG
331*f31932b4SKarl Li 	DUMP_APUSYS_DAPC_V1(APUSYS_CTRL_DAPC_RCX);
332*f31932b4SKarl Li #endif
333*f31932b4SKarl Li 
334*f31932b4SKarl Li 	INFO("[APUAPC_RCX] %s done\n", __func__);
335*f31932b4SKarl Li 
336*f31932b4SKarl Li 	return ret;
337*f31932b4SKarl Li }
338