# Copyright (c) 2014 Wind River Systems, Inc.
# Copyright (c) 2018 Synopsys, Inc. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

if SOC_EMSK_EM7D

config CPU_EM4_DMIPS
	default y

config NUM_IRQ_PRIO_LEVELS
	# This processor supports 4 priority levels:
	# 0 for Fast Interrupts (FIRQs) and 1-3 for Regular Interrupts (IRQs).
	default 4

config NUM_IRQS
	# must be > the highest interrupt number used
	default 38 if BOARD_EM_STARTERKIT_R23
	default 36 if BOARD_EM_STARTERKIT_R22

config ARC_MPU_VER
	default 4 if BOARD_EM_STARTERKIT_R23
	default 2 if BOARD_EM_STARTERKIT_R22

config RGF_NUM_BANKS
	default 1

config SYS_CLOCK_HW_CYCLES_PER_SEC
	default 25000000 if BOARD_EM_STARTERKIT_R23
	default 30000000 if BOARD_EM_STARTERKIT_R22

config HARVARD
	default y

config ARC_FIRQ
	default n if BOARD_EM_STARTERKIT_R23
	default y if BOARD_EM_STARTERKIT_R22

config CACHE_MANAGEMENT
	default y

if (ARC_MPU_VER = 2)

config MAIN_STACK_SIZE
	default 2048

config IDLE_STACK_SIZE
	default 2048

config ZTEST_STACK_SIZE
	default 2048
	depends on ZTEST

endif # ARC_MPU_VER

endif # SOC_EMSK_EM7D
