# Microchip MEC1501 MCU core series

# Copyright (c) 2018 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config SOC_SERIES_MEC15XX
	select ARM
	select CPU_CORTEX_M4
	select CPU_CORTEX_M_HAS_DWT
	select CPU_HAS_ARM_MPU
	select HAS_PM

config SOC_MEC1501_HSZ
	select HAS_MEC_HAL

if SOC_SERIES_MEC15XX

config RTOS_TIMER
	bool "MEC1501 RTOS timer"

config SOC_MEC1501_PROC_CLK_DIV
	int "PROC_CLK_DIV"
	default 1
	range 1 48
	help
	  This divisor defines a ratio between processor clock (HCLK)
	  and master clock (MCK):
	  HCLK = MCK / PROC_CLK_DIV
	  Allowed divider values: 1, 3, 4, 16, and 48.

config SOC_MEC1501_VTR3_1_8V
	bool "VTR3 power rail is tied to 1.8V"
	help
	  Set this is if VTR3 power sourcejumper in the board is changed.

config SOC_MEC1501_VCI_PINS_AS_GPIOS
	bool "Use VCI block pins as GPIOS"
	default y
	help
	  By default these pins are not GPIOs, but HW controlled.
	  Set this if VCI pin block HW logic is not required in the board
	  design.

choice
	prompt "MEC1501 debug interface general configuration"
	default SOC_MEC1501_DEBUG_WITHOUT_TRACING
	depends on SOC_SERIES_MEC15XX
	help
	  Select Debug SoC interface support for MEC15xx SoC family

	config SOC_MEC1501_DEBUG_DISABLED
		bool "Disable debug support"
		help
		  Debug port is disabled, JTAG/SWD cannot be enabled. JTAG_RST#
		  pin is ignored. All other JTAG pins can be used as GPIOs
		  or other non-JTAG alternate functions.

	config SOC_MEC1501_DEBUG_WITHOUT_TRACING
		bool "Debug support via Serial wire debug"
		help
		  JTAG port in SWD mode. UART2 and ADC00-03 can be used.

	config SOC_MEC1501_DEBUG_AND_TRACING
		bool "Debug support via Serial wire debug with tracing enabled"
		help
		  JTAG port is enabled in SWD mode. Refer to tracing options
		  to see if ADC00-03 can be used or not.

endchoice

choice
	prompt "MEC1501 debug interface trace configuration"
	default SOC_MEC1501_DEBUG_AND_ETM_TRACING
	depends on SOC_MEC1501_DEBUG_AND_TRACING
	help
	  Select tracing mode for debug interface

	config SOC_MEC1501_DEBUG_AND_ETM_TRACING
		bool "Debug support via Serial wire debug"
		help
		  JTAG port in SWD mode and SWV as tracing method.
		  UART2 can be used, but ADC00-03 cannot.

	config SOC_MEC1501_DEBUG_AND_SWV_TRACING
		bool "debug support via Serial Wire Debug and Viewer"
		help
		  JTAG port in SWD mode and SWV as tracing method.
		  UART2 cannot be used. ADC00-03 can be used.
endchoice

# GPIO initialization depends on SOC initialization, which happen at
# CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, so GPIO_INIT_PRIORITY needs to be
# higher than that.
if GPIO

config GPIO_INIT_PRIORITY
	default 41

endif # GPIO

endif # SOC_SERIES_MEC15XX
