Commit 099a47db authored by Mukesh Sisodiya's avatar Mukesh Sisodiya Committed by Johannes Berg
Browse files

wifi: iwlwifi: Add support for new 802.11be device



Add support for the new 802.11be device with limites capabilities:
- 320 MHz isn't supported
- MCSs 12 and 13 are not supported

Signed-off-by: default avatarMukesh Sisodiya <mukesh.sisodiya@intel.com>
Reviewed-by: default avatarGregory Greenman <gregory.greenman@intel.com>
Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240123200528.8529bd2acedf.I25dccb7bbeb21b8df2123fad51dde7fcf137a508@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent cf74ce02
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ const struct iwl_cfg_trans_params iwl_bz_trans_cfg = {
};

const char iwl_bz_name[] = "Intel(R) TBD Bz device";
const char iwl_mtp_name[] = "Intel(R) Wi-Fi 7 BE202 160MHz";

const struct iwl_cfg iwl_cfg_bz = {
	.fw_name_mac = "bz",
+13 −0
Original line number Diff line number Diff line
@@ -12,6 +12,8 @@
#include "fw/api/alive.h"
#include "fw/uefi.h"

#define IWL_PNVM_REDUCED_CAP_BIT BIT(25)

struct iwl_pnvm_section {
	__le32 offset;
	const u8 data[];
@@ -173,6 +175,7 @@ static int iwl_pnvm_parse(struct iwl_trans *trans, const u8 *data,

	while (len >= sizeof(*tlv)) {
		u32 tlv_len, tlv_type;
		u32 rf_type;

		len -= sizeof(*tlv);
		tlv = (const void *)data;
@@ -201,6 +204,16 @@ static int iwl_pnvm_parse(struct iwl_trans *trans, const u8 *data,
			data += sizeof(*tlv) + ALIGN(tlv_len, 4);
			len -= ALIGN(tlv_len, 4);

			trans->reduced_cap_sku = false;
			rf_type = CSR_HW_RFID_TYPE(trans->hw_rf_id);
			if ((trans->sku_id[0] & IWL_PNVM_REDUCED_CAP_BIT) &&
			    rf_type == IWL_CFG_RF_TYPE_FM)
				trans->reduced_cap_sku = true;

			IWL_DEBUG_FW(trans,
				     "Reduced SKU device %d\n",
				     trans->reduced_cap_sku);

			if (trans->sku_id[0] == le32_to_cpu(sku_id->data[0]) &&
			    trans->sku_id[1] == le32_to_cpu(sku_id->data[1]) &&
			    trans->sku_id[2] == le32_to_cpu(sku_id->data[2])) {
+4 −0
Original line number Diff line number Diff line
@@ -443,6 +443,9 @@ struct iwl_cfg {
#define IWL_CFG_NO_160			0x1
#define IWL_CFG_160			0x0

#define IWL_CFG_NO_320			0x1
#define IWL_CFG_320			0x0

#define IWL_CFG_CORES_BT		0x0
#define IWL_CFG_CORES_BT_GNSS		0x5

@@ -536,6 +539,7 @@ extern const char iwl_ax221_name[];
extern const char iwl_ax231_name[];
extern const char iwl_ax411_name[];
extern const char iwl_bz_name[];
extern const char iwl_mtp_name[];
extern const char iwl_sc_name[];
#if IS_ENABLED(CONFIG_IWLDVM)
extern const struct iwl_cfg iwl5300_agn_cfg;
+14 −2
Original line number Diff line number Diff line
@@ -892,8 +892,9 @@ iwl_nvm_fixup_sband_iftd(struct iwl_trans *trans,
	bool is_ap = iftype_data->types_mask & BIT(NL80211_IFTYPE_AP);
	bool no_320;

	no_320 = !trans->trans_cfg->integrated &&
		 trans->pcie_link_speed < PCI_EXP_LNKSTA_CLS_8_0GB;
	no_320 = (!trans->trans_cfg->integrated &&
		 trans->pcie_link_speed < PCI_EXP_LNKSTA_CLS_8_0GB) ||
		 trans->reduced_cap_sku;

	if (!data->sku_cap_11be_enable || iwlwifi_mod_params.disable_11be)
		iftype_data->eht_cap.has_eht = false;
@@ -1059,6 +1060,17 @@ iwl_nvm_fixup_sband_iftd(struct iwl_trans *trans,
		iftype_data->he_cap.he_cap_elem.phy_cap_info[7] &=
			~IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ;
	}

	if (trans->reduced_cap_sku) {
		memset(&iftype_data->eht_cap.eht_mcs_nss_supp.bw._320, 0,
		       sizeof(iftype_data->eht_cap.eht_mcs_nss_supp.bw._320));
		iftype_data->eht_cap.eht_mcs_nss_supp.bw._80.rx_tx_mcs13_max_nss = 0;
		iftype_data->eht_cap.eht_mcs_nss_supp.bw._160.rx_tx_mcs13_max_nss = 0;
		iftype_data->eht_cap.eht_cap_elem.phy_cap_info[8] &=
			~IEEE80211_EHT_PHY_CAP8_RX_4096QAM_WIDER_BW_DL_OFDMA;
		iftype_data->eht_cap.eht_cap_elem.phy_cap_info[2] &=
			~IEEE80211_EHT_PHY_CAP2_SOUNDING_DIM_320MHZ_MASK;
	}
}

static void iwl_init_he_hw_capab(struct iwl_trans *trans,
+2 −0
Original line number Diff line number Diff line
@@ -1068,6 +1068,7 @@ struct iwl_trans_txqs {
 * @pcie_link_speed: current PCIe link speed (%PCI_EXP_LNKSTA_CLS_*),
 *	only valid for discrete (not integrated) NICs
 * @invalid_tx_cmd: invalid TX command buffer
 * @reduced_cap_sku: reduced capability supported SKU
 */
struct iwl_trans {
	bool csme_own;
@@ -1090,6 +1091,7 @@ struct iwl_trans {
	u32 hw_id;
	char hw_id_str[52];
	u32 sku_id[3];
	bool reduced_cap_sku;

	u8 rx_mpdu_cmd, rx_mpdu_cmd_hdr_size;

Loading