summaryrefslogtreecommitdiff
path: root/src/soc/mediatek/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/mediatek/common')
-rw-r--r--src/soc/mediatek/common/devapc.c22
-rw-r--r--src/soc/mediatek/common/include/soc/devapc_common.h10
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