zephyr/drivers/timer/Kconfig.x86
Nicolas Pitre 99dcbdf933 drivers/timer/apic_timer: move to periodic mode
This driver is impossible to make time-accurate using single-shot
mode. Time accuracy may be obtained only by using periodic mode, meaning
it is not tickless capable either. Let's simplify the code by only
supporting periodic mode and strip out the TSC stuff. Any hardware with
TSC capability should now use the apic-tsc driver instead.

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
2024-05-29 08:40:43 +02:00

103 lines
3.1 KiB
Plaintext

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