From 78b29f456717eaac969e35f07ccbcd3c881c5ee0 Mon Sep 17 00:00:00 2001 From: Yidi Lin Date: Tue, 20 Dec 2022 15:30:38 +0800 Subject: 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 Reviewed-on: https://review.coreboot.org/c/coreboot/+/71137 Reviewed-by: Rex-BC Chen Tested-by: build bot (Jenkins) Reviewed-by: Yu-Ping Wu --- src/soc/mediatek/common/devapc.c | 22 +++++++++++++++ .../mediatek/common/include/soc/devapc_common.h | 10 +++++++ src/soc/mediatek/mt8186/devapc.c | 29 ++----------------- src/soc/mediatek/mt8186/include/soc/devapc.h | 3 +- src/soc/mediatek/mt8188/devapc.c | 29 ++----------------- src/soc/mediatek/mt8188/include/soc/devapc.h | 3 +- src/soc/mediatek/mt8195/apusys_devapc.c | 1 - src/soc/mediatek/mt8195/devapc.c | 33 ++-------------------- src/soc/mediatek/mt8195/include/soc/devapc.h | 3 +- src/soc/mediatek/mt8195/soc.c | 2 ++ 10 files changed, 43 insertions(+), 92 deletions(-) (limited to 'src/soc') 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 diff --git a/src/soc/mediatek/mt8186/devapc.c b/src/soc/mediatek/mt8186/devapc.c index 80af49af63..d831dcdf27 100644 --- a/src/soc/mediatek/mt8186/devapc.c +++ b/src/soc/mediatek/mt8186/devapc.c @@ -4,7 +4,6 @@ #include #include -#include static const struct apc_infra_peri_dom_8 infra_ao_sys0_devices[] = { /* 0 */ @@ -1421,34 +1420,10 @@ static void adsp_init(uintptr_t base) 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 d7bd8bf5da..eab8cb2cbf 100644 --- a/src/soc/mediatek/mt8186/include/soc/devapc.h +++ b/src/soc/mediatek/mt8186/include/soc/devapc.h @@ -7,8 +7,7 @@ #include #include - -void dapc_init(void); +#include 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 afb39d5919..5890a8ec3d 100644 --- a/src/soc/mediatek/mt8188/devapc.c +++ b/src/soc/mediatek/mt8188/devapc.c @@ -2,7 +2,6 @@ #include #include -#include static const struct apc_infra_peri_dom_16 infra_ao_sys0_devices[] = { /* 0 */ @@ -1575,35 +1574,11 @@ static void peri_par_init(uintptr_t base) 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 3cbce5c417..1ea71bfe5a 100644 --- a/src/soc/mediatek/mt8188/include/soc/devapc.h +++ b/src/soc/mediatek/mt8188/include/soc/devapc.h @@ -5,8 +5,7 @@ #include #include - -void dapc_init(void); +#include 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 f02ed0e7b7..d5f89786e5 100644 --- a/src/soc/mediatek/mt8195/apusys_devapc.c +++ b/src/soc/mediatek/mt8195/apusys_devapc.c @@ -3,7 +3,6 @@ #include #include #include -#include 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 5a2c3125c0..5d0bead5ed 100644 --- a/src/soc/mediatek/mt8195/devapc.c +++ b/src/soc/mediatek/mt8195/devapc.c @@ -2,8 +2,6 @@ #include #include -#include -#include static const struct apc_infra_peri_dom_16 infra_ao_sys0_devices[] = { /* 0 */ @@ -1939,11 +1937,7 @@ static void scp_master_init(uintptr_t base) 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 @@ struct devapc_init_ops { { 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 f2f0e9a3f0..ecf171eba3 100644 --- a/src/soc/mediatek/mt8195/include/soc/devapc.h +++ b/src/soc/mediatek/mt8195/include/soc/devapc.h @@ -5,8 +5,7 @@ #include #include - -void dapc_init(void); +#include 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 9383ac7f66..2ecc31e551 100644 --- a/src/soc/mediatek/mt8195/soc.c +++ b/src/soc/mediatek/mt8195/soc.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +32,7 @@ static void soc_init(struct device *dev) { mtk_mmu_disable_l2c_sram(); dapc_init(); + start_apusys_devapc(); apusys_init(); mcupm_init(); sspm_init(); -- cgit v1.2.3