Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46fd5c6b authored by Will Deacon's avatar Will Deacon Committed by Daniel Lezcano
Browse files

clocksource/drivers/arm_arch_timer: Control the evtstrm via the cmdline



Disabling the eventstream can be useful for both remotely debugging a
deployed production system and development of code using WFE-based
polling loops. Whilst this can currently be controlled via a Kconfig
option (CONFIG_ARM_ARCH_TIMER_EVTSTREAM), it's often desirable to toggle
the feature on the command line, so this patch adds a new command-line
option ("clocksource.arm_arch_timer.evtstrm") to do just that. The
default behaviour is determined based on CONFIG_ARM_ARCH_TIMER_EVTSTREAM.

Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
parent 5cc87a4d
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -687,6 +687,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
			[SPARC64] tick
			[X86-64] hpet,tsc

	clocksource.arm_arch_timer.evtstrm=
			[ARM,ARM64]
			Format: <bool>
			Enable/disable the eventstream feature of the ARM
			architected timer so that code using WFE-based polling
			loops can be debugged more effectively on production
			systems.

	clearcpuid=BITNUM [X86]
			Disable CPUID feature X for the kernel. See
			arch/x86/include/asm/cpufeatures.h for the valid bit
+7 −5
Original line number Diff line number Diff line
@@ -288,14 +288,16 @@ config ARM_ARCH_TIMER
	select CLKSRC_ACPI if ACPI

config ARM_ARCH_TIMER_EVTSTREAM
	bool "Support for ARM architected timer event stream generation"
	bool "Enable ARM architected timer event stream generation by default"
	default y if ARM_ARCH_TIMER
	depends on ARM_ARCH_TIMER
	help
	  This option enables support for event stream generation based on
	  the ARM architected timer. It is used for waking up CPUs executing
	  the wfe instruction at a frequency represented as a power-of-2
	  divisor of the clock rate.
	  This option enables support by default for event stream generation
	  based on the ARM architected timer. It is used for waking up CPUs
	  executing the wfe instruction at a frequency represented as a
	  power-of-2 divisor of the clock rate. The behaviour can also be
	  overridden on the command line using the
	  clocksource.arm_arch_timer.evtstream parameter.
	  The main use of the event stream is wfe-based timeouts of userspace
	  locking implementations. It might also be useful for imposing timeout
	  on wfe to safeguard against any programming errors in case an expected
+9 −1
Original line number Diff line number Diff line
@@ -79,6 +79,14 @@ static enum ppi_nr arch_timer_uses_ppi = VIRT_PPI;
static bool arch_timer_c3stop;
static bool arch_timer_mem_use_virtual;

static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);

static int __init early_evtstrm_cfg(char *buf)
{
	return strtobool(buf, &evtstrm_enable);
}
early_param("clocksource.arm_arch_timer.evtstrm", early_evtstrm_cfg);

/*
 * Architected system timer support.
 */
@@ -372,7 +380,7 @@ static int arch_timer_setup(struct clock_event_device *clk)
		enable_percpu_irq(arch_timer_ppi[PHYS_NONSECURE_PPI], 0);

	arch_counter_set_user_access();
	if (IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM))
	if (evtstrm_enable)
		arch_timer_configure_evtstream();

	return 0;