qcacmn: handle ppeds init/deinit

based on ppeds_handle allocate and free the
ppeds resources.

Change-Id: I70fc4bfa879fcd62c0e8a80c5b57938a2063bccc
CRs-Fixed: 3462725
This commit is contained in:
Nitin Shetty
2023-04-10 13:04:06 +05:30
committed by Madan Koyyalamudi
parent c7c3c49381
commit 7045ccc728
8 changed files with 46 additions and 28 deletions

View File

@@ -1434,7 +1434,6 @@ enum cdp_pdev_param_type {
* *
* @cdp_psoc_param_en_rate_stats: set rate stats enable/disable * @cdp_psoc_param_en_rate_stats: set rate stats enable/disable
* @cdp_psoc_param_en_nss_cfg: set nss cfg * @cdp_psoc_param_en_nss_cfg: set nss cfg
* @cdp_psoc_param_ppeds_enabled: PPE-DS feature enable
* @cdp_ipa_enabled : set ipa mode * @cdp_ipa_enabled : set ipa mode
* @cdp_psoc_param_vdev_stats_hw_offload: Configure HW vdev stats offload * @cdp_psoc_param_vdev_stats_hw_offload: Configure HW vdev stats offload
* @cdp_pdev_param_undecoded_metadata_enable: Undecoded metadata capture enable * @cdp_pdev_param_undecoded_metadata_enable: Undecoded metadata capture enable
@@ -1522,7 +1521,6 @@ typedef union cdp_config_param_t {
int cdp_psoc_param_en_nss_cfg; int cdp_psoc_param_en_nss_cfg;
int cdp_psoc_param_preferred_hw_mode; int cdp_psoc_param_preferred_hw_mode;
bool cdp_psoc_param_pext_stats; bool cdp_psoc_param_pext_stats;
bool cdp_psoc_param_ppeds_enabled;
bool cdp_skip_bar_update; bool cdp_skip_bar_update;
bool cdp_ipa_enabled; bool cdp_ipa_enabled;
@@ -1688,7 +1686,6 @@ enum cdp_vdev_param_type {
* @CDP_CFG_VDEV_STATS_HW_OFFLOAD: HW Vdev stats config * @CDP_CFG_VDEV_STATS_HW_OFFLOAD: HW Vdev stats config
* @CDP_SAWF_ENABLE: * @CDP_SAWF_ENABLE:
* @CDP_UMAC_RST_SKEL_ENABLE: Enable Umac reset skeleton code for debug * @CDP_UMAC_RST_SKEL_ENABLE: Enable Umac reset skeleton code for debug
* @CDP_PPEDS_ENABLE: PPEDS is enabled or not
* @CDP_SAWF_STATS: set SAWF stats config * @CDP_SAWF_STATS: set SAWF stats config
* @CDP_UMAC_RESET_STATS: UMAC reset stats * @CDP_UMAC_RESET_STATS: UMAC reset stats
*/ */
@@ -1701,7 +1698,6 @@ enum cdp_psoc_param_type {
CDP_CFG_VDEV_STATS_HW_OFFLOAD, CDP_CFG_VDEV_STATS_HW_OFFLOAD,
CDP_SAWF_ENABLE, CDP_SAWF_ENABLE,
CDP_UMAC_RST_SKEL_ENABLE, CDP_UMAC_RST_SKEL_ENABLE,
CDP_PPEDS_ENABLE,
CDP_SAWF_STATS, CDP_SAWF_STATS,
CDP_UMAC_RESET_STATS, CDP_UMAC_RESET_STATS,
}; };

View File

@@ -125,6 +125,21 @@ void cdp_ppesds_entry_detach(struct cdp_soc_t *soc, uint8_t vdev_id,
vp_params); vp_params);
} }
/**
* cdp_ppeds_attached() - Check whether ppeds attached
* @soc: data path soc handle
*
* return: true for ppeds attached otherwise false.
*/
static inline
QDF_STATUS cdp_ppeds_attached(struct cdp_soc_t *soc)
{
if (!soc || !soc->ops || !soc->ops->ppeds_ops)
return false;
return true;
}
/** /**
* cdp_ppesds_set_int_pri2tid() - Set the INT_PRI to TID * cdp_ppesds_set_int_pri2tid() - Set the INT_PRI to TID
* @soc: data path soc handle * @soc: data path soc handle

View File

@@ -507,12 +507,14 @@ dp_hw_cookie_conversion_deinit(struct dp_soc_be *be_soc,
static QDF_STATUS dp_soc_ppeds_attach_be(struct dp_soc *soc) static QDF_STATUS dp_soc_ppeds_attach_be(struct dp_soc *soc)
{ {
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
int target_type = hal_get_target_type(soc->hal_soc);
struct cdp_ops *cdp_ops = soc->cdp_soc.ops; struct cdp_ops *cdp_ops = soc->cdp_soc.ops;
/* /*
* Check if PPE DS is enabled. * Check if PPE DS is enabled and wlan soc supports it.
*/ */
if (!wlan_cfg_get_dp_soc_is_ppeds_enabled(soc->wlan_cfg_ctx)) if (!wlan_cfg_get_dp_soc_ppeds_enable(soc->wlan_cfg_ctx) ||
!dp_ppeds_target_supported(target_type))
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
if (dp_ppeds_attach_soc_be(be_soc) != QDF_STATUS_SUCCESS) if (dp_ppeds_attach_soc_be(be_soc) != QDF_STATUS_SUCCESS)
@@ -528,7 +530,7 @@ static QDF_STATUS dp_soc_ppeds_detach_be(struct dp_soc *soc)
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc); struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct cdp_ops *cdp_ops = soc->cdp_soc.ops; struct cdp_ops *cdp_ops = soc->cdp_soc.ops;
if (!wlan_cfg_get_dp_soc_is_ppeds_enabled(soc->wlan_cfg_ctx)) if (!be_soc->ppeds_handle)
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
dp_ppeds_detach_soc_be(be_soc); dp_ppeds_detach_soc_be(be_soc);
@@ -1751,7 +1753,7 @@ static void dp_soc_ppeds_srng_deinit(struct dp_soc *soc)
soc_cfg_ctx = soc->wlan_cfg_ctx; soc_cfg_ctx = soc->wlan_cfg_ctx;
if (!wlan_cfg_get_dp_soc_is_ppeds_enabled(soc_cfg_ctx)) if (!be_soc->ppeds_handle)
return; return;
dp_srng_deinit(soc, &be_soc->ppe2tcl_ring, PPE2TCL, 0); dp_srng_deinit(soc, &be_soc->ppe2tcl_ring, PPE2TCL, 0);
@@ -1785,9 +1787,6 @@ static void dp_soc_ppeds_srng_free(struct dp_soc *soc)
soc_cfg_ctx = soc->wlan_cfg_ctx; soc_cfg_ctx = soc->wlan_cfg_ctx;
if (!wlan_cfg_get_dp_soc_is_ppeds_enabled(soc_cfg_ctx))
return;
dp_srng_free(soc, &be_soc->ppeds_wbm_release_ring); dp_srng_free(soc, &be_soc->ppeds_wbm_release_ring);
dp_srng_free(soc, &be_soc->ppe2tcl_ring); dp_srng_free(soc, &be_soc->ppe2tcl_ring);
@@ -1803,7 +1802,7 @@ static QDF_STATUS dp_soc_ppeds_srng_alloc(struct dp_soc *soc)
soc_cfg_ctx = soc->wlan_cfg_ctx; soc_cfg_ctx = soc->wlan_cfg_ctx;
if (!wlan_cfg_get_dp_soc_is_ppeds_enabled(soc_cfg_ctx)) if (!be_soc->ppeds_handle)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
entries = wlan_cfg_get_dp_soc_reo2ppe_ring_size(soc_cfg_ctx); entries = wlan_cfg_get_dp_soc_reo2ppe_ring_size(soc_cfg_ctx);
@@ -1845,7 +1844,7 @@ static QDF_STATUS dp_soc_ppeds_srng_init(struct dp_soc *soc)
soc_cfg_ctx = soc->wlan_cfg_ctx; soc_cfg_ctx = soc->wlan_cfg_ctx;
if (!wlan_cfg_get_dp_soc_is_ppeds_enabled(soc_cfg_ctx)) if (!be_soc->ppeds_handle)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
if (dp_ppeds_register_soc_be(be_soc, &idx)) { if (dp_ppeds_register_soc_be(be_soc, &idx)) {
@@ -2857,6 +2856,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
#endif #endif
#ifdef WLAN_SUPPORT_PPEDS #ifdef WLAN_SUPPORT_PPEDS
arch_ops->ppeds_handle_attached = dp_ppeds_handle_attached;
arch_ops->dp_txrx_ppeds_rings_status = dp_ppeds_rings_status; arch_ops->dp_txrx_ppeds_rings_status = dp_ppeds_rings_status;
arch_ops->txrx_soc_ppeds_start = dp_ppeds_start_soc_be; arch_ops->txrx_soc_ppeds_start = dp_ppeds_start_soc_be;
arch_ops->txrx_soc_ppeds_stop = dp_ppeds_stop_soc_be; arch_ops->txrx_soc_ppeds_stop = dp_ppeds_stop_soc_be;

View File

@@ -7441,10 +7441,6 @@ static QDF_STATUS dp_get_psoc_param(struct cdp_soc_t *cdp_soc,
case CDP_UMAC_RST_SKEL_ENABLE: case CDP_UMAC_RST_SKEL_ENABLE:
val->cdp_umac_rst_skel = dp_umac_rst_skel_enable_get(soc); val->cdp_umac_rst_skel = dp_umac_rst_skel_enable_get(soc);
break; break;
case CDP_PPEDS_ENABLE:
val->cdp_psoc_param_ppeds_enabled =
wlan_cfg_get_dp_soc_is_ppeds_enabled(soc->wlan_cfg_ctx);
break;
default: default:
dp_warn("Invalid param"); dp_warn("Invalid param");
break; break;

View File

@@ -4384,6 +4384,7 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
bool is_monitor_mode = false; bool is_monitor_mode = false;
uint8_t i; uint8_t i;
int num_dp_msi; int num_dp_msi;
bool ppeds_attached = false;
htt_soc = htt_soc_attach(soc, htc_handle); htt_soc = htt_soc_attach(soc, htc_handle);
if (!htt_soc) if (!htt_soc)
@@ -4422,8 +4423,12 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
goto fail3; goto fail3;
} }
if (soc->arch_ops.ppeds_handle_attached)
ppeds_attached = soc->arch_ops.ppeds_handle_attached(soc);
wlan_cfg_fill_interrupt_mask(soc->wlan_cfg_ctx, num_dp_msi, wlan_cfg_fill_interrupt_mask(soc->wlan_cfg_ctx, num_dp_msi,
soc->intr_mode, is_monitor_mode); soc->intr_mode, is_monitor_mode,
ppeds_attached);
/* initialize WBM_IDLE_LINK ring */ /* initialize WBM_IDLE_LINK ring */
if (dp_hw_link_desc_ring_init(soc)) { if (dp_hw_link_desc_ring_init(soc)) {

View File

@@ -2231,6 +2231,7 @@ enum dp_context_type {
* @dp_tx_desc_pool_alloc: Allocate arch specific TX descriptor pool * @dp_tx_desc_pool_alloc: Allocate arch specific TX descriptor pool
* @dp_tx_desc_pool_free: Free arch specific TX descriptor pool * @dp_tx_desc_pool_free: Free arch specific TX descriptor pool
* @txrx_srng_init: Init txrx srng * @txrx_srng_init: Init txrx srng
* @ppeds_handle_attached:
* @txrx_soc_ppeds_interrupt_stop: * @txrx_soc_ppeds_interrupt_stop:
* @txrx_soc_ppeds_interrupt_start: * @txrx_soc_ppeds_interrupt_start:
* @txrx_soc_ppeds_service_status_update: * @txrx_soc_ppeds_service_status_update:
@@ -2446,6 +2447,7 @@ struct dp_arch_ops {
struct dp_vdev *vdev, struct dp_vdev *vdev,
bool peer_map); bool peer_map);
#endif #endif
bool (*ppeds_handle_attached)(struct dp_soc *soc);
QDF_STATUS (*txrx_soc_ppeds_start)(struct dp_soc *soc); QDF_STATUS (*txrx_soc_ppeds_start)(struct dp_soc *soc);
void (*txrx_soc_ppeds_stop)(struct dp_soc *soc); void (*txrx_soc_ppeds_stop)(struct dp_soc *soc);
int (*dp_register_ppeds_interrupts)(struct dp_soc *soc, int (*dp_register_ppeds_interrupts)(struct dp_soc *soc,

View File

@@ -3313,7 +3313,8 @@ static const uint8_t rx_fst_toeplitz_key[WLAN_CFG_RX_FST_TOEPLITZ_KEYLEN] = {
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
int num_dp_msi, int num_dp_msi,
int interrupt_mode, int interrupt_mode,
bool is_monitor_mode) bool is_monitor_mode,
bool ppeds_attached)
{ int i = 0; { int i = 0;
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) { for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
@@ -3343,7 +3344,8 @@ void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
int num_dp_msi, int num_dp_msi,
int interrupt_mode, int interrupt_mode,
bool is_monitor_mode) bool is_monitor_mode,
bool ppeds_attached)
{ int i = 0; { int i = 0;
const uint8_t *tx_ring_intr_mask = const uint8_t *tx_ring_intr_mask =
wlan_cfg_get_tx_ring_int_mask(wlan_cfg_ctx); wlan_cfg_get_tx_ring_int_mask(wlan_cfg_ctx);
@@ -3466,7 +3468,8 @@ wlan_cfg_mask_assignment(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
int num_dp_msi, int num_dp_msi,
int interrupt_mode, int interrupt_mode,
bool is_monitor_mode) bool is_monitor_mode,
bool ppeds_attached)
{ {
int i = 0; int i = 0;
int interrupt_index = 0; int interrupt_index = 0;
@@ -3482,7 +3485,7 @@ void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
} }
for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) { for (i = 0; i < WLAN_CFG_INT_NUM_CONTEXTS; i++) {
if (!wlan_cfg_get_dp_soc_is_ppeds_enabled(wlan_cfg_ctx)) if (!ppeds_attached)
mask_assignment = &dp_mask_assignment[interrupt_index]; mask_assignment = &dp_mask_assignment[interrupt_index];
else if (interrupt_index == 8) else if (interrupt_index == 8)
mask_assignment = &dp_ds_mask_assignment_8msi; mask_assignment = &dp_ds_mask_assignment_8msi;
@@ -5380,7 +5383,7 @@ int wlan_cfg_ipa_tx_alt_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)
#ifdef WLAN_SUPPORT_PPEDS #ifdef WLAN_SUPPORT_PPEDS
bool bool
wlan_cfg_get_dp_soc_is_ppeds_enabled(struct wlan_cfg_dp_soc_ctxt *cfg) wlan_cfg_get_dp_soc_ppeds_enable(struct wlan_cfg_dp_soc_ctxt *cfg)
{ {
return cfg->ppeds_enable; return cfg->ppeds_enable;
} }

View File

@@ -1868,12 +1868,13 @@ wlan_cfg_is_tx_per_pkt_vdev_id_check_enabled(struct wlan_cfg_dp_soc_ctxt *cfg);
* @num_dp_msi: Number of DP interrupts available (0 for integrated) * @num_dp_msi: Number of DP interrupts available (0 for integrated)
* @interrupt_mode: Type of interrupt * @interrupt_mode: Type of interrupt
* @is_monitor_mode: is monitor mode enabled * @is_monitor_mode: is monitor mode enabled
* @ppeds_attached: is ppeds attached
* *
* Return: void * Return: void
*/ */
void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx,
int num_dp_msi, int interrupt_mode, int num_dp_msi, int interrupt_mode,
bool is_monitor_mode); bool is_monitor_mode, bool ppeds_attached);
/** /**
* wlan_cfg_is_rx_fisa_enabled() - Get Rx FISA enabled flag * wlan_cfg_is_rx_fisa_enabled() - Get Rx FISA enabled flag
@@ -2143,13 +2144,13 @@ void wlan_cfg_dp_soc_ctx_dump(struct wlan_cfg_dp_soc_ctxt *cfg);
#ifdef WLAN_SUPPORT_PPEDS #ifdef WLAN_SUPPORT_PPEDS
/** /**
* wlan_cfg_get_dp_soc_is_ppeds_enabled() - API to get ppe enable flag * wlan_cfg_get_dp_soc_ppeds_enable() - API to get ppe enable flag
* @cfg: Configuration Handle * @cfg: Configuration Handle
* *
* Return: true if ppe is enabled else return false * Return: true if ppeds support is enabled else return false
*/ */
bool bool
wlan_cfg_get_dp_soc_is_ppeds_enabled(struct wlan_cfg_dp_soc_ctxt *cfg); wlan_cfg_get_dp_soc_ppeds_enable(struct wlan_cfg_dp_soc_ctxt *cfg);
/** /**
* wlan_cfg_get_dp_soc_reo2ppe_ring_size() - get ppe rx ring size * wlan_cfg_get_dp_soc_reo2ppe_ring_size() - get ppe rx ring size
@@ -2196,7 +2197,7 @@ int
wlan_cfg_get_dp_soc_ppeds_tx_comp_napi_budget(struct wlan_cfg_dp_soc_ctxt *cfg); wlan_cfg_get_dp_soc_ppeds_tx_comp_napi_budget(struct wlan_cfg_dp_soc_ctxt *cfg);
#else #else
static inline bool static inline bool
wlan_cfg_get_dp_soc_is_ppeds_enabled(struct wlan_cfg_dp_soc_ctxt *cfg) wlan_cfg_get_dp_soc_ppeds_enable(struct wlan_cfg_dp_soc_ctxt *cfg)
{ {
return false; return false;
} }