qcacmn: Add DP rings to SSR dump
Add DP rings to SSR dump Change-Id: If1d1fe0a66a0f836bd5344b14ba4187e58921568 CRs-Fixed: 3604903
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -5550,4 +5550,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_ */
|
||||
|
@@ -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);
|
||||
@@ -13529,11 +13542,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;
|
||||
@@ -13583,6 +13603,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(),
|
||||
@@ -14593,3 +14615,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
|
||||
|
@@ -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,
|
||||
@@ -3736,6 +3745,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++)
|
||||
@@ -3754,6 +3764,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,
|
||||
@@ -3761,6 +3772,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,
|
||||
@@ -3768,6 +3780,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,
|
||||
@@ -3779,6 +3792,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,
|
||||
@@ -3786,11 +3800,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,
|
||||
@@ -3820,6 +3836,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,
|
||||
@@ -3843,6 +3861,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,
|
||||
@@ -3857,6 +3877,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,
|
||||
@@ -3870,6 +3891,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,
|
||||
@@ -3882,6 +3905,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,
|
||||
@@ -3897,6 +3921,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,
|
||||
@@ -3926,6 +3951,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,
|
||||
|
Reference in New Issue
Block a user