wifi: iwlwifi: mvm: use old checksum for Bz A-step
authorJohannes Berg <johannes.berg@intel.com>
Wed, 2 Nov 2022 14:59:48 +0000 (16:59 +0200)
committerGregory Greenman <gregory.greenman@intel.com>
Thu, 10 Nov 2022 11:26:32 +0000 (13:26 +0200)
For Bz A-step hardware, the checksum offload is broken and
we need to use the old way, which is still there. Do that,
which requires taking the checksum capability bits out of
the IWL_DEVICE_BZ macro and listing them individually.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
Link: https://lore.kernel.org/r/20221102165239.6bc379f1b0b1.I204223f1b1c2fe26f414aea6679ef7fce681c33a@changeid
drivers/net/wireless/intel/iwlwifi/cfg/22000.c
drivers/net/wireless/intel/iwlwifi/mvm/tx.c

index 110fda6..b46f65b 100644 (file)
@@ -261,7 +261,6 @@ static const struct iwl_ht_params iwl_22000_ht_params = {
        .dccm2_len = IWL_22000_DCCM2_LEN,                               \
        .smem_offset = IWL_22000_SMEM_OFFSET,                           \
        .smem_len = IWL_22000_SMEM_LEN,                                 \
-       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,        \
        .apmg_not_supported = true,                                     \
        .trans.mq_rx_supported = true,                                  \
        .vht_mu_mimo_supported = true,                                  \
@@ -901,6 +900,7 @@ const struct iwl_cfg iwl_cfg_bz_a0_hr_b0 = {
        .fw_name_pre = IWL_BZ_A_HR_B_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -908,6 +908,7 @@ const struct iwl_cfg iwl_cfg_bz_a0_gf_a0 = {
        .fw_name_pre = IWL_BZ_A_GF_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -915,6 +916,7 @@ const struct iwl_cfg iwl_cfg_bz_a0_gf4_a0 = {
        .fw_name_pre = IWL_BZ_A_GF4_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -922,6 +924,7 @@ const struct iwl_cfg iwl_cfg_bz_a0_mr_a0 = {
        .fw_name_pre = IWL_BZ_A_MR_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -929,6 +932,7 @@ const struct iwl_cfg iwl_cfg_bz_a0_fm_a0 = {
        .fw_name_pre = IWL_BZ_A_FM_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -936,6 +940,7 @@ const struct iwl_cfg iwl_cfg_bz_a0_fm4_a0 = {
        .fw_name_pre = IWL_BZ_A_FM4_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -943,6 +948,7 @@ const struct iwl_cfg iwl_cfg_gl_a0_fm_a0 = {
        .fw_name_pre = IWL_GL_A_FM_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -950,6 +956,7 @@ const struct iwl_cfg iwl_cfg_gl_b0_fm_b0 = {
        .fw_name_pre = IWL_GL_B_FM_B_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -957,6 +964,7 @@ const struct iwl_cfg iwl_cfg_bz_z0_gf_a0 = {
        .fw_name_pre = IWL_BZ_Z_GF_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -964,6 +972,7 @@ const struct iwl_cfg iwl_cfg_bnj_a0_fm_a0 = {
        .fw_name_pre = IWL_BNJ_A_FM_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -971,6 +980,7 @@ const struct iwl_cfg iwl_cfg_bnj_a0_fm4_a0 = {
        .fw_name_pre = IWL_BNJ_A_FM4_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -978,6 +988,7 @@ const struct iwl_cfg iwl_cfg_bnj_a0_gf_a0 = {
        .fw_name_pre = IWL_BNJ_A_GF_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -985,6 +996,7 @@ const struct iwl_cfg iwl_cfg_bnj_a0_gf4_a0 = {
        .fw_name_pre = IWL_BNJ_A_GF4_A_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -992,6 +1004,7 @@ const struct iwl_cfg iwl_cfg_bnj_a0_hr_b0 = {
        .fw_name_pre = IWL_BNJ_A_HR_B_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 
@@ -999,6 +1012,7 @@ const struct iwl_cfg iwl_cfg_bnj_b0_fm_b0 = {
        .fw_name_pre = IWL_BNJ_B_FM_B_FW_PRE,
        .uhb_supported = true,
        IWL_DEVICE_BZ,
+       .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM,
        .num_rbds = IWL_NUM_RBDS_AX210_HE,
 };
 MODULE_FIRMWARE(IWL_QU_B_HR_B_MODULE_FIRMWARE(IWL_22000_UCODE_API_MAX));
index ba335f5..f460332 100644 (file)
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
 /*
- * Copyright (C) 2012-2014, 2018-2021 Intel Corporation
+ * Copyright (C) 2012-2014, 2018-2022 Intel Corporation
  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
  * Copyright (C) 2016-2017 Intel Deutschland GmbH
  */
@@ -183,7 +183,10 @@ static u32 iwl_mvm_tx_csum(struct iwl_mvm *mvm, struct sk_buff *skb,
                           struct ieee80211_tx_info *info,
                           bool amsdu)
 {
-       if (mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_BZ)
+       if (mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_BZ ||
+           (mvm->trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_BZ &&
+            CSR_HW_REV_TYPE(mvm->trans->hw_rev) == IWL_CFG_MAC_TYPE_GL &&
+            mvm->trans->hw_rev_step == SILICON_A_STEP))
                return iwl_mvm_tx_csum_pre_bz(mvm, skb, info, amsdu);
        return iwl_mvm_tx_csum_bz(mvm, skb, amsdu);
 }