soc/mediatek: Move dapc_init to common

dapc_init flow is the same on MT8186, MT8188 and MT8195. So move this
function to common/devapc.c

TEST=emerge-corsola coreboot; emerge-cherry coreboot;
     emerge-geralt coreboot
TEST=devapc log is shown as expected and the system boots to kernel

Change-Id: I979c3a3721a82d40c9e2db7fbe62e14a9bbd53d8
Signed-off-by: Yidi Lin <yidilin@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/71137
Reviewed-by: Rex-BC Chen <rex-bc.chen@mediatek.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Yu-Ping Wu <yupingso@google.com>
diff --git a/src/soc/mediatek/common/devapc.c b/src/soc/mediatek/common/devapc.c
index f491817..5859c9a 100644
--- a/src/soc/mediatek/common/devapc.c
+++ b/src/soc/mediatek/common/devapc.c
@@ -28,3 +28,25 @@
 		     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 e6ba2f8..ab718d2 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 @@
 	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
diff --git a/src/soc/mediatek/mt8186/devapc.c b/src/soc/mediatek/mt8186/devapc.c
index 80af49a..d831dcd 100644
--- a/src/soc/mediatek/mt8186/devapc.c
+++ b/src/soc/mediatek/mt8186/devapc.c
@@ -4,7 +4,6 @@
 
 #include <console/console.h>
 #include <soc/devapc.h>
-#include <soc/devapc_common.h>
 
 static const struct apc_infra_peri_dom_8 infra_ao_sys0_devices[] = {
 	/* 0 */
@@ -1421,34 +1420,10 @@
 	write32(getreg(base, AUD_SEC_0), 0);
 }
 
-struct devapc_init_ops {
-	uintptr_t base;
-	void (*init)(uintptr_t base);
-	void (*dump)(uintptr_t base);
-} devapc_init[] = {
+const struct devapc_init_ops devapc_init[] = {
 	{ DEVAPC_AO_INFRA_PERI_BASE, infra_init, dump_infra_ao_apc },
 	{ DEVAPC_AO_MM_BASE, mm_init, dump_mm_ao_apc },
 	{ DEVAPC_AO_AUD_BASE, adsp_init, dump_adsp_ao_apc },
 };
 
-void dapc_init(void)
-{
-	unsigned int i;
-	uintptr_t devapc_ao_base;
-
-	for (i = 0; i < ARRAY_SIZE(devapc_init); 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);
-	}
-}
+const size_t devapc_init_cnt = ARRAY_SIZE(devapc_init);
diff --git a/src/soc/mediatek/mt8186/include/soc/devapc.h b/src/soc/mediatek/mt8186/include/soc/devapc.h
index d7bd8bf..eab8cb2 100644
--- a/src/soc/mediatek/mt8186/include/soc/devapc.h
+++ b/src/soc/mediatek/mt8186/include/soc/devapc.h
@@ -7,8 +7,7 @@
 
 #include <device/mmio.h>
 #include <soc/addressmap.h>
