# Copyright (c) 2014-2015 Wind River Systems, Inc. # Copyright (c) 2016 Cadence Design Systems, Inc. # Copyright (c) 2019-2023 Intel Corp. # SPDX-License-Identifier: Apache-2.0 choice prompt "Default System Timer" default HPET_TIMER if SOC_FAMILY_INTEL_ISH || SOC_ATOM || SOC_LAKEMONT default APIC_TSC_DEADLINE_TIMER depends on X86 help Select Default System Timer. config HPET_TIMER bool "HPET timer" depends on DT_HAS_INTEL_HPET_ENABLED select IOAPIC select LOAPIC imply TIMER_READS_ITS_FREQUENCY_AT_RUNTIME select TICKLESS_CAPABLE select TIMER_HAS_64BIT_CYCLE_COUNTER help This option selects High Precision Event Timer (HPET) as a system timer. config APIC_TIMER bool "Local APIC timer" select LOAPIC select TIMER_HAS_64BIT_CYCLE_COUNTER select SYSTEM_CLOCK_LOCK_FREE_COUNT help Use the x86 local APIC in periodic 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. config APIC_TSC_DEADLINE_TIMER bool "Local APIC timer using TSC deadline mode" select LOAPIC select TICKLESS_CAPABLE select TIMER_HAS_64BIT_CYCLE_COUNTER 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_TSC bool "Local APIC timer using TSC time source" depends on !SMP select LOAPIC select TICKLESS_CAPABLE select TIMER_HAS_64BIT_CYCLE_COUNTER help If your CPU supports invariant TSC but no TSC deadline capability then this choice will rely on the TSC as time source and the local APIC in one-shot mode as the timeout event source. You must know the ratio of the TSC frequency to the local APIC timer frequency. endchoice 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. endif # APIC_TIMER 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 config APIC_TIMER_IRQ_PRIORITY int "Local APIC timer interrupt priority" depends on APIC_TIMER || APIC_TSC_DEADLINE_TIMER || APIC_TIMER_TSC default 4 help This option specifies the interrupt priority used by the local APIC timer.