xref: /dpdk/drivers/common/cnxk/roc_tim.h (revision f3c7b60769f997be0c49788d7bfc515c59910f83)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 
5 #ifndef _ROC_TIM_H_
6 #define _ROC_TIM_H_
7 
8 #include "roc_platform.h"
9 
10 enum roc_tim_clk_src {
11 	ROC_TIM_CLK_SRC_10NS = 0,
12 	ROC_TIM_CLK_SRC_GPIO,
13 	ROC_TIM_CLK_SRC_GTI,
14 	ROC_TIM_CLK_SRC_PTP,
15 	ROC_TIM_CLK_SRC_SYNCE,
16 	ROC_TIM_CLK_SRC_BTS,
17 	ROC_TIM_CLK_SRC_EXT_MIO,
18 	ROC_TIM_CLK_SRC_EXT_GTI,
19 	ROC_TIM_CLK_SRC_INVALID,
20 };
21 
22 struct roc_tim_hwwqe_cfg {
23 	uint8_t grp_ena;
24 	uint8_t hwwqe_ena;
25 	uint8_t flw_ctrl_ena;
26 	uint16_t grp_tmo_cyc;
27 	uint16_t result_offset;
28 	uint16_t event_count_offset;
29 };
30 
31 struct roc_tim {
32 	struct roc_sso *roc_sso;
33 	/* Public data. */
34 	uint16_t nb_lfs;
35 	struct tim_feat_info feat;
36 	/* Private data. */
37 #define TIM_MEM_SZ (1 * 1024)
38 	uint8_t reserved[TIM_MEM_SZ] __plt_cache_aligned;
39 } __plt_cache_aligned;
40 
41 int __roc_api roc_tim_init(struct roc_tim *roc_tim);
42 void __roc_api roc_tim_fini(struct roc_tim *roc_tim);
43 
44 /* TIM config */
45 int __roc_api roc_tim_lf_enable(struct roc_tim *roc_tim, uint8_t ring_id,
46 				uint64_t *start_tsc, uint32_t *cur_bkt);
47 int __roc_api roc_tim_lf_disable(struct roc_tim *roc_tim, uint8_t ring_id);
48 int __roc_api roc_tim_lf_config(struct roc_tim *roc_tim, uint8_t ring_id,
49 				enum roc_tim_clk_src clk_src, uint8_t ena_periodic, uint8_t ena_dfb,
50 				uint32_t bucket_sz, uint32_t chunk_sz, uint64_t interval,
51 				uint64_t intervalns, uint64_t clockfreq);
52 int __roc_api roc_tim_lf_config_hwwqe(struct roc_tim *roc_tim, uint8_t ring_id,
53 				      struct roc_tim_hwwqe_cfg *cfg);
54 int __roc_api roc_tim_lf_interval(struct roc_tim *roc_tim,
55 				  enum roc_tim_clk_src clk_src,
56 				  uint64_t clockfreq, uint64_t *intervalns,
57 				  uint64_t *interval);
58 int __roc_api roc_tim_lf_alloc(struct roc_tim *roc_tim, uint8_t ring_id,
59 			       uint64_t *clk);
60 int __roc_api roc_tim_lf_free(struct roc_tim *roc_tim, uint8_t ring_id);
61 uintptr_t __roc_api roc_tim_lf_base_get(struct roc_tim *roc_tim,
62 					uint8_t ring_id);
63 int roc_tim_capture_counters(struct roc_tim *roc_tim, uint64_t *counters, uint8_t nb_cntrs);
64 
65 #endif
66