-
-void dapc_init(void);
+#include <soc/devapc_common.h>
 
 enum devapc_ao_offset {
 	SYS0_D0_APC_0 = 0x0,
diff --git a/src/soc/mediatek/mt8188/devapc.c b/src/soc/mediatek/mt8188/devapc.c
index afb39d5..5890a8e 100644
--- a/src/soc/mediatek/mt8188/devapc.c
+++ b/src/soc/mediatek/mt8188/devapc.c
@@ -2,7 +2,6 @@
 
 #include <console/console.h>
 #include <soc/devapc.h>
-#include <soc/devapc_common.h>
 
 static const struct apc_infra_peri_dom_16 infra_ao_sys0_devices[] = {
 	/* 0 */
@@ -1575,35 +1574,11 @@
 	set_peri_par_ao_apc(base);
 }
 
-struct devapc_init_ops {
-	uintptr_t base;
-	void (*init)(uintptr_t base);
-	void (*dump)(uintptr_t base);
-} devapc_init[] = {
+const struct devapc_init_ops devapc_init[] = {
 	{ DEVAPC_INFRA_AO_BASE, infra_init, dump_infra_ao_apc },
 	{ DEVAPC_PERI_AO_BASE, peri_init, dump_peri_ao_apc },
 	{ DEVAPC_PERI2_AO_BASE, peri2_init, dump_peri2_ao_apc },
 	{ DEVAPC_PERI_PAR_AO_BASE, peri_par_init, dump_peri_par_ao_apc },
 };
 
-void dapc_init(void)
-{
-	int i;
-	uintptr_t devapc_ao_base;
-
-	for (i = 0; i < ARRAY_SIZE(devapc_init); 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);
-	}
-}
+const size_t devapc_init_cnt = ARRAY_SIZE(devapc_init);
diff --git a/src/soc/mediatek/mt8188/include/soc/devapc.h b/src/soc/mediatek/mt8188/include/soc/devapc.h
index 3cbce5c..1ea71bf 100644
--- a/src/soc/mediatek/mt8188/include/soc/devapc.h
+++ b/src/soc/mediatek/mt8188/include/soc/devapc.h
@@ -5,8 +5,7 @@
 
 #include <device/mmio.h>
 #include <soc/addressmap.h>
-
-void dapc_init(void);
+#include <soc/devapc_common.h>
 
 enum devapc_ao_offset {
 	SYS0_D0_APC_0 = 0x00000,
diff --git a/src/soc/mediatek/mt8195/apusys_devapc.c b/src/soc/mediatek/mt8195/apusys_devapc.c
index f02ed0e..d5f8978 100644
--- a/src/soc/mediatek/mt8195/apusys_devapc.c
+++ b/src/soc/mediatek/mt8195/apusys_devapc.c
@@ -3,7 +3,6 @@
 #include <console/console.h>
 #include <soc/apusys_devapc.h>
 #include <soc/devapc.h>
-#include <soc/devapc_common.h>
 
 static const enum domain_id domain_map[] = {
 	DOMAIN_0, DOMAIN_1, DOMAIN_2,  DOMAIN_3,  DOMAIN_4,  DOMAIN_5,	DOMAIN_6,  DOMAIN_7,
diff --git a/src/soc/mediatek/mt8195/devapc.c b/src/soc/mediatek/mt8195/devapc.c
index 5a2c312..5d0bead 100644
--- a/src/soc/mediatek/mt8195/devapc.c
+++ b/src/soc/mediatek/mt8195/devapc.c
@@ -2,8 +2,6 @@
 
 #include <console/console.h>
 #include <soc/devapc.h>
-#include <soc/devapc_common.h>
-#include <soc/apusys_devapc.h>
 
 static const struct apc_infra_peri_dom_16 infra_ao_sys0_devices[] = {
 	/* 0 */
@@ -1939,11 +1937,7 @@
 	write32(getreg(base, ONETIME_LOCK), 0x5);
 }
 
-struct devapc_init_ops {
-	uintptr_t base;
-	void (*init)(uintptr_t base);
-	void (*dump)(uintptr_t base);
-} devapc_init[] = {
+const struct devapc_init_ops devapc_init[] = {
 	{ DEVAPC_INFRA_AO_BASE, infra_init, dump_infra_ao_apc },
 	{ DEVAPC_PERI_AO_BASE, peri_init, dump_peri_ao_apc },
 	{ DEVAPC_PERI2_AO_BASE, peri2_init, dump_peri2_ao_apc },
@@ -1953,27 +1947,4 @@
 	{ SCP_CFG_BASE, scp_master_init, dump_scp_master },
 };
 
-void dapc_init(void)
-{
-	int i;
-	uintptr_t devapc_ao_base;
-
-	for (i = 0; i < ARRAY_SIZE(devapc_init); 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);
-	}
-
-	/* Set up APUSYS Permission */
-	start_apusys_devapc();
-}
+const size_t devapc_init_cnt = ARRAY_SIZE(devapc_init);
diff --git a/src/soc/mediatek/mt8195/include/soc/devapc.h b/src/soc/mediatek/mt8195/include/soc/devapc.h
index f2f0e9a..ecf171e 100644
--- a/src/soc/mediatek/mt8195/include/soc/devapc.h
+++ b/src/soc/mediatek/mt8195/include/soc/devapc.h
@@ -5,8 +5,7 @@
 
 #include <device/mmio.h>
 #include <soc/addressmap.h>
-
-void dapc_init(void);
+#include <soc/devapc_common.h>
 
 enum devapc_ao_offset {
 	SYS0_D0_APC_0 = 0x0,
diff --git a/src/soc/mediatek/mt8195/soc.c b/src/soc/mediatek/mt8195/soc.c
index 9383ac7..2ecc31e 100644
--- a/src/soc/mediatek/mt8195/soc.c
+++ b/src/soc/mediatek/mt8195/soc.c
@@ -5,6 +5,7 @@
 #include <device/device.h>
 #include <device/pci.h>
 #include <soc/apusys.h>
+#include <soc/apusys_devapc.h>
 #include <soc/devapc.h>
 #include <soc/dfd.h>
 #include <soc/emi.h>
@@ -31,6 +32,7 @@
 {
 	mtk_mmu_disable_l2c_sram();
 	dapc_init();
+	start_apusys_devapc();
 	apusys_init();
 	mcupm_init();
 	sspm_init();