| .. | .. |
|---|
| 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 | } |
|---|