.. | .. |
---|
21 | 21 | #include <linux/of_address.h> |
---|
22 | 22 | #include <linux/io.h> |
---|
23 | 23 | #include <linux/slab.h> |
---|
| 24 | +#include <linux/dovetail.h> |
---|
24 | 25 | #include <linux/sched/clock.h> |
---|
25 | 26 | #include <linux/sched_clock.h> |
---|
26 | 27 | #include <linux/acpi.h> |
---|
.. | .. |
---|
644 | 645 | if (ctrl & ARCH_TIMER_CTRL_IT_STAT) { |
---|
645 | 646 | ctrl |= ARCH_TIMER_CTRL_IT_MASK; |
---|
646 | 647 | arch_timer_reg_write(access, ARCH_TIMER_REG_CTRL, ctrl, evt); |
---|
647 | | - evt->event_handler(evt); |
---|
| 648 | + clockevents_handle_event(evt); |
---|
648 | 649 | return IRQ_HANDLED; |
---|
649 | 650 | } |
---|
650 | 651 | |
---|
.. | .. |
---|
753 | 754 | static void __arch_timer_setup(unsigned type, |
---|
754 | 755 | struct clock_event_device *clk) |
---|
755 | 756 | { |
---|
756 | | - clk->features = CLOCK_EVT_FEAT_ONESHOT; |
---|
| 757 | + clk->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PIPELINE; |
---|
757 | 758 | |
---|
758 | 759 | if (type == ARCH_TIMER_TYPE_CP15) { |
---|
759 | 760 | typeof(clk->set_next_event) sne; |
---|
.. | .. |
---|
864 | 865 | else |
---|
865 | 866 | cntkctl |= ARCH_TIMER_USR_VCT_ACCESS_EN; |
---|
866 | 867 | |
---|
| 868 | + if (IS_ENABLED(CONFIG_GENERIC_CLOCKSOURCE_VDSO)) |
---|
| 869 | + cntkctl |= ARCH_TIMER_USR_PT_ACCESS_EN; |
---|
| 870 | + |
---|
867 | 871 | arch_timer_set_cntkctl(cntkctl); |
---|
868 | 872 | } |
---|
869 | 873 | |
---|
.. | .. |
---|
897 | 901 | enable_percpu_irq(arch_timer_ppi[arch_timer_uses_ppi], flags); |
---|
898 | 902 | |
---|
899 | 903 | if (arch_timer_has_nonsecure_ppi()) { |
---|
| 904 | + clk->irq = arch_timer_ppi[ARCH_TIMER_PHYS_NONSECURE_PPI]; |
---|
900 | 905 | flags = check_ppi_trigger(arch_timer_ppi[ARCH_TIMER_PHYS_NONSECURE_PPI]); |
---|
901 | 906 | enable_percpu_irq(arch_timer_ppi[ARCH_TIMER_PHYS_NONSECURE_PPI], |
---|
902 | 907 | flags); |
---|
.. | .. |
---|
1015 | 1020 | |
---|
1016 | 1021 | arch_timer_read_counter = rd; |
---|
1017 | 1022 | clocksource_counter.vdso_clock_mode = vdso_default; |
---|
| 1023 | + if (vdso_default != VDSO_CLOCKMODE_NONE) |
---|
| 1024 | + clocksource_counter.vdso_type = CLOCKSOURCE_VDSO_ARCHITECTED; |
---|
1018 | 1025 | } else { |
---|
1019 | 1026 | arch_timer_read_counter = arch_counter_get_cntvct_mem; |
---|
1020 | 1027 | } |
---|