diff options
Diffstat (limited to 'src/soc/mediatek/common')
-rw-r--r-- | src/soc/mediatek/common/devapc.c | 22 | ||||
-rw-r--r-- | src/soc/mediatek/common/include/soc/devapc_common.h | 10 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/soc/mediatek/common/devapc.c b/src/soc/mediatek/common/devapc.c index f491817f06..5859c9af85 100644 --- a/src/soc/mediatek/common/devapc.c +++ b/src/soc/mediatek/common/devapc.c @@ -28,3 +28,25 @@ void set_module_apc(uintptr_t base, uint32_t module, enum domain_id domain_id, 0x3 << (apc_set_index * 2), perm << (apc_set_index * 2)); } + +void dapc_init(void) +{ + size_t i; + uintptr_t devapc_ao_base; + + for (i = 0; i < devapc_init_cnt; i++) { + devapc_ao_base = devapc_init[i].base; + + /* Init dapc */ + write32(getreg(devapc_ao_base, AO_APC_CON), 0x0); + write32(getreg(devapc_ao_base, AO_APC_CON), 0x1); + + /* Initialization */ + if (devapc_init[i].init) + devapc_init[i].init(devapc_ao_base); + + /* Dump Setting */ + if (devapc_init[i].dump) + devapc_init[i].dump(devapc_ao_base); + } +} diff --git a/src/soc/mediatek/common/include/soc/devapc_common.h b/src/soc/mediatek/common/include/soc/devapc_common.h index e6ba2f80de..ab718d2500 100644 --- a/src/soc/mediatek/common/include/soc/devapc_common.h +++ b/src/soc/mediatek/common/include/soc/devapc_common.h @@ -80,10 +80,20 @@ enum domain_id { DOMAIN_15, }; +struct devapc_init_ops { + uintptr_t base; + void (*init)(uintptr_t base); + void (*dump)(uintptr_t base); +}; + +extern const struct devapc_init_ops devapc_init[]; +extern const size_t devapc_init_cnt; + void *getreg_domain(uintptr_t base, unsigned int offset, enum domain_id domain_id, unsigned int index); void *getreg(uintptr_t base, unsigned int offset); void set_module_apc(uintptr_t base, uint32_t module, enum domain_id domain_id, enum devapc_perm_type perm); +void dapc_init(void); #endif |