Commit 0f9842b0 authored by Karthik M's avatar Karthik M Committed by Jeff Johnson
Browse files

wifi: ath12k: disable pdev for non supported country



In MLO configuration, ath12k_mac_radio_start() iterates through all
the radios and makes the ar state 'ON'. Even though some bands are
not supported in certain countries, ath12k_reg_update_chan_list()
tries to update the channel list for all the active pdevs and ends
up in the warn_on for non-supported band.

To prevent this, disable the pdev when the number of channels across
all bands supported by the pdev is zero for a particular country.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1

Signed-off-by: default avatarKarthik M <quic_karm@quicinc.com>
Signed-off-by: default avatarMuna Sinada <muna.sinada@oss.qualcomm.com>
Reviewed-by: default avatarVasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250506214930.3561348-1-muna.sinada@oss.qualcomm.com


Signed-off-by: default avatarJeff Johnson <jeff.johnson@oss.qualcomm.com>
parent 36670b67
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -8117,7 +8117,17 @@ static int ath12k_mac_start(struct ath12k *ar)

	/* TODO: Do we need to enable ANI? */

	ath12k_reg_update_chan_list(ar, false);
	ret = ath12k_reg_update_chan_list(ar, false);

	/* The ar state alone can be turned off for non supported country
	 * without returning the error value. As we need to update the channel
	 * for the next ar.
	 */
	if (ret) {
		if (ret == -EINVAL)
			ret = 0;
		goto err;
	}

	ar->num_started_vdevs = 0;
	ar->num_created_vdevs = 0;
+5 −2
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ ath12k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)

		for_each_ar(ah, ar, i) {
			ret = ath12k_reg_update_chan_list(ar, true);
			if (ret) {
			if (ret && ret != -EINVAL) {
				ath12k_warn(ar->ab,
					    "failed to update chan list for pdev %u, ret %d\n",
					    i, ret);
@@ -181,8 +181,11 @@ int ath12k_reg_update_chan_list(struct ath12k *ar, bool wait)
		}
	}

	if (WARN_ON(!num_channels))
	if (!num_channels) {
		ath12k_dbg(ar->ab, ATH12K_DBG_REG,
			   "pdev is not supported for this country\n");
		return -EINVAL;
	}

	arg = kzalloc(struct_size(arg, channel, num_channels), GFP_KERNEL);