Merge "qcacmn: Add DP rings to SSR dump"

This commit is contained in:
Linux Build Service Account
2023-09-22 01:14:07 -07:00
committed by Gerrit - the friendly Code Review server
4 changed files with 177 additions and 2 deletions

View File

@@ -2302,6 +2302,7 @@ static void dp_soc_srng_deinit_be(struct dp_soc *soc)
if (soc->features.dmac_cmn_src_rxbuf_ring_enabled) {
for (i = 0; i < soc->num_rx_refill_buf_rings; i++) {
dp_ssr_dump_srng_unregister("rx_refill_buf_ring", i);
dp_srng_deinit(soc, &soc->rx_refill_buf_ring[i],
RXDMA_BUF, 0);
}
@@ -2364,6 +2365,9 @@ static QDF_STATUS dp_soc_srng_init_be(struct dp_soc *soc)
soc);
goto fail;
}
dp_ssr_dump_srng_register("rx_refill_buf_ring",
&soc->rx_refill_buf_ring[i],
i);
}
}

View File

@@ -5560,4 +5560,70 @@ dp_tx_latency_stats_update_cca(struct dp_soc *soc, uint16_t peer_id,
*/
void dp_tx_latency_stats_report(struct dp_soc *soc, struct dp_pdev *pdev);
#endif
#ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
/**
* dp_ssr_dump_srng_register() - Register DP ring with SSR dump.
* @region_name: ring name to register.
* @srng: dp srng handler.
* @num: Ring number
*
* num = -1. If there is only single ring
* num = ring number. If there are multiple rings pass ring number.
* e.g. in case of REO pass reo number (0..n).
*
* Return: None.
*/
void
dp_ssr_dump_srng_register(char *region_name, struct dp_srng *srng, int num);
/**
* dp_ssr_dump_srng_unregister() - Unegister DP ring with SSR dump.
* @region_name: ring name to unregister.
* @num: Ring number
*
* num = -1. If there is only single ring
* num = ring number. If there are multiple rings pass ring number.
* e.g. in case of REO pass reo number (0..n).
*
* Return: None.
*/
void dp_ssr_dump_srng_unregister(char *region_name, int num);
/**
* dp_ssr_dump_pdev_register() - Register DP Pdev with SSR dump.
* @pdev: Pdev handle to register.
* @pdev_id: Pdev ID.
*
* Return: None.
*/
void dp_ssr_dump_pdev_register(struct dp_pdev *pdev, uint8_t pdev_id);
/**
* dp_ssr_dump_pdev_unregister() - Unregister DP Pdev with SSR dump.
* @pdev_id: Pdev ID.
*
* Return: None.
*/
void dp_ssr_dump_pdev_unregister(uint8_t pdev_id);
#else
static inline
void dp_ssr_dump_srng_register(char *region_name, struct dp_srng *srng, int num)
{
}
static inline
void dp_ssr_dump_srng_unregister(char *region_name, int num)
{
}
static inline
void dp_ssr_dump_pdev_register(struct dp_pdev *pdev, uint8_t pdev_id)
{
}
static inline
void dp_ssr_dump_pdev_unregister(uint8_t pdev_id)
{
}
#endif
#endif /* #ifndef _DP_INTERNAL_H_ */

View File

@@ -109,6 +109,7 @@ cdp_dump_flow_pool_info(struct cdp_soc_t *soc)
#ifdef WLAN_FEATURE_PEER_TXQ_FLUSH_CONF
#include <target_if_dp.h>
#endif
#include "qdf_ssr_driver_dump.h"
#ifdef QCA_DP_ENABLE_TX_COMP_RING4
#define TXCOMP_RING4_NUM 3
@@ -2920,6 +2921,8 @@ static int dp_rxdma_ring_setup(struct dp_soc *soc, struct dp_pdev *pdev)
dp_init_err("%pK: failed rx mac ring setup", soc);
return QDF_STATUS_E_FAILURE;
}
dp_ssr_dump_srng_register("rx_mac_buf_ring",
&pdev->rx_mac_buf_ring[i], i);
}
return QDF_STATUS_SUCCESS;
}
@@ -2935,8 +2938,10 @@ static void dp_rxdma_ring_cleanup(struct dp_soc *soc, struct dp_pdev *pdev)
{
int i;
for (i = 0; i < MAX_RX_MAC_RINGS; i++)
for (i = 0; i < MAX_RX_MAC_RINGS; i++) {
dp_ssr_dump_srng_unregister("rx_mac_buf_ring", i);
dp_srng_deinit(soc, &pdev->rx_mac_buf_ring[i], RXDMA_BUF, 1);
}
dp_reap_timer_deinit(soc);
}
@@ -3580,10 +3585,11 @@ QDF_STATUS dp_pdev_attach_wifi3(struct cdp_soc_t *txrx_soc,
pdev->soc = soc;
pdev->pdev_id = pdev_id;
soc->pdev_list[pdev_id] = pdev;
pdev->lmac_id = wlan_cfg_get_hw_mac_idx(soc->wlan_cfg_ctx, pdev_id);
soc->pdev_count++;
dp_ssr_dump_pdev_register(pdev, pdev_id);
/*sync DP pdev cfg items with profile support after cfg_pdev_attach*/
wlan_dp_pdev_cfg_sync_profile((struct cdp_soc_t *)soc, pdev_id);
@@ -3936,6 +3942,8 @@ static QDF_STATUS dp_pdev_detach_wifi3(struct cdp_soc_t *psoc, uint8_t pdev_id,
return QDF_STATUS_E_FAILURE;
}
dp_ssr_dump_pdev_unregister(pdev_id);
soc->arch_ops.txrx_pdev_detach(pdev);
dp_pdev_detach((struct cdp_pdev *)pdev, force);
@@ -4002,6 +4010,11 @@ static void dp_soc_detach(struct cdp_soc_t *txrx_soc)
soc->arch_ops.txrx_soc_detach(soc);
qdf_ssr_driver_dump_unregister_region("wlan_cfg_ctx");
qdf_ssr_driver_dump_unregister_region("dp_soc");
qdf_ssr_driver_dump_unregister_region("tcl_wbm_map_array");
qdf_nbuf_ssr_unregister_region();
dp_runtime_deinit();
dp_soc_unset_qref_debug_list(soc);
@@ -13534,11 +13547,18 @@ dp_soc_attach(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
goto fail2;
}
qdf_ssr_driver_dump_register_region("wlan_cfg_ctx", soc->wlan_cfg_ctx,
sizeof(*soc->wlan_cfg_ctx));
/*sync DP soc cfg items with profile support after cfg_soc_attach*/
wlan_dp_soc_cfg_sync_profile((struct cdp_soc_t *)soc);
soc->arch_ops.soc_cfg_attach(soc);
qdf_ssr_driver_dump_register_region("tcl_wbm_map_array",
&soc->wlan_cfg_ctx->tcl_wbm_map_array,
sizeof(struct wlan_cfg_tcl_wbm_ring_num_map));
if (dp_hw_link_desc_pool_banks_alloc(soc, WLAN_INVALID_PDEV_ID)) {
dp_err("failed to allocate link desc pool banks");
goto fail3;
@@ -13588,6 +13608,8 @@ dp_soc_attach(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
dp_soc_set_interrupt_mode(soc);
dp_soc_set_def_pdev(soc);
dp_soc_set_qref_debug_list(soc);
qdf_ssr_driver_dump_register_region("dp_soc", soc, sizeof(*soc));
qdf_nbuf_ssr_register_region();
dp_info("Mem stats: DMA = %u HEAP = %u SKB = %u",
qdf_dma_mem_stats_read(),
@@ -14621,3 +14643,59 @@ void dp_peer_multipass_list_init(struct dp_vdev *vdev)
qdf_spinlock_create(&vdev->mpass_peer_mutex);
}
#endif /* QCA_MULTIPASS_SUPPORT */
#ifdef WLAN_FEATURE_SSR_DRIVER_DUMP
#define MAX_STR_LEN 50
#define MAX_SRNG_STR_LEN 30
void dp_ssr_dump_srng_register(char *region_name, struct dp_srng *srng, int num)
{
char ring[MAX_SRNG_STR_LEN], ring_handle[MAX_STR_LEN];
if (num >= 0)
qdf_snprint(ring, MAX_SRNG_STR_LEN, "%s%s%d",
region_name, "_", num);
else
qdf_snprint(ring, MAX_SRNG_STR_LEN, "%s", region_name);
qdf_snprint(ring_handle, MAX_STR_LEN, "%s%s", ring, "_handle");
qdf_ssr_driver_dump_register_region(ring_handle, srng->hal_srng,
sizeof(struct hal_srng));
qdf_ssr_driver_dump_register_region(ring,
srng->base_vaddr_aligned,
srng->alloc_size);
}
void dp_ssr_dump_srng_unregister(char *region_name, int num)
{
char ring[MAX_SRNG_STR_LEN], ring_handle[MAX_STR_LEN];
if (num >= 0)
qdf_snprint(ring, MAX_SRNG_STR_LEN, "%s%s%d",
region_name, "_", num);
else
qdf_snprint(ring, MAX_SRNG_STR_LEN, "%s", region_name);
qdf_snprint(ring_handle, MAX_STR_LEN, "%s%s", ring, "_handle");
qdf_ssr_driver_dump_unregister_region(ring);
qdf_ssr_driver_dump_unregister_region(ring_handle);
}
void dp_ssr_dump_pdev_register(struct dp_pdev *pdev, uint8_t pdev_id)
{
char pdev_str[MAX_STR_LEN];
qdf_snprint(pdev_str, MAX_STR_LEN, "%s%s%d", "dp_pdev", "_", pdev_id);
qdf_ssr_driver_dump_register_region(pdev_str, pdev, sizeof(*pdev));
}
void dp_ssr_dump_pdev_unregister(uint8_t pdev_id)
{
char pdev_str[MAX_STR_LEN];
qdf_snprint(pdev_str, MAX_STR_LEN, "%s%s%d", "dp_pdev", "_", pdev_id);
qdf_ssr_driver_dump_unregister_region(pdev_str);
}
#endif

View File

@@ -56,6 +56,7 @@
#ifdef WIFI_MONITOR_SUPPORT
#include <dp_mon.h>
#endif
#include "qdf_ssr_driver_dump.h"
#ifdef WLAN_FEATURE_STATS_EXT
#define INIT_RX_HW_STATS_LOCK(_soc) \
@@ -2016,6 +2017,9 @@ static void dp_deinit_tx_pair_by_index(struct dp_soc *soc, int index)
return;
}
dp_ssr_dump_srng_unregister("tcl_data_ring", index);
dp_ssr_dump_srng_unregister("tx_comp_ring", index);
wlan_minidump_remove(soc->tcl_data_ring[index].base_vaddr_unaligned,
soc->tcl_data_ring[index].alloc_size,
soc->ctrl_psoc,
@@ -2088,6 +2092,11 @@ static QDF_STATUS dp_init_tx_ring_pair_by_index(struct dp_soc *soc,
goto fail1;
}
dp_ssr_dump_srng_register("tcl_data_ring",
&soc->tcl_data_ring[index], index);
dp_ssr_dump_srng_register("tx_comp_ring",
&soc->tx_comp_ring[index], index);
wlan_minidump_log(soc->tx_comp_ring[index].base_vaddr_unaligned,
soc->tx_comp_ring[index].alloc_size,
soc->ctrl_psoc,
@@ -3745,6 +3754,7 @@ void dp_soc_srng_deinit(struct dp_soc *soc)
soc->ctrl_psoc, WLAN_MD_DP_SRNG_WBM_DESC_REL,
"wbm_desc_rel_ring");
dp_srng_deinit(soc, &soc->wbm_desc_rel_ring, SW2WBM_RELEASE, 0);
dp_ssr_dump_srng_unregister("wbm_desc_rel_ring", -1);
/* Tx data rings */
for (i = 0; i < soc->num_tcl_data_rings; i++)
@@ -3763,6 +3773,7 @@ void dp_soc_srng_deinit(struct dp_soc *soc)
/* TODO: Get number of rings and ring sizes
* from wlan_cfg
*/
dp_ssr_dump_srng_unregister("reo_dest_ring", i);
wlan_minidump_remove(soc->reo_dest_ring[i].base_vaddr_unaligned,
soc->reo_dest_ring[i].alloc_size,
soc->ctrl_psoc, WLAN_MD_DP_SRNG_REO_DEST,
@@ -3770,6 +3781,7 @@ void dp_soc_srng_deinit(struct dp_soc *soc)
dp_srng_deinit(soc, &soc->reo_dest_ring[i], REO_DST, i);
}
dp_ssr_dump_srng_unregister("reo_reinject_ring", -1);
/* REO reinjection ring */
wlan_minidump_remove(soc->reo_reinject_ring.base_vaddr_unaligned,
soc->reo_reinject_ring.alloc_size,
@@ -3777,6 +3789,7 @@ void dp_soc_srng_deinit(struct dp_soc *soc)
"reo_reinject_ring");
dp_srng_deinit(soc, &soc->reo_reinject_ring, REO_REINJECT, 0);
dp_ssr_dump_srng_unregister("rx_rel_ring", -1);
/* Rx release ring */
wlan_minidump_remove(soc->rx_rel_ring.base_vaddr_unaligned,
soc->rx_rel_ring.alloc_size,
@@ -3788,6 +3801,7 @@ void dp_soc_srng_deinit(struct dp_soc *soc)
/* TODO: Better to store ring_type and ring_num in
* dp_srng during setup
*/
dp_ssr_dump_srng_unregister("reo_exception_ring", -1);
wlan_minidump_remove(soc->reo_exception_ring.base_vaddr_unaligned,
soc->reo_exception_ring.alloc_size,
soc->ctrl_psoc, WLAN_MD_DP_SRNG_REO_EXCEPTION,
@@ -3795,11 +3809,13 @@ void dp_soc_srng_deinit(struct dp_soc *soc)
dp_srng_deinit(soc, &soc->reo_exception_ring, REO_EXCEPTION, 0);
/* REO command and status rings */
dp_ssr_dump_srng_unregister("reo_cmd_ring", -1);
wlan_minidump_remove(soc->reo_cmd_ring.base_vaddr_unaligned,
soc->reo_cmd_ring.alloc_size,
soc->ctrl_psoc, WLAN_MD_DP_SRNG_REO_CMD,
"reo_cmd_ring");
dp_srng_deinit(soc, &soc->reo_cmd_ring, REO_CMD, 0);
dp_ssr_dump_srng_unregister("reo_status_ring", -1);
wlan_minidump_remove(soc->reo_status_ring.base_vaddr_unaligned,
soc->reo_status_ring.alloc_size,
soc->ctrl_psoc, WLAN_MD_DP_SRNG_REO_STATUS,
@@ -3829,6 +3845,8 @@ QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
dp_init_err("%pK: dp_srng_init failed for wbm_desc_rel_ring", soc);
goto fail1;
}
dp_ssr_dump_srng_register("wbm_desc_rel_ring",
&soc->wbm_desc_rel_ring, -1);
wlan_minidump_log(soc->wbm_desc_rel_ring.base_vaddr_unaligned,
soc->wbm_desc_rel_ring.alloc_size,
@@ -3852,6 +3870,8 @@ QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
dp_init_err("%pK: dp_srng_init failed for reo_reinject_ring", soc);
goto fail1;
}
dp_ssr_dump_srng_register("reo_reinject_ring",
&soc->reo_reinject_ring, -1);
wlan_minidump_log(soc->reo_reinject_ring.base_vaddr_unaligned,
soc->reo_reinject_ring.alloc_size,
@@ -3866,6 +3886,7 @@ QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
dp_init_err("%pK: dp_srng_init failed for rx_rel_ring", soc);
goto fail1;
}
dp_ssr_dump_srng_register("rx_rel_ring", &soc->rx_rel_ring, -1);
wlan_minidump_log(soc->rx_rel_ring.base_vaddr_unaligned,
soc->rx_rel_ring.alloc_size,
@@ -3879,6 +3900,8 @@ QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
dp_init_err("%pK: dp_srng_init failed - reo_exception", soc);
goto fail1;
}
dp_ssr_dump_srng_register("reo_exception_ring",
&soc->reo_exception_ring, -1);
wlan_minidump_log(soc->reo_exception_ring.base_vaddr_unaligned,
soc->reo_exception_ring.alloc_size,
@@ -3891,6 +3914,7 @@ QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
dp_init_err("%pK: dp_srng_init failed for reo_cmd_ring", soc);
goto fail1;
}
dp_ssr_dump_srng_register("reo_cmd_ring", &soc->reo_cmd_ring, -1);
wlan_minidump_log(soc->reo_cmd_ring.base_vaddr_unaligned,
soc->reo_cmd_ring.alloc_size,
@@ -3906,6 +3930,7 @@ QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
dp_init_err("%pK: dp_srng_init failed for reo_status_ring", soc);
goto fail1;
}
dp_ssr_dump_srng_register("reo_status_ring", &soc->reo_status_ring, -1);
wlan_minidump_log(soc->reo_status_ring.base_vaddr_unaligned,
soc->reo_status_ring.alloc_size,
@@ -3935,6 +3960,8 @@ QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
goto fail1;
}
dp_ssr_dump_srng_register("reo_dest_ring",
&soc->reo_dest_ring[i], i);
wlan_minidump_log(soc->reo_dest_ring[i].base_vaddr_unaligned,
soc->reo_dest_ring[i].alloc_size,
soc->ctrl_psoc,