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