Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
# 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.