# 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"
	default n
	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"
	default n
	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"
	default n
	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
	default n
	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
	prompt "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_NRF5 && 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"
	default n
	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"
	default n
	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"
	default n
	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
