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>
This commit is contained in:
parent
d7326282f9
commit
78b29f4567
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 @@ 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);
|
||||
|
@ -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,
|
||||
|
@ -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 @@ 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);
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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 @@ 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);
|
||||
|
@ -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,
|
||||
|
@ -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 @@ static void soc_init(struct device *dev)
|
||||
{
|
||||
mtk_mmu_disable_l2c_sram();
|
||||
dapc_init();
|
||||
start_apusys_devapc();
|
||||
apusys_init();
|
||||
mcupm_init();
|
||||
sspm_init();
|
||||
|
Loading…
x
Reference in New Issue
Block a user