diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-12-01 01:29:19 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-12-01 01:29:19 +0300 |
commit | 9dd0013824fc29e618db7a5b0bac5545285b946a (patch) | |
tree | 8f55a45124b7f1587d019205114d0657d2f2f067 /arch/arm/include/asm/vdso/gettimeofday.h | |
parent | 2309d0768237476c3144aa296264ad9e19598461 (diff) | |
parent | 1a70cf0e7ee6e73aa29c2dd4dd8d3d38c48d5946 (diff) | |
download | linux-9dd0013824fc29e618db7a5b0bac5545285b946a.tar.xz |
Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm
Pull ARM updates from Russell King:
- improve ARM implementation of pfn_valid()
- various sparse fixes
- spelling fixes
- add further ARMv8 debug architecture versions
- clang fix for decompressor
- update to generic vDSO
- remove Brahma-B53 from spectre hardening
- initialise broadcast hrtimer device
- use correct nm executable in decompressor
- remove old mcount et.al.
* tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm: (26 commits)
ARM: 8940/1: ftrace: remove mcount(),ftrace_caller_old() and ftrace_call_old()
ARM: 8939/1: kbuild: use correct nm executable
ARM: 8938/1: kernel: initialize broadcast hrtimer based clock event device
ARM: 8937/1: spectre-v2: remove Brahma-B53 from hardening
ARM: 8933/1: replace Sun/Solaris style flag on section directive
ARM: 8932/1: Add clock_gettime64 entry point
ARM: 8931/1: Add clock_getres entry point
ARM: 8930/1: Add support for generic vDSO
ARM: 8929/1: use APSR_nzcv instead of r15 as mrc operand
ARM: 8927/1: ARM/hw_breakpoint: add more ARMv8 debug architecture versions support
ARM: 8918/2: only build return_address() if needed
ARM: 8928/1: ARM_ERRATA_775420: Spelling s/date/data/
ARM: 8925/1: tcm: include <asm/tcm.h> for missing declarations
ARM: 8924/1: tcm: make dtcm_end and itcm_end static
ARM: 8923/1: mm: include <asm/vga.h> for vga_base
ARM: 8922/1: parse_dt_topology() rate is pointer to __be32
ARM: 8920/1: share get_signal_page from signal.c to process.c
ARM: 8919/1: make unexported functions static
ARM: 8917/1: mm: include <asm/set_memory.h>
ARM: 8916/1: mm: make set_section_perms() static
...
Diffstat (limited to 'arch/arm/include/asm/vdso/gettimeofday.h')
-rw-r--r-- | arch/arm/include/asm/vdso/gettimeofday.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/arch/arm/include/asm/vdso/gettimeofday.h b/arch/arm/include/asm/vdso/gettimeofday.h new file mode 100644 index 000000000000..5b879ae7afc1 --- /dev/null +++ b/arch/arm/include/asm/vdso/gettimeofday.h @@ -0,0 +1,94 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2018 ARM Limited + */ +#ifndef __ASM_VDSO_GETTIMEOFDAY_H +#define __ASM_VDSO_GETTIMEOFDAY_H + +#ifndef __ASSEMBLY__ + +#include <asm/barrier.h> +#include <asm/cp15.h> +#include <asm/unistd.h> +#include <uapi/linux/time.h> + +#define VDSO_HAS_CLOCK_GETRES 1 + +extern struct vdso_data *__get_datapage(void); + +static __always_inline int gettimeofday_fallback( + struct __kernel_old_timeval *_tv, + struct timezone *_tz) +{ + register struct timezone *tz asm("r1") = _tz; + register struct __kernel_old_timeval *tv asm("r0") = _tv; + register long ret asm ("r0"); + register long nr asm("r7") = __NR_gettimeofday; + + asm volatile( + " swi #0\n" + : "=r" (ret) + : "r" (tv), "r" (tz), "r" (nr) + : "memory"); + + return ret; +} + +static __always_inline long clock_gettime_fallback( + clockid_t _clkid, + struct __kernel_timespec *_ts) +{ + register struct __kernel_timespec *ts asm("r1") = _ts; + register clockid_t clkid asm("r0") = _clkid; + register long ret asm ("r0"); + register long nr asm("r7") = __NR_clock_gettime64; + + asm volatile( + " swi #0\n" + : "=r" (ret) + : "r" (clkid), "r" (ts), "r" (nr) + : "memory"); + + return ret; +} + +static __always_inline int clock_getres_fallback( + clockid_t _clkid, + struct __kernel_timespec *_ts) +{ + register struct __kernel_timespec *ts asm("r1") = _ts; + register clockid_t clkid asm("r0") = _clkid; + register long ret asm ("r0"); + register long nr asm("r7") = __NR_clock_getres_time64; + + asm volatile( + " swi #0\n" + : "=r" (ret) + : "r" (clkid), "r" (ts), "r" (nr) + : "memory"); + + return ret; +} + +static __always_inline u64 __arch_get_hw_counter(int clock_mode) +{ +#ifdef CONFIG_ARM_ARCH_TIMER + u64 cycle_now; + + isb(); + cycle_now = read_sysreg(CNTVCT); + + return cycle_now; +#else + return -EINVAL; /* use fallback */ +#endif +} + +static __always_inline const struct vdso_data *__arch_get_vdso_data(void) +{ + return __get_datapage(); +} + +#endif /* !__ASSEMBLY__ */ + +#endif /* __ASM_VDSO_GETTIMEOFDAY_H */ |