74 lines · c
1/* SPDX-License-Identifier: GPL-2.0+ */2/*3 * Copyright (C) 2021 Sean Anderson <sean.anderson@seco.com>4 */5 6#ifndef XILINX_TIMER_H7#define XILINX_TIMER_H8 9#include <linux/compiler.h>10 11#define TCSR0 0x0012#define TLR0 0x0413#define TCR0 0x0814#define TCSR1 0x1015#define TLR1 0x1416#define TCR1 0x1817 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)30 31struct clk;32struct device_node;33struct regmap;34 35/**36 * struct xilinx_timer_priv - Private data for Xilinx AXI timer drivers37 * @map: Regmap of the device, possibly with an offset38 * @clk: Parent clock39 * @max: Maximum value of the counters40 */41struct xilinx_timer_priv {42 struct regmap *map;43 struct clk *clk;44 u64 max;45};46 47/**48 * xilinx_timer_tlr_cycles() - Calculate the TLR for a period specified49 * in clock cycles50 * @priv: The timer's private data51 * @tcsr: The value of the TCSR register for this counter52 * @cycles: The number of cycles in this period53 *54 * Callers of this function MUST ensure that @cycles is representable as55 * a TLR.56 *57 * Return: The calculated value for TLR58 */59u32 xilinx_timer_tlr_cycles(struct xilinx_timer_priv *priv, u32 tcsr,60 u64 cycles);61 62/**63 * xilinx_timer_get_period() - Get the current period of a counter64 * @priv: The timer's private data65 * @tlr: The value of TLR for this counter66 * @tcsr: The value of TCSR for this counter67 *68 * Return: The period, in ns69 */70unsigned int xilinx_timer_get_period(struct xilinx_timer_priv *priv,71 u32 tlr, u32 tcsr);72 73#endif /* XILINX_TIMER_H */74