summaryrefslogtreecommitdiffstats
path: root/drivers/clocksource
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2019-08-21 10:58:36 -0400
committerPaul Walmsley <paul.walmsley@sifive.com>2019-09-05 04:52:46 -0400
commit2f12dbf190d97dc0f2f8a07269dd0d8060808539 (patch)
treed699e8fc51c7814904c0ab79c50a7144e243d544 /drivers/clocksource
parentf5bf645d10f2c6cc85294021af70f2b7bcc42d8e (diff)
riscv: don't use the rdtime(h) pseudo-instructions
If we just use the CSRs that these map to directly the code is simpler and doesn't require extra inline assembly code. Also fix up the top-level comment in timer-riscv.c to not talk about the cycle count or mention details of the clocksource interface, of which this file is just a consumer. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Atish Patra <atish.patra@wdc.com> Signed-off-by: Paul Walmsley <paul.walmsley@sifive.com>
Diffstat (limited to 'drivers/clocksource')
-rw-r--r--drivers/clocksource/timer-riscv.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c
index 09e031176bc6..470c7ef02ea4 100644
--- a/drivers/clocksource/timer-riscv.c
+++ b/drivers/clocksource/timer-riscv.c
@@ -2,6 +2,10 @@
2/* 2/*
3 * Copyright (C) 2012 Regents of the University of California 3 * Copyright (C) 2012 Regents of the University of California
4 * Copyright (C) 2017 SiFive 4 * Copyright (C) 2017 SiFive
5 *
6 * All RISC-V systems have a timer attached to every hart. These timers can be
7 * read from the "time" and "timeh" CSRs, and can use the SBI to setup
8 * events.
5 */ 9 */
6#include <linux/clocksource.h> 10#include <linux/clocksource.h>
7#include <linux/clockchips.h> 11#include <linux/clockchips.h>
@@ -12,19 +16,6 @@
12#include <asm/smp.h> 16#include <asm/smp.h>
13#include <asm/sbi.h> 17#include <asm/sbi.h>
14 18
15/*
16 * All RISC-V systems have a timer attached to every hart. These timers can be
17 * read by the 'rdcycle' pseudo instruction, and can use the SBI to setup
18 * events. In order to abstract the architecture-specific timer reading and
19 * setting functions away from the clock event insertion code, we provide
20 * function pointers to the clockevent subsystem that perform two basic
21 * operations: rdtime() reads the timer on the current CPU, and
22 * next_event(delta) sets the next timer event to 'delta' cycles in the future.
23 * As the timers are inherently a per-cpu resource, these callbacks perform
24 * operations on the current hart. There is guaranteed to be exactly one timer
25 * per hart on all RISC-V systems.
26 */
27
28static int riscv_clock_next_event(unsigned long delta, 19static int riscv_clock_next_event(unsigned long delta,
29 struct clock_event_device *ce) 20 struct clock_event_device *ce)
30{ 21{