diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 01231472a638..bbac5f82654d 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -4805,6 +4805,17 @@ static uint8_t sme_get_nss_chain_shift(enum QDF_OPMODE device_mode) } } +static void +sme_check_nss_chain_ini_param(struct wlan_mlme_nss_chains *vdev_ini_cfg, + uint8_t rf_chains_supported, + enum nss_chains_band_info band) +{ + vdev_ini_cfg->rx_nss[band] = QDF_MIN(vdev_ini_cfg->rx_nss[band], + rf_chains_supported); + vdev_ini_cfg->tx_nss[band] = QDF_MIN(vdev_ini_cfg->tx_nss[band], + rf_chains_supported); +} + static void sme_fill_nss_chain_params(struct mac_context *mac_ctx, struct wlan_mlme_nss_chains *vdev_ini_cfg, @@ -4864,6 +4875,14 @@ sme_fill_nss_chain_params(struct mac_context *mac_ctx, vdev_ini_cfg->disable_tx_mrc[band] = nss_chains_ini_cfg->disable_tx_mrc[band]; + /* + * Check whether the rx/tx nss is greater than the number of rf chains + * supported by FW, if so downgrade the nss to the number of chains + * supported, as higher nss cannot be supported with less chains. + */ + sme_check_nss_chain_ini_param(vdev_ini_cfg, rf_chains_supported, + band); + } void sme_populate_nss_chain_params(mac_handle_t mac_handle,