int start_devapc() { int module_index = 0; /*Enable Devapc*/ writel(0x80000000, DEVAPC_VIO_DBG0); // clear apc0 dbg info if any writel(readl(DEVAPC_APC_CON) & (0xFFFFFFFF ^ (1<<2)), DEVAPC_APC_CON); writel(readl(DEVAPC_PD_APC_CON) & (0xFFFFFFFF ^ (1<<2)), DEVAPC_PD_APC_CON); /*Initial Permission*/ for (module_index = 0; module_index<(sizeof(D_APC0_Devices)/sizeof(DEVICE_INFO)); module_index++) { set_module_apc(module_index, E_DOMAIN_0 , D_APC0_Devices[module_index].d0_permission); set_module_apc(module_index, E_DOMAIN_1 , D_APC0_Devices[module_index].d1_permission); } /*Lock DAPC to secure access only*/ writel(readl(DEVAPC_APC_CON) | (0x1), DEVAPC_APC_CON); /*Set Level 2 secure*/ writel(readl(INFRA_PDN_SEC_CON ) | (SEJ_CG_PROTECT_BIT), INFRA_PDN_SEC_CON ); writel(readl(INFRA_PDN_SEC_CON ) | (TRNG_CG_PROTECT_BIT), INFRA_PDN_SEC_CON ); printf("[DAPC] Init Done\n"); return 0; }
/* * start_devapc: start device apc for MD */ static int start_devapc(void) { int i = 0; init_devpac(); for (i = 0; i < (sizeof(devapc_devices) / sizeof(devapc_devices[0])); i++) { if (TRUE == devapc_devices[i].forbidden) { clear_vio_status(i); unmask_module_irq(i); set_module_apc(i, E_DOMAIN_1, E_L3); } } return 0; }