From 14d9d6d6972b1c0a3388f21f07d655a093c002d6 Mon Sep 17 00:00:00 2001 From: chunquan Date: Wed, 21 Jul 2021 18:51:42 +0800 Subject: [PATCH] qcacmn: Support configure IPA tx alt ring and tx ring separately Add support configure ipa tx ring and tx completion ring for 2.4G and/or 5G separately. Change-Id: Iafb8fa589ff0cce15609a3dfa2209364291d7cef CRs-Fixed: 2996604 --- dp/wifi3.0/dp_main.c | 11 ++++--- wlan_cfg/cfg_dp.h | 73 +++++++++++++++++++++++++++++++++++++++++++- wlan_cfg/wlan_cfg.c | 49 ++++++++++++++++++++++++++++- wlan_cfg/wlan_cfg.h | 27 +++++++++++++++- 4 files changed, 153 insertions(+), 7 deletions(-) diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 76a8086d0b..382dc9fefc 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -3972,9 +3972,10 @@ static bool dp_ipa_is_alt_tx_comp_ring(int index) static void dp_ipa_get_tx_ring_size(int tx_ring_num, int *tx_ipa_ring_sz, struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx) { - if (tx_ring_num == IPA_TCL_DATA_RING_IDX || - dp_ipa_is_alt_tx_ring(tx_ring_num)) + if (tx_ring_num == IPA_TCL_DATA_RING_IDX) *tx_ipa_ring_sz = wlan_cfg_ipa_tx_ring_size(soc_cfg_ctx); + else if (dp_ipa_is_alt_tx_ring(tx_ring_num)) + *tx_ipa_ring_sz = wlan_cfg_ipa_tx_alt_ring_size(soc_cfg_ctx); } /** @@ -3990,10 +3991,12 @@ static void dp_ipa_get_tx_comp_ring_size(int tx_comp_ring_num, int *tx_comp_ipa_ring_sz, struct wlan_cfg_dp_soc_ctxt *soc_cfg_ctx) { - if (tx_comp_ring_num == IPA_TCL_DATA_RING_IDX || - dp_ipa_is_alt_tx_comp_ring(tx_comp_ring_num)) + if (tx_comp_ring_num == IPA_TCL_DATA_RING_IDX) *tx_comp_ipa_ring_sz = wlan_cfg_ipa_tx_comp_ring_size(soc_cfg_ctx); + else if (dp_ipa_is_alt_tx_comp_ring(tx_comp_ring_num)) + *tx_comp_ipa_ring_sz = + wlan_cfg_ipa_tx_alt_comp_ring_size(soc_cfg_ctx); } #else static uint8_t dp_reo_ring_selection(uint32_t value, uint32_t *ring) diff --git a/wlan_cfg/cfg_dp.h b/wlan_cfg/cfg_dp.h index 7b0943b14b..7819547c25 100644 --- a/wlan_cfg/cfg_dp.h +++ b/wlan_cfg/cfg_dp.h @@ -72,6 +72,16 @@ #define WLAN_CFG_IPA_TX_COMP_RING_SIZE 1024 #define WLAN_CFG_IPA_TX_COMP_RING_SIZE_MAX 8096 +#ifdef IPA_WDI3_TX_TWO_PIPES +#define WLAN_CFG_IPA_TX_ALT_RING_SIZE_MIN 1024 +#define WLAN_CFG_IPA_TX_ALT_RING_SIZE 1024 +#define WLAN_CFG_IPA_TX_ALT_RING_SIZE_MAX 8096 + +#define WLAN_CFG_IPA_TX_ALT_COMP_RING_SIZE_MIN 1024 +#define WLAN_CFG_IPA_TX_ALT_COMP_RING_SIZE 1024 +#define WLAN_CFG_IPA_TX_ALT_COMP_RING_SIZE_MAX 8096 +#endif + #define WLAN_CFG_PER_PDEV_TX_RING 0 #define WLAN_CFG_IPA_UC_TX_BUF_SIZE 2048 #define WLAN_CFG_IPA_UC_TX_PARTITION_BASE 3000 @@ -1211,11 +1221,71 @@ WLAN_CFG_IPA_TX_COMP_RING_SIZE, \ CFG_VALUE_OR_DEFAULT, "IPA tx comp ring size") +#ifdef IPA_WDI3_TX_TWO_PIPES +/* + * + * dp_ipa_tx_alt_ring_size - Set alt tcl ring size for IPA + * @Min: 1024 + * @Max: 8096 + * @Default: 1024 + * + * This ini sets the alt tcl ring size for IPA + * + * Related: N/A + * + * Supported Feature: IPA + * + * Usage: Internal + * + * + */ +#define CFG_DP_IPA_TX_ALT_RING_SIZE \ + CFG_INI_UINT("dp_ipa_tx_alt_ring_size", \ + WLAN_CFG_IPA_TX_ALT_RING_SIZE_MIN, \ + WLAN_CFG_IPA_TX_ALT_RING_SIZE_MAX, \ + WLAN_CFG_IPA_TX_ALT_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, \ + "DP IPA TX Alternative Ring Size") + +/* + * + * dp_ipa_tx_alt_comp_ring_size - Set tx alt comp ring size for IPA + * @Min: 1024 + * @Max: 8096 + * @Default: 1024 + * + * This ini sets the tx alt comp ring size for IPA + * + * Related: N/A + * + * Supported Feature: IPA + * + * Usage: Internal + * + * + */ +#define CFG_DP_IPA_TX_ALT_COMP_RING_SIZE \ + CFG_INI_UINT("dp_ipa_tx_alt_comp_ring_size", \ + WLAN_CFG_IPA_TX_ALT_COMP_RING_SIZE_MIN, \ + WLAN_CFG_IPA_TX_ALT_COMP_RING_SIZE_MAX, \ + WLAN_CFG_IPA_TX_ALT_COMP_RING_SIZE, \ + CFG_VALUE_OR_DEFAULT, \ + "DP IPA TX Alternative Completion Ring Size") + +#define CFG_DP_IPA_TX_ALT_RING_CFG \ + CFG(CFG_DP_IPA_TX_ALT_RING_SIZE) \ + CFG(CFG_DP_IPA_TX_ALT_COMP_RING_SIZE) + +#else +#define CFG_DP_IPA_TX_ALT_RING_CFG +#endif + #define CFG_DP_IPA_TX_RING_CFG \ CFG(CFG_DP_IPA_TX_RING_SIZE) \ CFG(CFG_DP_IPA_TX_COMP_RING_SIZE) #else #define CFG_DP_IPA_TX_RING_CFG +#define CFG_DP_IPA_TX_ALT_RING_CFG #endif #ifdef WLAN_SUPPORT_PPEDS @@ -1350,5 +1420,6 @@ CFG(CFG_FORCE_RX_64_BA) \ CFG(CFG_DP_DELAY_MON_REPLENISH) \ CFG_DP_IPA_TX_RING_CFG \ - CFG_DP_PPE_CONFIG + CFG_DP_PPE_CONFIG \ + CFG_DP_IPA_TX_ALT_RING_CFG #endif /* _CFG_DP_H_ */ diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index bb1a2ae9e4..07fed2dc77 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -985,6 +985,29 @@ void wlan_cfg_fill_interrupt_mask(struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx, #endif #ifdef IPA_OFFLOAD +#ifdef IPA_WDI3_TX_TWO_PIPES +/** + * wlan_soc_ipa_cfg_attach() - Update ipa tx and tx alt config + * in dp soc cfg context + * @psoc: Object manager psoc + * @wlan_cfg_ctx: dp soc cfg ctx + * + * Return: None + */ +static void +wlan_soc_ipa_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc, + struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx) +{ + wlan_cfg_ctx->ipa_tx_ring_size = + cfg_get(psoc, CFG_DP_IPA_TX_RING_SIZE); + wlan_cfg_ctx->ipa_tx_comp_ring_size = + cfg_get(psoc, CFG_DP_IPA_TX_COMP_RING_SIZE); + wlan_cfg_ctx->ipa_tx_alt_ring_size = + cfg_get(psoc, CFG_DP_IPA_TX_ALT_RING_SIZE); + wlan_cfg_ctx->ipa_tx_alt_comp_ring_size = + cfg_get(psoc, CFG_DP_IPA_TX_ALT_COMP_RING_SIZE); +} +#else /* !IPA_WDI3_TX_TWO_PIPES */ /** * wlan_soc_ipa_cfg_attach() - Update ipa config in dp soc * cfg context @@ -1002,7 +1025,8 @@ wlan_soc_ipa_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc, wlan_cfg_ctx->ipa_tx_comp_ring_size = cfg_get(psoc, CFG_DP_IPA_TX_COMP_RING_SIZE); } -#else +#endif /* IPA_WDI3_TX_TWO_PIPES */ +#else /* !IPA_OFFLOAD */ static inline void wlan_soc_ipa_cfg_attach(struct cdp_ctrl_objmgr_psoc *psoc, struct wlan_cfg_dp_soc_ctxt *wlan_cfg_ctx) @@ -2199,6 +2223,29 @@ uint32_t wlan_cfg_ipa_tx_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) { return cfg->ipa_tx_comp_ring_size; } + +#ifdef IPA_WDI3_TX_TWO_PIPES +int wlan_cfg_ipa_tx_alt_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->ipa_tx_alt_ring_size; +} + +int wlan_cfg_ipa_tx_alt_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->ipa_tx_alt_comp_ring_size; +} + +#else +int wlan_cfg_ipa_tx_alt_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->ipa_tx_ring_size; +} + +int wlan_cfg_ipa_tx_alt_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg) +{ + return cfg->ipa_tx_comp_ring_size; +} +#endif #endif #ifdef WLAN_SUPPORT_PPEDS diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index 2f1d815404..fe4adba438 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -222,6 +222,8 @@ struct wlan_srng_cfg { * @wow_check_rx_pending_enable: Enable RX frame pending check in WoW * @ipa_tx_ring_size: IPA tx ring size * @ipa_tx_comp_ring_size: IPA tx completion ring size + * @ipa_tx_alt_ring_size: IPA tx alt ring size + * @ipa_tx_alt_comp_ring_size: IPA tx alt completion ring size * @hw_cc_conv_enabled: cookie conversion enabled * @tcl_wbm_map_array: TCL-WBM map array */ @@ -351,7 +353,11 @@ struct wlan_cfg_dp_soc_ctxt { #ifdef IPA_OFFLOAD uint32_t ipa_tx_ring_size; uint32_t ipa_tx_comp_ring_size; -#endif +#ifdef IPA_WDI3_TX_TWO_PIPES + int ipa_tx_alt_ring_size; + int ipa_tx_alt_comp_ring_size; +#endif /* IPA_WDI3_TX_TWO_PIPES */ +#endif /* IPA_OFFLOAD */ bool hw_cc_enabled; struct wlan_cfg_tcl_wbm_ring_num_map *tcl_wbm_map_array; #ifdef WLAN_SUPPORT_PPEDS @@ -1692,6 +1698,25 @@ uint32_t wlan_cfg_ipa_tx_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); * Return: IPA Tx Completion ring size */ uint32_t wlan_cfg_ipa_tx_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_ipa_tx_alt_ring_size - Get Tx alt DMA ring size (TCL Data Ring) + * @wlan_cfg_soc_ctx: dp cfg context + * + * Return: IPA Tx alt Ring Size + */ +int wlan_cfg_ipa_tx_alt_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + +/* + * wlan_cfg_ipa_tx_alt_comp_ring_size - Get Tx alt comp DMA ring size + * (TCL Data Ring) + * @wlan_cfg_soc_ctx: dp cfg context + * + * Return: IPA Tx alt comp Ring Size + */ +int +wlan_cfg_ipa_tx_alt_comp_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg); + #else static inline uint32_t wlan_cfg_ipa_tx_ring_size(struct wlan_cfg_dp_soc_ctxt *cfg)