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