Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / include / clocksource / timer-xilinx.h
blobd116f18de899c336212621529855811c1938eb20
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3 * Copyright (C) 2021 Sean Anderson <sean.anderson@seco.com>
4 */
6 #ifndef XILINX_TIMER_H
7 #define XILINX_TIMER_H
9 #include <linux/compiler.h>
11 #define TCSR0 0x00
12 #define TLR0 0x04
13 #define TCR0 0x08
14 #define TCSR1 0x10
15 #define TLR1 0x14
16 #define TCR1 0x18
18 #define TCSR_MDT BIT(0)
19 #define TCSR_UDT BIT(1)
20 #define TCSR_GENT BIT(2)
21 #define TCSR_CAPT BIT(3)
22 #define TCSR_ARHT BIT(4)
23 #define TCSR_LOAD BIT(5)
24 #define TCSR_ENIT BIT(6)
25 #define TCSR_ENT BIT(7)
26 #define TCSR_TINT BIT(8)
27 #define TCSR_PWMA BIT(9)
28 #define TCSR_ENALL BIT(10)
29 #define TCSR_CASC BIT(11)
31 struct clk;
32 struct device_node;
33 struct regmap;
35 /**
36 * struct xilinx_timer_priv - Private data for Xilinx AXI timer drivers
37 * @map: Regmap of the device, possibly with an offset
38 * @clk: Parent clock
39 * @max: Maximum value of the counters
41 struct xilinx_timer_priv {
42 struct regmap *map;
43 struct clk *clk;
44 u64 max;
47 /**
48 * xilinx_timer_tlr_cycles() - Calculate the TLR for a period specified
49 * in clock cycles
50 * @priv: The timer's private data
51 * @tcsr: The value of the TCSR register for this counter
52 * @cycles: The number of cycles in this period
54 * Callers of this function MUST ensure that @cycles is representable as
55 * a TLR.
57 * Return: The calculated value for TLR
59 u32 xilinx_timer_tlr_cycles(struct xilinx_timer_priv *priv, u32 tcsr,
60 u64 cycles);
62 /**
63 * xilinx_timer_get_period() - Get the current period of a counter
64 * @priv: The timer's private data
65 * @tlr: The value of TLR for this counter
66 * @tcsr: The value of TCSR for this counter
68 * Return: The period, in ns
70 unsigned int xilinx_timer_get_period(struct xilinx_timer_priv *priv,
71 u32 tlr, u32 tcsr);
73 #endif /* XILINX_TIMER_H */