# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2016 Cadence Design Systems, Inc.
# Copyright (c) 2019 Intel Corp.
# SPDX-License-Identifier: Apache-2.0

DT_CHOSEN_IDLE_TIMER := zephyr,cortex-m-idle-timer

config CORTEX_M_SYSTICK
	bool "Cortex-M SYSTICK timer"
	depends on CPU_CORTEX_M_HAS_SYSTICK
	default y
	depends on DT_HAS_ARM_ARMV6M_SYSTICK_ENABLED || \
		   DT_HAS_ARM_ARMV7M_SYSTICK_ENABLED || \
		   DT_HAS_ARM_ARMV8M_SYSTICK_ENABLED || \
		   DT_HAS_ARM_ARMV8_1M_SYSTICK_ENABLED
	select TICKLESS_CAPABLE
	select SYSTEM_TIMER_HAS_DISABLE_SUPPORT
	select CORTEX_M_SYSTICK_INSTALL_ISR
	help
	  This module implements a kernel device driver for the Cortex-M processor
	  SYSTICK timer and provides the standard "system clock driver" interfaces.

config CORTEX_M_SYSTICK_INSTALL_ISR
	bool
	depends on CPU_CORTEX_M_HAS_SYSTICK
	help
	  This option should be selected by SysTick-based drivers so that the
	  sys_clock_isr() function is installed.

config CORTEX_M_SYSTICK_64BIT_CYCLE_COUNTER
	bool "Cortex-M SYSTICK timer with sys_clock_cycle_get_64() support"
	depends on CORTEX_M_SYSTICK
	default y if (SYS_CLOCK_HW_CYCLES_PER_SEC > 60000000)
	select TIMER_HAS_64BIT_CYCLE_COUNTER
	help
	  This driver, due to its limited 24-bits hardware counter, is already
	  tracking a separate cycle count in software. This option make that
	  count a 64-bits value to support sys_clock_cycle_get_64().
	  This is cheap to do as expensive math operations (i.e. divisions)
	  are performed only on counter interval values that always fit in
	  32 bits.

	  This is set to y by default when the hardware clock is fast enough
	  to wrap sys_clock_cycle_get_32() in about a minute or less.

config CORTEX_M_SYSTICK_IDLE_TIMER
	bool "Use an additional timer while entering IDLE"
	default $(dt_chosen_enabled,$(DT_CHOSEN_IDLE_TIMER))
	depends on COUNTER
	depends on TICKLESS_KERNEL
	depends on PM
	help
	  There are chips e.g. STMFX family that use SysTick as a system timer,
	  but SysTick is not clocked in low power mode. These chips usually have
	  another timer that is not stopped, but it has lower frequency e.g.
	  RTC, thus it can't be used as a main system timer.

	  Use the IDLE timer for timeout (wakeup) when the system is entering
	  IDLE state.

	  The chosen IDLE timer node has to support setting alarm from the
	  counter API.
