hc
2024-11-01 2f529f9b558ca1c1bd74be7437a84e4711743404
kernel/drivers/clocksource/arm_arch_timer.c
....@@ -21,6 +21,7 @@
2121 #include <linux/of_address.h>
2222 #include <linux/io.h>
2323 #include <linux/slab.h>
24
+#include <linux/dovetail.h>
2425 #include <linux/sched/clock.h>
2526 #include <linux/sched_clock.h>
2627 #include <linux/acpi.h>
....@@ -644,7 +645,7 @@
644645 if (ctrl & ARCH_TIMER_CTRL_IT_STAT) {
645646 ctrl |= ARCH_TIMER_CTRL_IT_MASK;
646647 arch_timer_reg_write(access, ARCH_TIMER_REG_CTRL, ctrl, evt);
647
- evt->event_handler(evt);
648
+ clockevents_handle_event(evt);
648649 return IRQ_HANDLED;
649650 }
650651
....@@ -753,7 +754,7 @@
753754 static void __arch_timer_setup(unsigned type,
754755 struct clock_event_device *clk)
755756 {
756
- clk->features = CLOCK_EVT_FEAT_ONESHOT;
757
+ clk->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PIPELINE;
757758
758759 if (type == ARCH_TIMER_TYPE_CP15) {
759760 typeof(clk->set_next_event) sne;
....@@ -864,6 +865,9 @@
864865 else
865866 cntkctl |= ARCH_TIMER_USR_VCT_ACCESS_EN;
866867
868
+ if (IS_ENABLED(CONFIG_GENERIC_CLOCKSOURCE_VDSO))
869
+ cntkctl |= ARCH_TIMER_USR_PT_ACCESS_EN;
870
+
867871 arch_timer_set_cntkctl(cntkctl);
868872 }
869873
....@@ -897,6 +901,7 @@
897901 enable_percpu_irq(arch_timer_ppi[arch_timer_uses_ppi], flags);
898902
899903 if (arch_timer_has_nonsecure_ppi()) {
904
+ clk->irq = arch_timer_ppi[ARCH_TIMER_PHYS_NONSECURE_PPI];
900905 flags = check_ppi_trigger(arch_timer_ppi[ARCH_TIMER_PHYS_NONSECURE_PPI]);
901906 enable_percpu_irq(arch_timer_ppi[ARCH_TIMER_PHYS_NONSECURE_PPI],
902907 flags);
....@@ -1015,6 +1020,8 @@
10151020
10161021 arch_timer_read_counter = rd;
10171022 clocksource_counter.vdso_clock_mode = vdso_default;
1023
+ if (vdso_default != VDSO_CLOCKMODE_NONE)
1024
+ clocksource_counter.vdso_type = CLOCKSOURCE_VDSO_ARCHITECTED;
10181025 } else {
10191026 arch_timer_read_counter = arch_counter_get_cntvct_mem;
10201027 }