drivers: timer: Refactor x86 system timer selection
Refactor timer selection to allow to select only one timer. Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
This commit is contained in:
parent
6fc22462a3
commit
19e32dc31e
4 changed files with 41 additions and 43 deletions
|
@ -15,9 +15,6 @@ config HEAP_MEM_POOL_SIZE
|
||||||
config BUILD_OUTPUT_STRIPPED
|
config BUILD_OUTPUT_STRIPPED
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config APIC_TSC_DEADLINE_TIMER
|
|
||||||
default y
|
|
||||||
|
|
||||||
# TSC on this board is 1.5936 GHz, HPET and APIC are 19.2 MHz
|
# TSC on this board is 1.5936 GHz, HPET and APIC are 19.2 MHz
|
||||||
config SYS_CLOCK_HW_CYCLES_PER_SEC
|
config SYS_CLOCK_HW_CYCLES_PER_SEC
|
||||||
default 1593600000 if APIC_TSC_DEADLINE_TIMER
|
default 1593600000 if APIC_TSC_DEADLINE_TIMER
|
||||||
|
|
|
@ -65,7 +65,7 @@ config SYSTEM_CLOCK_LOCK_FREE_COUNT
|
||||||
|
|
||||||
source "drivers/timer/Kconfig.altera_avalon"
|
source "drivers/timer/Kconfig.altera_avalon"
|
||||||
source "drivers/timer/Kconfig.ambiq"
|
source "drivers/timer/Kconfig.ambiq"
|
||||||
source "drivers/timer/Kconfig.apic"
|
source "drivers/timer/Kconfig.x86"
|
||||||
source "drivers/timer/Kconfig.arcv2"
|
source "drivers/timer/Kconfig.arcv2"
|
||||||
source "drivers/timer/Kconfig.arm_arch"
|
source "drivers/timer/Kconfig.arm_arch"
|
||||||
source "drivers/timer/Kconfig.cavs"
|
source "drivers/timer/Kconfig.cavs"
|
||||||
|
@ -73,7 +73,6 @@ source "drivers/timer/Kconfig.cc13xx_cc26xx_rtc"
|
||||||
source "drivers/timer/Kconfig.cortex_m_systick"
|
source "drivers/timer/Kconfig.cortex_m_systick"
|
||||||
source "drivers/timer/Kconfig.esp32c3_sys"
|
source "drivers/timer/Kconfig.esp32c3_sys"
|
||||||
source "drivers/timer/Kconfig.gecko"
|
source "drivers/timer/Kconfig.gecko"
|
||||||
source "drivers/timer/Kconfig.hpet"
|
|
||||||
source "drivers/timer/Kconfig.ite_it8xxx2"
|
source "drivers/timer/Kconfig.ite_it8xxx2"
|
||||||
source "drivers/timer/Kconfig.leon_gptimer"
|
source "drivers/timer/Kconfig.leon_gptimer"
|
||||||
source "drivers/timer/Kconfig.litex"
|
source "drivers/timer/Kconfig.litex"
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
# 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
|
|
||||||
|
|
||||||
config HPET_TIMER
|
|
||||||
bool "HPET timer"
|
|
||||||
default y
|
|
||||||
depends on DT_HAS_INTEL_HPET_ENABLED
|
|
||||||
select IOAPIC if X86
|
|
||||||
select LOAPIC if X86
|
|
||||||
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.
|
|
|
@ -1,12 +1,30 @@
|
||||||
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
# Copyright (c) 2014-2015 Wind River Systems, Inc.
|
||||||
# Copyright (c) 2016 Cadence Design Systems, Inc.
|
# Copyright (c) 2016 Cadence Design Systems, Inc.
|
||||||
# Copyright (c) 2019 Intel Corp.
|
# Copyright (c) 2019-2023 Intel Corp.
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
menuconfig APIC_TIMER
|
choice
|
||||||
bool "New local APIC timer"
|
prompt "Default System Timer"
|
||||||
|
default HPET
|
||||||
depends on X86
|
depends on X86
|
||||||
depends on LOAPIC
|
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 TICKLESS_CAPABLE
|
select TICKLESS_CAPABLE
|
||||||
select SYSTEM_CLOCK_LOCK_FREE_COUNT
|
select SYSTEM_CLOCK_LOCK_FREE_COUNT
|
||||||
help
|
help
|
||||||
|
@ -16,6 +34,24 @@ menuconfig APIC_TIMER
|
||||||
without complete APIC emulation). Modern hardware will work
|
without complete APIC emulation). Modern hardware will work
|
||||||
better with CONFIG_APIC_TSC_DEADLINE_TIMER.
|
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.
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
if APIC_TIMER
|
if APIC_TIMER
|
||||||
|
|
||||||
config APIC_TIMER_IRQ
|
config APIC_TIMER_IRQ
|
||||||
|
@ -52,23 +88,6 @@ endif # APIC_TIMER_TSC
|
||||||
|
|
||||||
endif # APIC_TIMER
|
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
|
|
||||||
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_IRQ_PRIORITY
|
config APIC_TIMER_IRQ_PRIORITY
|
||||||
int "Local APIC timer interrupt priority"
|
int "Local APIC timer interrupt priority"
|
||||||
depends on APIC_TIMER || APIC_TSC_DEADLINE_TIMER
|
depends on APIC_TIMER || APIC_TSC_DEADLINE_TIMER
|
Loading…
Add table
Add a link
Reference in a new issue