mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-14 13:39:10 +00:00
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: Will Deacon <will.deacon@arm.com> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
This commit is contained in:
parent
5cc87a4df5
commit
46fd5c6b30
@ -687,6 +687,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
|||||||
[SPARC64] tick
|
[SPARC64] tick
|
||||||
[X86-64] hpet,tsc
|
[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]
|
clearcpuid=BITNUM [X86]
|
||||||
Disable CPUID feature X for the kernel. See
|
Disable CPUID feature X for the kernel. See
|
||||||
arch/x86/include/asm/cpufeatures.h for the valid bit
|
arch/x86/include/asm/cpufeatures.h for the valid bit
|
||||||
|
@ -288,14 +288,16 @@ config ARM_ARCH_TIMER
|
|||||||
select CLKSRC_ACPI if ACPI
|
select CLKSRC_ACPI if ACPI
|
||||||
|
|
||||||
config ARM_ARCH_TIMER_EVTSTREAM
|
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
|
default y if ARM_ARCH_TIMER
|
||||||
depends on ARM_ARCH_TIMER
|
depends on ARM_ARCH_TIMER
|
||||||
help
|
help
|
||||||
This option enables support for event stream generation based on
|
This option enables support by default for event stream generation
|
||||||
the ARM architected timer. It is used for waking up CPUs executing
|
based on the ARM architected timer. It is used for waking up CPUs
|
||||||
the wfe instruction at a frequency represented as a power-of-2
|
executing the wfe instruction at a frequency represented as a
|
||||||
divisor of the clock rate.
|
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
|
The main use of the event stream is wfe-based timeouts of userspace
|
||||||
locking implementations. It might also be useful for imposing timeout
|
locking implementations. It might also be useful for imposing timeout
|
||||||
on wfe to safeguard against any programming errors in case an expected
|
on wfe to safeguard against any programming errors in case an expected
|
||||||
|
@ -79,6 +79,14 @@ static enum ppi_nr arch_timer_uses_ppi = VIRT_PPI;
|
|||||||
static bool arch_timer_c3stop;
|
static bool arch_timer_c3stop;
|
||||||
static bool arch_timer_mem_use_virtual;
|
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.
|
* 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);
|
enable_percpu_irq(arch_timer_ppi[PHYS_NONSECURE_PPI], 0);
|
||||||
|
|
||||||
arch_counter_set_user_access();
|
arch_counter_set_user_access();
|
||||||
if (IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM))
|
if (evtstrm_enable)
|
||||||
arch_timer_configure_evtstream();
|
arch_timer_configure_evtstream();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user