qcacmn: Don't allow MLO SCC link

When MLO partner link and assoc link are on same frequency, F/W will
assert.

To fix it, don't allow partner link is on same frequency of assoc link.

Change-Id: I01338dbbc0845e6f6284e4a374f5ad0a5cada334
CRs-Fixed: 3706613
This commit is contained in:
Jianmin Zhu
2024-01-19 16:39:53 +08:00
committed by Ravindra Konda
parent 0b4d82980c
commit 9bc183ab64

View File

@@ -1824,14 +1824,7 @@ static bool is_freq_dbs_or_sbs(struct wlan_objmgr_psoc *psoc,
qdf_freq_t freq_1, qdf_freq_t freq_1,
qdf_freq_t freq_2) qdf_freq_t freq_2)
{ {
if ((policy_mgr_is_hw_sbs_capable(psoc) && return !policy_mgr_2_freq_always_on_same_mac(psoc, freq_1, freq_2);
policy_mgr_are_sbs_chan(psoc, freq_1, freq_2)) ||
(policy_mgr_is_hw_dbs_capable(psoc) &&
!wlan_reg_is_same_band_freqs(freq_1, freq_2))) {
return true;
}
return false;
} }
#else #else
@@ -1879,7 +1872,6 @@ enum MLO_TYPE cm_bss_mlo_type(struct wlan_objmgr_psoc *psoc,
for (i = 0; i < entry->ml_info.num_links; i++) { for (i = 0; i < entry->ml_info.num_links; i++) {
if (!entry->ml_info.link_info[i].is_valid_link) if (!entry->ml_info.link_info[i].is_valid_link)
continue; continue;
multi_link = true;
freq_entry = entry->channel.chan_freq; freq_entry = entry->channel.chan_freq;
freq[i] = entry->ml_info.link_info[i].freq; freq[i] = entry->ml_info.link_info[i].freq;
entry_partner[i] = entry_partner[i] =
@@ -1887,8 +1879,17 @@ enum MLO_TYPE cm_bss_mlo_type(struct wlan_objmgr_psoc *psoc,
&entry->ml_info.link_info[i].link_addr); &entry->ml_info.link_info[i].link_addr);
if (entry_partner[i]) if (entry_partner[i])
freq[i] = entry_partner[i]->channel.chan_freq; freq[i] = entry_partner[i]->channel.chan_freq;
if (is_freq_dbs_or_sbs(psoc, freq[i], freq_entry)) if (is_freq_dbs_or_sbs(psoc, freq[i], freq_entry)) {
return MLMR; return MLMR;
} else if (freq[i] == freq_entry) {
mlme_debug("Partner " QDF_MAC_ADDR_FMT
" freq %d same as assoc freq, invalid it",
QDF_MAC_ADDR_REF(entry->ml_info.link_info[i].link_addr.bytes),
freq[i]);
entry->ml_info.link_info[i].is_valid_link = false;
} else {
multi_link = true;
}
} }
if (multi_link) if (multi_link)