| # Timer driver configuration options |
| |
| # 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 |
| |
| menu "Timer Drivers" |
| |
| menuconfig APIC_TIMER |
| bool "New local APIC timer" |
| depends on X86 |
| depends on LOAPIC |
| select TICKLESS_CAPABLE |
| help |
| Use the x86 local APIC in one-shot mode as the system time |
| source. NOTE: this probably isn't what you want except on |
| older or idiosyncratic hardware (or environments like qemu |
| without complete APIC emulation). Modern hardware will work |
| better with CONFIG_APIC_TSC_DEADLINE_TIMER. |
| |
| if APIC_TIMER |
| |
| config APIC_TIMER_IRQ |
| int "Local APIC timer IRQ" |
| default 24 |
| help |
| This option specifies the IRQ used by the local APIC timer. |
| Note: this MUST be set to the index immediately after the |
| last IO-APIC IRQ (the timer is the first entry in the APIC |
| local vector table). This footgun is not intended to be |
| user-configurable and almost certainly should be managed via |
| a different mechanism. |
| |
| config APIC_TIMER_TSC |
| bool "Use invariant TSC for sys_clock_cycle_get_32()" |
| help |
| If your CPU supports invariant TSC, and you know the ratio of the |
| TSC frequency to CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC (the local APIC |
| timer frequency), then enable this for a much faster and more |
| accurate sys_clock_cycle_get_32(). |
| |
| if APIC_TIMER_TSC |
| |
| config APIC_TIMER_TSC_N |
| int "TSC to local APIC timer frequency multiplier (N)" |
| default 1 |
| |
| config APIC_TIMER_TSC_M |
| int "TSC to local APIC timer frequency divisor (M)" |
| default 1 |
| |
| endif # APIC_TIMER_TSC |
| |
| endif # APIC_TIMER |
| |
| config APIC_TSC_DEADLINE_TIMER |
| bool "Even newer APIC timer using TSC deadline mode" |
| depends on X86 |
| select LOAPIC |
| select TICKLESS_CAPABLE |
| help |
| Extremely simple timer driver based the local APIC TSC |
| deadline capability. The use of a free-running 64 bit |
| counter with comparator eliminates almost all edge cases |
| from the handling, and the near-instruction-cycle resolution |
| permits effectively unlimited precision where needed (the |
| limit becomes the CPU time taken to execute the timing |
| logic). SMP-safe and very fast, this should be the obvious |
| choice for any x86 device with invariant TSC and TSC |
| deadline capability. |
| |
| config APIC_TIMER_IRQ_PRIORITY |
| int "Local APIC timer interrupt priority" |
| depends on APIC_TIMER || APIC_TSC_DEADLINE_TIMER |
| default 4 |
| help |
| This option specifies the interrupt priority used by the |
| local APIC timer. |
| |
| config HPET_TIMER |
| bool "HPET timer" |
| select IOAPIC if X86 |
| select LOAPIC if X86 |
| imply TIMER_READS_ITS_FREQUENCY_AT_RUNTIME |
| select TICKLESS_CAPABLE |
| help |
| This option selects High Precision Event Timer (HPET) as a |
| system timer. |
| |
| menuconfig ARCV2_TIMER |
| bool "ARC Timer" |
| default y |
| depends on ARC |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the ARCv2 processor timer 0 |
| and provides the standard "system clock driver" interfaces. |
| |
| config ARCV2_TIMER_IRQ_PRIORITY |
| int "ARC timer interrupt priority" |
| default 0 |
| depends on ARCV2_TIMER |
| help |
| This option specifies the IRQ priority used by the ARC timer. Lower |
| values have higher priority. |
| |
| config ARM_ARCH_TIMER |
| bool "ARM architected timer" |
| depends on GIC |
| select ARCH_HAS_CUSTOM_BUSY_WAIT |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the ARM architected |
| timer which provides per-cpu timers attached to a GIC to deliver its |
| per-processor interrupts via PPIs. |
| |
| DT_COMPAT_ARM_V6M_SYSTICK := arm,armv6m-systick |
| DT_COMPAT_ARM_V7M_SYSTICK := arm,armv7m-systick |
| DT_COMPAT_ARM_V8M_SYSTICK := arm,armv8m-systick |
| DT_COMPAT_ARM_V8_1M_SYSTICK := arm,armv8.1m-systick |
| |
| config CORTEX_M_SYSTICK |
| bool "Cortex-M SYSTICK timer" |
| depends on CPU_CORTEX_M_HAS_SYSTICK |
| default $(dt_compat_enabled,$(DT_COMPAT_ARM_V6M_SYSTICK)) || \ |
| $(dt_compat_enabled,$(DT_COMPAT_ARM_V7M_SYSTICK)) || \ |
| $(dt_compat_enabled,$(DT_COMPAT_ARM_V8M_SYSTICK)) || \ |
| $(dt_compat_enabled,$(DT_COMPAT_ARM_V8_1M_SYSTICK)) |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the Cortex-M processor |
| SYSTICK timer and provides the standard "system clock driver" interfaces. |
| |
| config ALTERA_AVALON_TIMER |
| bool "Altera Avalon Interval Timer" |
| default y |
| depends on NIOS2 |
| help |
| This module implements a kernel device driver for the Altera Avalon |
| Interval Timer as described in the Embedded IP documentation, for use |
| with Nios II and possibly other Altera soft CPUs. It provides the |
| standard "system clock driver" interfaces. |
| |
| config ITE_IT8XXX2_TIMER |
| bool "ITE it8xxx2 timer driver" |
| depends on SOC_IT8XXX2 |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the ITE it8xxx2 |
| HW timer model |
| |
| config NRF_RTC_TIMER |
| bool "nRF Real Time Counter (NRF_RTC1) Timer" |
| depends on CLOCK_CONTROL |
| depends on SOC_COMPATIBLE_NRF |
| select TICKLESS_CAPABLE |
| select NRF_HW_RTC1_RESERVED |
| help |
| This module implements a kernel device driver for the nRF Real Time |
| Counter NRF_RTC1 and provides the standard "system clock driver" |
| interfaces. |
| |
| if NRF_RTC_TIMER |
| |
| config NRF_RTC_TIMER_USER_CHAN_COUNT |
| int "Additional channels that can be used" |
| default 0 |
| help |
| Use nrf_rtc_timer.h API. Driver is not managing allocation of channels. |
| |
| choice |
| prompt "Clock startup policy" |
| default SYSTEM_CLOCK_WAIT_FOR_STABILITY |
| |
| config SYSTEM_CLOCK_NO_WAIT |
| bool "No wait" |
| help |
| System clock source is initiated but does not wait for clock readiness. |
| When this option is picked, system clock may not be ready when code relying |
| on kernel API is executed. Requested timeouts will be prolonged by the |
| remaining startup time. |
| |
| config SYSTEM_CLOCK_WAIT_FOR_AVAILABILITY |
| bool "Wait for availability" |
| help |
| System clock source initialization waits until clock is available. In some |
| systems, clock initially runs from less accurate source which has faster |
| startup time and then seamlessly switches to the target clock source when |
| it is ready. When this option is picked, system clock is available after |
| system clock driver initialization but it may be less accurate. Option is |
| equivalent to waiting for stability if clock source does not have |
| intermediate state. |
| |
| config SYSTEM_CLOCK_WAIT_FOR_STABILITY |
| bool "Wait for stability" |
| help |
| System clock source initialization waits until clock is stable. When this |
| option is picked, system clock is available and stable after system clock |
| driver initialization. |
| |
| endchoice |
| |
| endif # NRF_RTC_TIMER |
| |
| source "drivers/timer/Kconfig.stm32_lptim" |
| |
| config RISCV_MACHINE_TIMER |
| bool "RISCV Machine Timer" |
| depends on SOC_FAMILY_RISCV_PRIVILEGE |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the generic RISCV machine |
| timer driver. It provides the standard "system clock driver" interfaces. |
| |
| config RV32M1_LPTMR_TIMER |
| bool "RV32M1 LPTMR system timer driver" |
| default y |
| depends on SOC_OPENISA_RV32M1_RISCV32 |
| depends on RV32M1_INTMUX |
| help |
| This module implements a kernel device driver for using the LPTMR |
| peripheral as the system clock. It provides the standard "system clock |
| driver" interfaces. |
| |
| config LITEX_TIMER |
| bool "LiteX Timer" |
| default y |
| depends on SOC_RISCV32_LITEX_VEXRISCV |
| help |
| This module implements a kernel device driver for LiteX Timer. |
| |
| config NATIVE_POSIX_TIMER |
| bool "(POSIX) native_posix timer driver" |
| default y |
| depends on BOARD_NATIVE_POSIX |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the native_posix HW timer |
| model |
| |
| config XTENSA_TIMER |
| bool "Xtensa timer support" |
| depends on XTENSA |
| default y |
| select TICKLESS_CAPABLE |
| help |
| Enables a system timer driver for Xtensa based on the CCOUNT |
| and CCOMPARE special registers. |
| |
| config ESP32C3_SYS_TIMER |
| bool "ESP32C3 sys-timer support" |
| depends on SOC_ESP32C3 |
| default y |
| select TICKLESS_CAPABLE |
| help |
| This option enables the system timer driver for the Espressif ESP32C3 |
| and provides the standard "system clock driver" interface. |
| |
| config XTENSA_TIMER_ID |
| int "System timer CCOMPAREn register index" |
| default 1 |
| depends on XTENSA_TIMER |
| help |
| Index of the CCOMPARE register (and associated interrupt) |
| used for the system timer. Xtensa CPUs have hard-configured |
| interrupt priorities associated with each timer, and some of |
| them can be unmaskable (and thus not usable by OS code that |
| need synchronization, like the timer subsystem!). Choose |
| carefully. Generally you want the timer with the highest |
| priority maskable interrupt. |
| |
| config SAM0_RTC_TIMER |
| bool "Atmel SAM0 series RTC timer" |
| depends on SOC_FAMILY_SAM0 |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the Atmel SAM0 |
| series Real Time Counter and provides the standard "system clock |
| driver" interfaces. |
| |
| config MCHP_XEC_RTOS_TIMER |
| bool "Microchip XEC series RTOS timer" |
| depends on SOC_FAMILY_MEC |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the Microchip |
| XEC series RTOS timer and provides the standard "system clock |
| driver" interfaces. |
| |
| config CC13X2_CC26X2_RTC_TIMER |
| bool "TI SimpleLink CC13x2/CC26x2 RTC timer" |
| depends on SOC_SERIES_CC13X2_CC26X2 |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the TI SimpleLink |
| CC13X2_CC26X2 series Real Time Counter and provides the standard |
| "system clock driver" interfaces. |
| |
| config RCAR_CMT_TIMER |
| bool "Renesas RCar cmt timer" |
| default y |
| depends on SOC_SERIES_RCAR_GEN3 |
| help |
| This module implements a kernel device driver for the Renesas RCAR |
| platform provides the standard "system clock driver" interfaces. |
| If unchecked, no timer will be used. |
| |
| config XLNX_PSTTC_TIMER |
| bool "Xilinx PS ttc timer support" |
| default y |
| depends on SOC_XILINX_ZYNQMP |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the Xilinx ZynqMP |
| platform provides the standard "system clock driver" interfaces. |
| If unchecked, no timer will be used. |
| |
| config XLNX_PSTTC_TIMER_INDEX |
| int "Xilinx PS ttc timer index" |
| range 0 3 |
| default 0 |
| depends on XLNX_PSTTC_TIMER |
| help |
| This is the index of TTC timer picked to provide system clock. |
| |
| config CAVS_TIMER |
| bool "CAVS DSP Wall Clock Timer on Intel SoC" |
| depends on CAVS_ICTL |
| select TICKLESS_CAPABLE |
| help |
| The DSP wall clock timer is a timer driven directly by |
| external oscillator and is external to the CPU core(s). |
| It is not as fast as the internal core clock, but provides |
| a common and synchronized counter for all CPU cores (which |
| is useful for SMP). |
| |
| config LEON_GPTIMER |
| bool "LEON timer" |
| depends on SOC_SPARC_LEON |
| select DYNAMIC_INTERRUPTS |
| help |
| This module implements a kernel device driver for the GRLIB |
| GPTIMER which is common in LEON systems. |
| |
| config NPCX_ITIM_TIMER |
| bool "Nuvoton NPCX series internal 64/32-bit timers" |
| default y |
| depends on SOC_FAMILY_NPCX |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the Nuvoton NPCX |
| series internal 64/32-bit timers and provides the standard "system |
| clock driver" interfaces. |
| |
| config SYSTEM_CLOCK_DISABLE |
| bool "API to disable system clock" |
| help |
| This option enables the sys_clock_disable() API in the kernel. It is |
| needed by some subsystems (which will automatically select it), but is |
| rarely needed by applications. |
| |
| config TIMER_READS_ITS_FREQUENCY_AT_RUNTIME |
| bool "Timer queries its hardware to find its frequency at runtime" |
| help |
| The drivers select this option automatically when needed. Do not modify |
| this unless you have a very good reason for it. |
| |
| config SYSTEM_CLOCK_SLOPPY_IDLE |
| bool "Timer allowed to skew uptime clock during idle" |
| help |
| When true, the timer driver is not required to maintain a |
| correct system uptime count when the system enters idle. |
| Some platforms may take advantage of this to reduce the |
| overhead from regular interrupts required to handle counter |
| wraparound conditions. |
| |
| config SYSTEM_CLOCK_INIT_PRIORITY |
| int "System clock driver initialization priority" |
| default 0 |
| help |
| This options can be used to set a specific initialization priority |
| value for the system clock driver. As driver initialization might need |
| the clock to be running already, you should let the default value as it |
| is (0). |
| |
| # Hidden option to be selected by individual SoC. |
| config TICKLESS_CAPABLE |
| bool |
| help |
| Timer drivers should select this flag if they are capable of |
| supporting tickless operation. That is, a call to |
| sys_clock_set_timeout() with a number of ticks greater than |
| one should be expected not to produce a call to |
| sys_clock_announce() (really, not to produce an interrupt at |
| all) until the specified expiration. |
| |
| DT_COMPAT_NXP_OS_TIMER := nxp,os-timer |
| |
| config MCUX_OS_TIMER |
| bool "MCUX OS Event timer" |
| depends on HAS_MCUX_OS_TIMER |
| default $(dt_compat_enabled,$(DT_COMPAT_NXP_OS_TIMER)) |
| select TICKLESS_CAPABLE |
| help |
| This module implements a kernel device driver for the NXP OS |
| event timer and provides the standard "system clock driver" interfaces. |
| |
| config MCUX_LPTMR_TIMER |
| bool "MCUX LPTMR timer" |
| depends on HAS_MCUX_LPTMR && !COUNTER_MCUX_LPTMR |
| help |
| This module implements a kernel device driver for the NXP MCUX Low |
| Power Timer (LPTMR) and provides the standard "system clock driver" |
| interfaces. |
| |
| endmenu |