/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (C) 2021 Sean Anderson <sean.anderson@seco.com> */ #ifndef XILINX_TIMER_H #define XILINX_TIMER_H #include <linux/compiler.h> #define TCSR0 0x00 #define TLR0 0x04 #define TCR0 0x08 #define TCSR1 0x10 #define TLR1 0x14 #define TCR1 0x18 #define TCSR_MDT BIT(0) #define TCSR_UDT BIT(1) #define TCSR_GENT BIT(2) #define TCSR_CAPT BIT(3) #define TCSR_ARHT BIT(4) #define TCSR_LOAD BIT(5) #define TCSR_ENIT BIT(6) #define TCSR_ENT BIT(7) #define TCSR_TINT BIT(8) #define TCSR_PWMA BIT(9) #define TCSR_ENALL BIT(10) #define TCSR_CASC BIT(11) struct clk; struct device_node; struct regmap; /** * struct xilinx_timer_priv - Private data for Xilinx AXI timer drivers * @map: Regmap of the device, possibly with an offset * @clk: Parent clock * @max: Maximum value of the counters */ struct xilinx_timer_priv { struct regmap *map; struct clk *clk; u32 max; }; /** * xilinx_timer_tlr_cycles() - Calculate the TLR for a period specified * in clock cycles * @priv: The timer's private data * @tcsr: The value of the TCSR register for this counter * @cycles: The number of cycles in this period * * Callers of this function MUST ensure that @cycles is representable as * a TLR. * * Return: The calculated value for TLR */ u32 xilinx_timer_tlr_cycles(struct xilinx_timer_priv *priv, u32 tcsr, u64 cycles); /** * xilinx_timer_get_period() - Get the current period of a counter * @priv: The timer's private data * @tlr: The value of TLR for this counter * @tcsr: The value of TCSR for this counter * * Return: The period, in ns */ unsigned int xilinx_timer_get_period(struct xilinx_timer_priv *priv, u32 tlr, u32 tcsr); #endif /* XILINX_TIMER_H */