# Kconfig - timer driver configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2016 Cadence Design Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#


menu "Timer Drivers"

config HPET_TIMER
	bool "HPET timer"
	depends on X86
	select IOAPIC
	select LOAPIC
	select TIMER_READS_ITS_FREQUENCY_AT_RUNTIME
	help
	  This option selects High Precision Event Timer (HPET) as a
	  system timer.

config HPET_TIMER_LEGACY_EMULATION
	bool "HPET timer legacy emulation mode"
	depends on HPET_TIMER
	help
	  This option switches HPET to legacy emulation mode.
	  In this mode 8254 PIT is disabled, HPET timer0 is connected
	  to IOAPIC IRQ2, timer1 -- to IOAPIC IRQ8.

config HPET_TIMER_DEBUG
	bool "Enable HPET debug output"
	depends on HPET_TIMER && PRINTK
	help
	  This option enables HPET debugging output.

config HPET_TIMER_BASE_ADDRESS
	hex "HPET Base Address"
	default 0xFED00000
	depends on HPET_TIMER
	help
	  This options specifies the base address of the HPET timer device.

config HPET_TIMER_IRQ
	int "HPET Timer IRQ"
	default 20
	depends on HPET_TIMER
	help
	  This option specifies the IRQ used by the HPET timer.

config HPET_TIMER_IRQ_PRIORITY
	int "HPET Timer IRQ Priority"
	default 4
	depends on HPET_TIMER
	help
	  This option specifies the IRQ priority used by the HPET timer.

choice
depends on HPET_TIMER
prompt "HPET Interrupt Trigger Condition"
default HPET_TIMER_FALLING_EDGE

config HPET_TIMER_FALLING_EDGE
	bool "Falling Edge"
	help
	  This option signifies that the HPET timer uses falling edge interrupts.

config HPET_TIMER_RISING_EDGE
	bool "Rising Edge"
	help
	  This option signifies that the HPET timer uses rising edge interrupts.

config HPET_TIMER_LEVEL_HIGH
	bool "Level High"
	help
	  This option signifies that the HPET timer uses level high interrupts.

config HPET_TIMER_LEVEL_LOW
	bool "Level Low"
	help
	  This option signifies that the HPET timer uses level low interrupts.

endchoice

config LOAPIC_TIMER
	bool "LOAPIC timer"
	depends on (LOAPIC || MVIC) && X86
	help
	  This option selects LOAPIC timer as a system timer.

config LOAPIC_TIMER_IRQ
	int "Local APIC Timer IRQ"
	default 24
	depends on LOAPIC_TIMER
	help
	  This option specifies the IRQ used by the LOAPIC timer.

config LOAPIC_TIMER_IRQ_PRIORITY
	int "Local APIC Timer IRQ Priority"
	default 2
	depends on LOAPIC_TIMER
	help
	  This options specifies the IRQ priority used by the LOAPIC timer.

config TSC_CYCLES_PER_SEC
	int "Frequency of x86 CPU timestamp counter"
	default 0
	depends on LOAPIC_TIMER
	help
	  The x86 implementation of LOAPIC k_cycle_get_32() relies on the x86 TSC.
	  This runs at the CPU speed and not the bus speed. If set to 0, the
	  value of CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC will be used instead;
	  many MCUs these values are the same.

config ARCV2_TIMER
	bool "ARC Timer"
	default y
	depends on ARC
	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 CORTEX_M_SYSTICK
	bool "Cortex-M SYSTICK timer"
	default y
	depends on CPU_HAS_SYSTICK
	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 NRF_RTC_TIMER
	bool "nRF Real Time Counter (NRF_RTC1) Timer"
	default y
	depends on SOC_FAMILY_NRF && CLOCK_CONTROL_NRF5
	help
	  This module implements a kernel device driver for the nRF Real Time
	  Counter NRF_RTC1 and provides the standard "system clock driver"
	  interfaces.

config PULPINO_TIMER
	bool "pulpino Timer"
	default y
	depends on SOC_RISCV32_PULPINO
	help
	  This module implements a kernel device driver for the pulpino processor
	  timer driver. It provides the standard "system clock driver" interfaces.

config RISCV_MACHINE_TIMER
	bool "RISCV Machine Timer"
	depends on SOC_FAMILY_RISCV_PRIVILEGE
	help
	  This module implements a kernel device driver for the generic RISCV machine
	  timer driver. It provides the standard "system clock driver" interfaces.

config NATIVE_POSIX_TIMER
	bool "(POSIX) native_posix timer driver"
	default y
	depends on BOARD_NATIVE_POSIX
	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
	help
	  This module implements a kernel device driver for the Xtensa processor and
	  provides the standard "system clock driver" interfaces.
	  If unchecked, no timer will be used.
	  If checked it will use either an internal timer (default option) or an
	  external timer. In that case one shall unselect XTENSA_INTERNAL_TIMER and
	  define XTENSA_TIMER_IRQ and XTENSA_TIMER_IRQ_PRIORITY.

config XTENSA_INTERNAL_TIMER
	bool "Xtensa internal timer"
	depends on XTENSA_TIMER
	default y
	help
	  This module implements a kernel device driver for the Xtensa processor
	  internal timer and provides the standard "system clock driver" interfaces.
	  If unchecked, an external timer will be used. It will rely on a tick
	  interrupt connected to an IRQ line. In this case one shall define
	  both XTENSA_TIMER_IRQ and XTENSA_TIMER_IRQ_PRIORITY.

config XTENSA_TIMER_IRQ
	int "Xtensa external timer interrupt number"
	depends on XTENSA_TIMER && !XTENSA_INTERNAL_TIMER
	range -1 31
	default -1
	help
	  This is the number of interrupt line used by the external timer.
	  The special value of -1 allows using the internal timer in order to
	  emulate an external timer. This is generally useful for running the project on
	  a simulator	where it is hard to emulate an external interrupt.

config XTENSA_TIMER_IRQ_PRIORITY
	int "Xtensa external timer interrupt priority"
	depends on XTENSA_TIMER && !XTENSA_INTERNAL_TIMER
	range 1 6
	default 1
	help
	  This is the priority of interrupt line.

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_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).

endmenu
