qcacmn: Add support to track high watermark for SRNGs

Add support to track the high watermark for the number
of entries which are used at any given instant. This helps
in identifying if the ring size is sufficient or is being
full for certain use-cases.

Change-Id: Id3ffa52c653696699fbcfbb556a815d5f7908863
CRs-Fixed: 3235115
这个提交包含在:
Rakesh Pillai
2022-07-01 07:16:57 -07:00
提交者 Madan Koyyalamudi
父节点 162ab8974a
当前提交 9ba8236444
修改 8 个文件,包含 294 行新增2 行删除

查看文件

@@ -1485,6 +1485,37 @@ void hal_srng_last_desc_cleared_init(struct hal_srng *srng)
}
#endif /* CLEAR_SW2TCL_CONSUMED_DESC */
#ifdef WLAN_DP_SRNG_USAGE_WM_TRACKING
static inline void hal_srng_update_high_wm_thresholds(struct hal_srng *srng)
{
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_90_to_100] =
((srng->num_entries * 90) / 100);
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_80_to_90] =
((srng->num_entries * 80) / 100);
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_70_to_80] =
((srng->num_entries * 70) / 100);
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_60_to_70] =
((srng->num_entries * 60) / 100);
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_50_to_60] =
((srng->num_entries * 50) / 100);
/* Below 50% threshold is not needed */
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_BELOW_50_PERCENT] = 0;
hal_info("ring_id: %u, wm_thresh- <50:%u, 50-60:%u, 60-70:%u, 70-80:%u, 80-90:%u, 90-100:%u",
srng->ring_id,
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_BELOW_50_PERCENT],
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_50_to_60],
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_60_to_70],
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_70_to_80],
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_80_to_90],
srng->high_wm.bin_thresh[HAL_SRNG_HIGH_WM_BIN_90_to_100]);
}
#else
static inline void hal_srng_update_high_wm_thresholds(struct hal_srng *srng)
{
}
#endif
/**
* hal_srng_setup - Initialize HW SRNG ring.
* @hal_soc: Opaque HAL SOC handle
@@ -1547,6 +1578,7 @@ void *hal_srng_setup(void *hal_soc, int ring_type, int ring_num,
srng->prefetch_timer = ring_params->prefetch_timer;
srng->hal_soc = hal_soc;
hal_srng_set_msi2_params(srng, ring_params);
hal_srng_update_high_wm_thresholds(srng);
for (i = 0 ; i < MAX_SRNG_REG_GROUPS; i++) {
srng->hwreg_base[i] = dev_base_addr + ring_config->reg_start[i]