From ca927cfcd705a0ce8b0eb1891937884dc43f0a1a Mon Sep 17 00:00:00 2001 From: Abdul Muqtadeer Ahmed Date: Mon, 10 Aug 2020 22:26:25 +0530 Subject: [PATCH] qcacld-3.0: Add INI param to enable/disable ILP HW block ILP is a new hardware block which is used for PCIe powersave but this can effect the throughput. So to isolate the throughput issues, add ini param to enable/disable this ILP hardware block using the ini configuration. Change-Id: I19825af8598bbc2623542256e873367c2f3d29bd CRs-Fixed: 2756587 --- .../core/inc/wlan_fw_offload_main.h | 12 ++++++++ .../core/src/wlan_fw_offload_main.c | 17 +++++++++++ .../dispatcher/inc/cfg_fwol_generic.h | 24 +++++++++++++++- .../dispatcher/src/wlan_fwol_ucfg_api.c | 28 ++++++++++++++++++- 4 files changed, 79 insertions(+), 2 deletions(-) diff --git a/components/fw_offload/core/inc/wlan_fw_offload_main.h b/components/fw_offload/core/inc/wlan_fw_offload_main.h index 7e83d99f6560..736780faa70f 100644 --- a/components/fw_offload/core/inc/wlan_fw_offload_main.h +++ b/components/fw_offload/core/inc/wlan_fw_offload_main.h @@ -205,6 +205,7 @@ struct wlan_fwol_neighbor_report_cfg { * @dhcp_max_num_clients: Max number of DHCP client supported * @dwelltime_params: adaptive dwell time parameters * @ocl_cfg: OCL mode configuration + * @enable_ilp: ILP HW block configuration */ struct wlan_fwol_cfg { /* Add CFG and INI items here */ @@ -256,6 +257,7 @@ struct wlan_fwol_cfg { #endif struct adaptive_dwelltime_params dwelltime_params; uint32_t ocl_cfg; + bool enable_ilp; }; /** @@ -367,4 +369,14 @@ fwol_init_adapt_dwelltime_in_cfg( QDF_STATUS fwol_set_adaptive_dwelltime_config( struct adaptive_dwelltime_params *dwelltime_params); + +/** + * fwol_set_ilp_config() - API to set ILP HW block config + * @pdev: pointer to the pdev object + * @enable_ilp: enable/disable config for ILP + * + * Return: QDF_STATUS + */ +QDF_STATUS fwol_set_ilp_config(struct wlan_objmgr_pdev *pdev, + bool enable_ilp); #endif diff --git a/components/fw_offload/core/src/wlan_fw_offload_main.c b/components/fw_offload/core/src/wlan_fw_offload_main.c index 8bacbed78e1a..98da23d285fc 100644 --- a/components/fw_offload/core/src/wlan_fw_offload_main.c +++ b/components/fw_offload/core/src/wlan_fw_offload_main.c @@ -22,6 +22,7 @@ #include "wlan_fw_offload_main.h" #include "cds_api.h" #include "wma.h" +#include "wlan_fwol_tgt_api.h" struct wlan_fwol_psoc_obj *fwol_get_psoc_obj(struct wlan_objmgr_psoc *psoc) { @@ -541,6 +542,7 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) ucfg_fwol_fetch_dhcp_server_settings(psoc, fwol_cfg); fwol_cfg->sap_xlna_bypass = cfg_get(psoc, CFG_SET_SAP_XLNA_BYPASS); fwol_cfg->ocl_cfg = cfg_get(psoc, CFG_SET_OCL_CFG); + fwol_cfg->enable_ilp = cfg_get(psoc, CFG_SET_ENABLE_ILP); return status; } @@ -644,3 +646,18 @@ void fwol_release_rx_event(struct wlan_fwol_rx_event *event) wlan_objmgr_psoc_release_ref(event->psoc, WLAN_FWOL_SB_ID); qdf_mem_free(event); } + +QDF_STATUS fwol_set_ilp_config(struct wlan_objmgr_pdev *pdev, bool enable_ilp) +{ + QDF_STATUS status; + struct pdev_params pdev_param; + + pdev_param.param_id = WMI_PDEV_PARAM_PCIE_HW_ILP; + pdev_param.param_value = enable_ilp; + + status = tgt_fwol_pdev_param_send(pdev, pdev_param); + if (QDF_IS_STATUS_ERROR(status)) + fwol_err("WMI_PDEV_PARAM_PCIE_HW_ILP failed %d", status); + + return status; +} diff --git a/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h b/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h index a69a3f33ea6e..8146fbdcbe82 100644 --- a/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h +++ b/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h @@ -758,6 +758,27 @@ CFG_VALUE_OR_DEFAULT, \ "OCL configuration") +/* + * + * g_enable_ilp - Enable/Disable ILP HW Block + * @Default: 1 + * + * This ini is used to enable/disable the ILP HW block + * + * Related: none + * + * Supported Feature: STA/SAP + * + * Usage: Internal + * + * + */ + +#define CFG_SET_ENABLE_ILP CFG_INI_BOOL( \ + "g_enable_ilp", \ + 1, \ + "ILP configuration") + #define CFG_FWOL_GENERIC_ALL \ CFG_FWOL_DHCP \ CFG(CFG_ENABLE_ANI) \ @@ -785,6 +806,7 @@ CFG(CFG_TX_SCH_DELAY) \ CFG(CFG_ENABLE_SECONDARY_RATE) \ CFG(CFG_SET_SAP_XLNA_BYPASS) \ - CFG(CFG_SET_OCL_CFG) + CFG(CFG_SET_OCL_CFG) \ + CFG(CFG_SET_ENABLE_ILP) #endif diff --git a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c index dda6cbc5867c..71528c4bd079 100644 --- a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c +++ b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c @@ -287,6 +287,21 @@ QDF_STATUS ucfg_fwol_get_ani_enabled(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +static QDF_STATUS ucfg_fwol_get_ilp_config(struct wlan_objmgr_psoc *psoc, + bool *enable_ilp) +{ + struct wlan_fwol_psoc_obj *fwol_obj; + + fwol_obj = fwol_get_psoc_obj(psoc); + if (!fwol_obj) { + fwol_err("Failed to get FWOL obj"); + return QDF_STATUS_E_FAILURE; + } + + *enable_ilp = fwol_obj->cfg.enable_ilp; + return QDF_STATUS_SUCCESS; +} + QDF_STATUS ucfg_get_enable_rts_sifsbursting(struct wlan_objmgr_psoc *psoc, bool *enable_rts_sifsbursting) { @@ -962,7 +977,18 @@ QDF_STATUS ucfg_fwol_send_dscp_up_map_to_fw(struct wlan_objmgr_vdev *vdev, QDF_STATUS ucfg_fwol_configure_global_params(struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_pdev *pdev) { - return QDF_STATUS_SUCCESS; + QDF_STATUS status; + bool value; + + status = ucfg_fwol_get_ilp_config(psoc, &value); + if (QDF_IS_STATUS_ERROR(status)) + return status; + + status = fwol_set_ilp_config(pdev, value); + if (QDF_IS_STATUS_ERROR(status)) + return status; + + return status; } QDF_STATUS ucfg_fwol_configure_vdev_params(struct wlan_objmgr_psoc *psoc,