From b9f95db1dcf14b7f14a4d5ad7b4340e00093c684 Mon Sep 17 00:00:00 2001 From: Rex-BC Chen Date: Fri, 15 Oct 2021 21:02:25 +0800 Subject: [PATCH] soc/mediatek/mt8186: add GIC pre-initialization function GIC (generic interrupt controller) defines architectural requirements for handling all interrupt sources and common interrupt controller programming interface. GIC needs to be pre-initialized on MT8186, so we add this initialize function. TEST=build pass BUG=b:202871018 Change-Id: I6bf439d0d9e1ca7130a69b9006b957afca8b133c Signed-off-by: Rex-BC Chen Reviewed-on: https://review.coreboot.org/c/coreboot/+/59252 Reviewed-by: Yu-Ping Wu Tested-by: build bot (Jenkins) --- src/soc/mediatek/mt8186/Makefile.inc | 1 + src/soc/mediatek/mt8186/bootblock.c | 2 ++ src/soc/mediatek/mt8186/gic.c | 20 ++++++++++++++++++++ src/soc/mediatek/mt8186/include/soc/gic.h | 13 +++++++++++++ 4 files changed, 36 insertions(+) create mode 100644 src/soc/mediatek/mt8186/gic.c create mode 100644 src/soc/mediatek/mt8186/include/soc/gic.h diff --git a/src/soc/mediatek/mt8186/Makefile.inc b/src/soc/mediatek/mt8186/Makefile.inc index 37c1b3c9de..4c89f3d6b9 100644 --- a/src/soc/mediatek/mt8186/Makefile.inc +++ b/src/soc/mediatek/mt8186/Makefile.inc @@ -3,6 +3,7 @@ ifeq ($(CONFIG_SOC_MEDIATEK_MT8186),y) bootblock-y += bootblock.c bootblock-y += ../common/eint_event.c bootblock-y += ../common/flash_controller.c +bootblock-y += gic.c bootblock-y += ../common/gpio.c gpio.c bootblock-y += ../common/mmu_operations.c bootblock-y += ../common/pll.c pll.c diff --git a/src/soc/mediatek/mt8186/bootblock.c b/src/soc/mediatek/mt8186/bootblock.c index 17fd27e53f..d5b288a168 100644 --- a/src/soc/mediatek/mt8186/bootblock.c +++ b/src/soc/mediatek/mt8186/bootblock.c @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -12,4 +13,5 @@ void bootblock_soc_init(void) mtk_wdt_init(); mt_pll_init(); unmask_eint_event_mask(); + mtk_gic_preinit(); } diff --git a/src/soc/mediatek/mt8186/gic.c b/src/soc/mediatek/mt8186/gic.c new file mode 100644 index 0000000000..ac077647af --- /dev/null +++ b/src/soc/mediatek/mt8186/gic.c @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +/* + * This file is created based on MT8186 Functional Specification + * Chapter number: 4.3 + */ + +#include +#include +#include + +void mtk_gic_preinit(void) +{ + int i; + + for (i = 3; i < 15; i++) { + write32((void *)((uintptr_t)MCUSYS_BASE + 0xA600 + i * 4), 0); + write32((void *)((uintptr_t)MCUSYS_BASE + 0xA650 + i * 4), 0xFFFFFFFF); + } +} diff --git a/src/soc/mediatek/mt8186/include/soc/gic.h b/src/soc/mediatek/mt8186/include/soc/gic.h new file mode 100644 index 0000000000..7e11107717 --- /dev/null +++ b/src/soc/mediatek/mt8186/include/soc/gic.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +/* + * This file is created based on MT8186 Functional Specification + * Chapter number: 4.3 + */ + +#ifndef SOC_MEDIATEK_MT8186_GIC_H +#define SOC_MEDIATEK_MT8186_GIC_H + +void mtk_gic_preinit(void); + +#endif