# Copyright 2023 The ChromiumOS Authors
# SPDX-License-Identifier: Apache-2.0

orsource "*/Kconfig.defconfig"

if SOC_FAMILY_MTK

config INTC_MTK_ADSP
	default y

config XTENSA_SMALL_VECTOR_TABLE_ENTRY
	default y

config XTENSA_USE_CORE_CRT1
	default n

config MULTI_LEVEL_INTERRUPTS
	default y
config 2ND_LEVEL_INTERRUPTS
	default y
config MAX_IRQ_PER_AGGREGATOR
	default 32
config 2ND_LVL_ISR_TBL_OFFSET
	default 32

# The 8186/8188 core has only one software interrupt that lives at
# level 2, underneath other hardware interrupts like timer, so it
# can't reliably do this.  Unselect so the tests don't try to exercise
# it.
config IRQ_OFFLOAD_NESTED
	default n if SOC_SERIES_MT818X
	default y

config CPU_HAS_DCACHE
	default y
config DCACHE
	default y
config CACHE_MANAGEMENT
	default y
config DCACHE_LINE_SIZE
	default 128

config NOCACHE_MEMORY
	default y

config MTK_ADSP_TIMER
	default y
config XTENSA_TIMER
	default n

config CONSOLE
	default y
config WINSTREAM_CONSOLE
	default y
config WINSTREAM
	default y
config LOG_BACKEND_ADSP
	default y if LOG

config XTENSA_CCOUNT_HZ
	default 720000000 if SOC_MT8195
	default 400000000 if SOC_MT8186
	default 800000000 if SOC_MT8188
	default 800000000 if SOC_MT8196

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default $(dt_node_int_prop_int,$(dt_nodelabel_path,ostimer64),freq-hz)

config MAIN_STACK_SIZE
	default 2048

# This platform has a single big DRAM region where most linkage
# happens.  The libc heap normally wants to steal all of it, when in
# fact SOF has its own heap.  Just leave a little for stray malloc()
# calls to find.
config COMMON_LIBC_MALLOC_ARENA_SIZE
	default 32768

# Don't build the HAL if the toolchain already includes it.  Note that
# this is done in the SOC layer historically, really this belongs in
# arch/xtensa or the toolchain integration.
#
config XTENSA_HAL
	default n if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "xcc"
	default n if "$(ZEPHYR_TOOLCHAIN_VARIANT)" = "xt-clang"
	default y

config SOC_TOOLCHAIN_NAME
	default "mtk_mt8195_adsp" if SOC_SERIES_MT8195
	default "mtk_mt818x_adsp" if SOC_SERIES_MT818X
	default "mtk_mt8196_adsp" if SOC_SERIES_MT8196

config XTENSA_RESET_VECTOR
	default n

# This single-core device doesn't have S32C1I and so has no built-in
# atomics.  Note we must disable _ARCH explicitly because
# CONFIG_XTENSA turns it on (due to an xcc lack of gcc builtins?)
#
config ATOMIC_OPERATIONS_C
	default y
config ATOMIC_OPERATIONS_ARCH
	default n

config GEN_ISR_TABLES
	default y
config GEN_SW_ISR_TABLE
	default y
config GEN_IRQ_VECTOR_TABLE
	default n

endif # SOC_FAMILY_MTK
