1 /* SPDX-License-Identifier: GPL-2.0+ */ 1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 2 /* 3 * Copyright (C) 2021 Sean Anderson <sean.ande 3 * Copyright (C) 2021 Sean Anderson <sean.anderson@seco.com> 4 */ 4 */ 5 5 6 #ifndef XILINX_TIMER_H 6 #ifndef XILINX_TIMER_H 7 #define XILINX_TIMER_H 7 #define XILINX_TIMER_H 8 8 9 #include <linux/compiler.h> 9 #include <linux/compiler.h> 10 10 11 #define TCSR0 0x00 11 #define TCSR0 0x00 12 #define TLR0 0x04 12 #define TLR0 0x04 13 #define TCR0 0x08 13 #define TCR0 0x08 14 #define TCSR1 0x10 14 #define TCSR1 0x10 15 #define TLR1 0x14 15 #define TLR1 0x14 16 #define TCR1 0x18 16 #define TCR1 0x18 17 17 18 #define TCSR_MDT BIT(0) 18 #define TCSR_MDT BIT(0) 19 #define TCSR_UDT BIT(1) 19 #define TCSR_UDT BIT(1) 20 #define TCSR_GENT BIT(2) 20 #define TCSR_GENT BIT(2) 21 #define TCSR_CAPT BIT(3) 21 #define TCSR_CAPT BIT(3) 22 #define TCSR_ARHT BIT(4) 22 #define TCSR_ARHT BIT(4) 23 #define TCSR_LOAD BIT(5) 23 #define TCSR_LOAD BIT(5) 24 #define TCSR_ENIT BIT(6) 24 #define TCSR_ENIT BIT(6) 25 #define TCSR_ENT BIT(7) 25 #define TCSR_ENT BIT(7) 26 #define TCSR_TINT BIT(8) 26 #define TCSR_TINT BIT(8) 27 #define TCSR_PWMA BIT(9) 27 #define TCSR_PWMA BIT(9) 28 #define TCSR_ENALL BIT(10) 28 #define TCSR_ENALL BIT(10) 29 #define TCSR_CASC BIT(11) 29 #define TCSR_CASC BIT(11) 30 30 31 struct clk; 31 struct clk; 32 struct device_node; 32 struct device_node; 33 struct regmap; 33 struct regmap; 34 34 35 /** 35 /** 36 * struct xilinx_timer_priv - Private data for 36 * struct xilinx_timer_priv - Private data for Xilinx AXI timer drivers 37 * @map: Regmap of the device, possibly with a 37 * @map: Regmap of the device, possibly with an offset 38 * @clk: Parent clock 38 * @clk: Parent clock 39 * @max: Maximum value of the counters 39 * @max: Maximum value of the counters 40 */ 40 */ 41 struct xilinx_timer_priv { 41 struct xilinx_timer_priv { 42 struct regmap *map; 42 struct regmap *map; 43 struct clk *clk; 43 struct clk *clk; 44 u64 max; !! 44 u32 max; 45 }; 45 }; 46 46 47 /** 47 /** 48 * xilinx_timer_tlr_cycles() - Calculate the T 48 * xilinx_timer_tlr_cycles() - Calculate the TLR for a period specified 49 * in clock cycles 49 * in clock cycles 50 * @priv: The timer's private data 50 * @priv: The timer's private data 51 * @tcsr: The value of the TCSR register for t 51 * @tcsr: The value of the TCSR register for this counter 52 * @cycles: The number of cycles in this perio 52 * @cycles: The number of cycles in this period 53 * 53 * 54 * Callers of this function MUST ensure that @ 54 * Callers of this function MUST ensure that @cycles is representable as 55 * a TLR. 55 * a TLR. 56 * 56 * 57 * Return: The calculated value for TLR 57 * Return: The calculated value for TLR 58 */ 58 */ 59 u32 xilinx_timer_tlr_cycles(struct xilinx_time 59 u32 xilinx_timer_tlr_cycles(struct xilinx_timer_priv *priv, u32 tcsr, 60 u64 cycles); 60 u64 cycles); 61 61 62 /** 62 /** 63 * xilinx_timer_get_period() - Get the current 63 * xilinx_timer_get_period() - Get the current period of a counter 64 * @priv: The timer's private data 64 * @priv: The timer's private data 65 * @tlr: The value of TLR for this counter 65 * @tlr: The value of TLR for this counter 66 * @tcsr: The value of TCSR for this counter 66 * @tcsr: The value of TCSR for this counter 67 * 67 * 68 * Return: The period, in ns 68 * Return: The period, in ns 69 */ 69 */ 70 unsigned int xilinx_timer_get_period(struct xi 70 unsigned int xilinx_timer_get_period(struct xilinx_timer_priv *priv, 71 u32 tlr, 71 u32 tlr, u32 tcsr); 72 72 73 #endif /* XILINX_TIMER_H */ 73 #endif /* XILINX_TIMER_H */ 74 74
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.