Home Home > GIT Browse > SLE12-SP4
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Thumshirn <jthumshirn@suse.de>2019-04-26 09:34:09 +0200
committerJohannes Thumshirn <jthumshirn@suse.de>2019-04-26 09:34:09 +0200
commit944b75503407da62bae2328d474a09b980f8b23f (patch)
treee7f6f502690c95b4a52218db255b1fbe381734c5
parent3d524cb7308a1dfdd4a6fa267ffa0a241d77b26d (diff)
parent8e43396deb5ade42c46a9598e0d52e3cbf25a857 (diff)
Merge remote-tracking branch 'origin/SLE15' into SLE12-SP4SLE12-SP4
Conflicts: series.conf
-rw-r--r--patches.fixes/0001-cxgb4-cxgb4vf-Add-support-for-SGE-doorbell-queue-tim.patch8
-rw-r--r--patches.fixes/0001-cxgb4-cxgb4vf-Program-hash-region-for-t4-t4vf-_chang.patch301
-rw-r--r--patches.fixes/0001-cxgb4-impose-mandatory-VLAN-usage-when-non-zero-TAG-.patch49
-rw-r--r--patches.fixes/0001-cxgb4-remove-redundant-assignment-to-vlan_cmd.dropno.patch35
-rw-r--r--patches.fixes/0001-cxgb4-specify-IQTYPE-in-fw_iq_cmd.patch66
-rw-r--r--series.conf4
6 files changed, 459 insertions, 4 deletions
diff --git a/patches.fixes/0001-cxgb4-cxgb4vf-Add-support-for-SGE-doorbell-queue-tim.patch b/patches.fixes/0001-cxgb4-cxgb4vf-Add-support-for-SGE-doorbell-queue-tim.patch
index a2b9c117e6..9585ff78f2 100644
--- a/patches.fixes/0001-cxgb4-cxgb4vf-Add-support-for-SGE-doorbell-queue-tim.patch
+++ b/patches.fixes/0001-cxgb4-cxgb4vf-Add-support-for-SGE-doorbell-queue-tim.patch
@@ -493,14 +493,14 @@ index eb4322488190..292fea574f1a 100644
}
/**
-@@ -3325,7 +3489,8 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,
- c.iqns_to_fl0congen = htonl(FW_IQ_CMD_IQFLINTCONGEN_F);
-
+@@ -3327,7 +3327,8 @@ int t4_sge_alloc_rxq(struct adapter *ada
+ : FW_IQ_IQTYPE_OFLD));
+
if (fl) {
- enum chip_type chip = CHELSIO_CHIP_VERSION(adap->params.chip);
+ unsigned int chip_ver =
+ CHELSIO_CHIP_VERSION(adap->params.chip);
-
+
/* Allocate the ring for the hardware free list (with space
* for its status page) along with the associated software
@@ -3363,10 +3528,10 @@ int t4_sge_alloc_rxq(struct adapter *adap, struct sge_rspq *iq, bool fwevtq,
diff --git a/patches.fixes/0001-cxgb4-cxgb4vf-Program-hash-region-for-t4-t4vf-_chang.patch b/patches.fixes/0001-cxgb4-cxgb4vf-Program-hash-region-for-t4-t4vf-_chang.patch
new file mode 100644
index 0000000000..00602efbe7
--- /dev/null
+++ b/patches.fixes/0001-cxgb4-cxgb4vf-Program-hash-region-for-t4-t4vf-_chang.patch
@@ -0,0 +1,301 @@
+From: Arjun Vynipadath <arjun@chelsio.com>
+Subject: cxgb4/cxgb4vf: Program hash region for {t4/t4vf}_change_mac()
+Patch-mainline: v5.1-rc1
+Git-commit: 3f8cfd0d95e65ddc6aef70ef28b80cdc3d8ad7e4
+References: bsc#1127371
+
+{t4/t4_vf}_change_mac() API's were only doing additions to MPS_TCAM.
+This will fail, when the number of tcam entries is limited particularly
+in vf's.
+This fix programs hash region with the mac address, when TCAM
+addtion fails for {t4/t4vf}_change_mac(). Since the locally maintained
+driver list for hash entries is shared across mac_{sync/unsync}(),
+added an extra parameter if_mac to track the address added thorugh
+{t4/t4vf}_change_mac()
+
+Signed-off-by: Arjun Vynipadath <arjun@chelsio.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Acked-by: Denis Kirjanov <dkirjanov@suse.com>
+---
+ drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 3 +-
+ drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 71 +++++++++++++---
+ drivers/net/ethernet/chelsio/cxgb4vf/adapter.h | 3 +-
+ .../net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c | 99 ++++++++++++++++------
+ 4 files changed, 136 insertions(+), 40 deletions(-)
+
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+index 9504ba28fc85..754512899d5c 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
++++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+@@ -566,7 +566,7 @@ struct sge_rspq;
+ struct port_info {
+ struct adapter *adapter;
+ u16 viid;
+- s16 xact_addr_filt; /* index of exact MAC address filter */
++ int xact_addr_filt; /* index of exact MAC address filter */
+ u16 rss_size; /* size of VI's RSS table slice */
+ s8 mdio_addr;
+ enum fw_port_type port_type;
+@@ -868,6 +868,7 @@ struct doorbell_stats {
+ struct hash_mac_addr {
+ struct list_head list;
+ u8 addr[ETH_ALEN];
++ unsigned int iface_mac;
+ };
+
+ struct uld_msix_bmap {
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+index 95331ba445d3..1a9c681f7e26 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+@@ -434,6 +434,60 @@ static int set_rxmode(struct net_device *dev, int mtu, bool sleep_ok)
+ }
+
+ /**
++ * cxgb4_change_mac - Update match filter for a MAC address.
++ * @pi: the port_info
++ * @viid: the VI id
++ * @tcam_idx: TCAM index of existing filter for old value of MAC address,
++ * or -1
++ * @addr: the new MAC address value
++ * @persist: whether a new MAC allocation should be persistent
++ * @add_smt: if true also add the address to the HW SMT
++ *
++ * Modifies an MPS filter and sets it to the new MAC address if
++ * @tcam_idx >= 0, or adds the MAC address to a new filter if
++ * @tcam_idx < 0. In the latter case the address is added persistently
++ * if @persist is %true.
++ * Addresses are programmed to hash region, if tcam runs out of entries.
++ *
++ */
++static int cxgb4_change_mac(struct port_info *pi, unsigned int viid,
++ int *tcam_idx, const u8 *addr, bool persist,
++ u8 *smt_idx)
++{
++ struct adapter *adapter = pi->adapter;
++ struct hash_mac_addr *entry, *new_entry;
++ int ret;
++
++ ret = t4_change_mac(adapter, adapter->mbox, viid,
++ *tcam_idx, addr, persist, smt_idx);
++ /* We ran out of TCAM entries. try programming hash region. */
++ if (ret == -ENOMEM) {
++ /* If the MAC address to be updated is in the hash addr
++ * list, update it from the list
++ */
++ list_for_each_entry(entry, &adapter->mac_hlist, list) {
++ if (entry->iface_mac) {
++ ether_addr_copy(entry->addr, addr);
++ goto set_hash;
++ }
++ }
++ new_entry = kzalloc(sizeof(*new_entry), GFP_KERNEL);
++ if (!new_entry)
++ return -ENOMEM;
++ ether_addr_copy(new_entry->addr, addr);
++ new_entry->iface_mac = true;
++ list_add_tail(&new_entry->list, &adapter->mac_hlist);
++set_hash:
++ ret = cxgb4_set_addr_hash(pi);
++ } else if (ret >= 0) {
++ *tcam_idx = ret;
++ ret = 0;
++ }
++
++ return ret;
++}
++
++/*
+ * link_start - enable a port
+ * @dev: the port to enable
+ *
+@@ -451,15 +505,9 @@ static int link_start(struct net_device *dev)
+ */
+ ret = t4_set_rxmode(pi->adapter, mb, pi->viid, dev->mtu, -1, -1, -1,
+ !!(dev->features & NETIF_F_HW_VLAN_CTAG_RX), true);
+- if (ret == 0) {
+- ret = t4_change_mac(pi->adapter, mb, pi->viid,
+- pi->xact_addr_filt, dev->dev_addr, true,
+- &pi->smt_idx);
+- if (ret >= 0) {
+- pi->xact_addr_filt = ret;
+- ret = 0;
+- }
+- }
++ if (ret == 0)
++ ret = cxgb4_change_mac(pi, pi->viid, &pi->xact_addr_filt,
++ dev->dev_addr, true, &pi->smt_idx);
+ if (ret == 0)
+ ret = t4_link_l1cfg(pi->adapter, mb, pi->tx_chan,
+ &pi->link_cfg);
+@@ -2821,9 +2869,8 @@ static int cxgb_set_mac_addr(struct net_device *dev, void *p)
+ if (!is_valid_ether_addr(addr->sa_data))
+ return -EADDRNOTAVAIL;
+
+- ret = t4_change_mac(pi->adapter, pi->adapter->pf, pi->viid,
+- pi->xact_addr_filt, addr->sa_data, true,
+- &pi->smt_idx);
++ ret = cxgb4_change_mac(pi, pi->viid, &pi->xact_addr_filt,
++ addr->sa_data, true, &pi->smt_idx);
+ if (ret < 0)
+ return ret;
+
+diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h b/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
+index 5883f09e3804..26f48a14d2f9 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
++++ b/drivers/net/ethernet/chelsio/cxgb4vf/adapter.h
+@@ -94,7 +94,7 @@ struct port_info {
+ struct adapter *adapter; /* our adapter */
+ u32 vlan_id; /* vlan id for VST */
+ u16 viid; /* virtual interface ID */
+- s16 xact_addr_filt; /* index of our MAC address filter */
++ int xact_addr_filt; /* index of our MAC address filter */
+ u16 rss_size; /* size of VI's RSS table slice */
+ u8 pidx; /* index into adapter port[] */
+ s8 mdio_addr;
+@@ -352,6 +352,7 @@ struct sge {
+ struct hash_mac_addr {
+ struct list_head list;
+ u8 addr[ETH_ALEN];
++ unsigned int iface_mac;
+ };
+
+ struct mbox_list {
+diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+index debc6f7c9ad2..53ebac3a6fae 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
++++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+@@ -236,6 +236,73 @@ void t4vf_os_portmod_changed(struct adapter *adapter, int pidx)
+ "inserted\n", dev->name, pi->mod_type);
+ }
+
++static int cxgb4vf_set_addr_hash(struct port_info *pi)
++{
++ struct adapter *adapter = pi->adapter;
++ u64 vec = 0;
++ bool ucast = false;
++ struct hash_mac_addr *entry;
++
++ /* Calculate the hash vector for the updated list and program it */
++ list_for_each_entry(entry, &adapter->mac_hlist, list) {
++ ucast |= is_unicast_ether_addr(entry->addr);
++ vec |= (1ULL << hash_mac_addr(entry->addr));
++ }
++ return t4vf_set_addr_hash(adapter, pi->viid, ucast, vec, false);
++}
++
++/**
++ * cxgb4vf_change_mac - Update match filter for a MAC address.
++ * @pi: the port_info
++ * @viid: the VI id
++ * @tcam_idx: TCAM index of existing filter for old value of MAC address,
++ * or -1
++ * @addr: the new MAC address value
++ * @persist: whether a new MAC allocation should be persistent
++ * @add_smt: if true also add the address to the HW SMT
++ *
++ * Modifies an MPS filter and sets it to the new MAC address if
++ * @tcam_idx >= 0, or adds the MAC address to a new filter if
++ * @tcam_idx < 0. In the latter case the address is added persistently
++ * if @persist is %true.
++ * Addresses are programmed to hash region, if tcam runs out of entries.
++ *
++ */
++static int cxgb4vf_change_mac(struct port_info *pi, unsigned int viid,
++ int *tcam_idx, const u8 *addr, bool persistent)
++{
++ struct hash_mac_addr *new_entry, *entry;
++ struct adapter *adapter = pi->adapter;
++ int ret;
++
++ ret = t4vf_change_mac(adapter, viid, *tcam_idx, addr, persistent);
++ /* We ran out of TCAM entries. try programming hash region. */
++ if (ret == -ENOMEM) {
++ /* If the MAC address to be updated is in the hash addr
++ * list, update it from the list
++ */
++ list_for_each_entry(entry, &adapter->mac_hlist, list) {
++ if (entry->iface_mac) {
++ ether_addr_copy(entry->addr, addr);
++ goto set_hash;
++ }
++ }
++ new_entry = kzalloc(sizeof(*new_entry), GFP_KERNEL);
++ if (!new_entry)
++ return -ENOMEM;
++ ether_addr_copy(new_entry->addr, addr);
++ new_entry->iface_mac = true;
++ list_add_tail(&new_entry->list, &adapter->mac_hlist);
++set_hash:
++ ret = cxgb4vf_set_addr_hash(pi);
++ } else if (ret >= 0) {
++ *tcam_idx = ret;
++ ret = 0;
++ }
++
++ return ret;
++}
++
+ /*
+ * Net device operations.
+ * ======================
+@@ -259,14 +326,10 @@ static int link_start(struct net_device *dev)
+ */
+ ret = t4vf_set_rxmode(pi->adapter, pi->viid, dev->mtu, -1, -1, -1, 1,
+ true);
+- if (ret == 0) {
+- ret = t4vf_change_mac(pi->adapter, pi->viid,
+- pi->xact_addr_filt, dev->dev_addr, true);
+- if (ret >= 0) {
+- pi->xact_addr_filt = ret;
+- ret = 0;
+- }
+- }
++ if (ret == 0)
++ ret = cxgb4vf_change_mac(pi, pi->viid,
++ &pi->xact_addr_filt,
++ dev->dev_addr, true);
+
+ /*
+ * We don't need to actually "start the link" itself since the
+@@ -873,21 +936,6 @@ static struct net_device_stats *cxgb4vf_get_stats(struct net_device *dev)
+ return ns;
+ }
+
+-static inline int cxgb4vf_set_addr_hash(struct port_info *pi)
+-{
+- struct adapter *adapter = pi->adapter;
+- u64 vec = 0;
+- bool ucast = false;
+- struct hash_mac_addr *entry;
+-
+- /* Calculate the hash vector for the updated list and program it */
+- list_for_each_entry(entry, &adapter->mac_hlist, list) {
+- ucast |= is_unicast_ether_addr(entry->addr);
+- vec |= (1ULL << hash_mac_addr(entry->addr));
+- }
+- return t4vf_set_addr_hash(adapter, pi->viid, ucast, vec, false);
+-}
+-
+ static int cxgb4vf_mac_sync(struct net_device *netdev, const u8 *mac_addr)
+ {
+ struct port_info *pi = netdev_priv(netdev);
+@@ -1169,13 +1217,12 @@ static int cxgb4vf_set_mac_addr(struct net_device *dev, void *_addr)
+ if (!is_valid_ether_addr(addr->sa_data))
+ return -EADDRNOTAVAIL;
+
+- ret = t4vf_change_mac(pi->adapter, pi->viid, pi->xact_addr_filt,
+- addr->sa_data, true);
++ ret = cxgb4vf_change_mac(pi, pi->viid, &pi->xact_addr_filt,
++ addr->sa_data, true);
+ if (ret < 0)
+ return ret;
+
+ memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
+- pi->xact_addr_filt = ret;
+ return 0;
+ }
+
+--
+2.12.3
+
diff --git a/patches.fixes/0001-cxgb4-impose-mandatory-VLAN-usage-when-non-zero-TAG-.patch b/patches.fixes/0001-cxgb4-impose-mandatory-VLAN-usage-when-non-zero-TAG-.patch
new file mode 100644
index 0000000000..82bc2aabc7
--- /dev/null
+++ b/patches.fixes/0001-cxgb4-impose-mandatory-VLAN-usage-when-non-zero-TAG-.patch
@@ -0,0 +1,49 @@
+From: Casey Leedom <leedom@chelsio.com>
+Subject: cxgb4: impose mandatory VLAN usage when non-zero TAG ID
+Patch-mainline: v4.20-rc1
+Git-commit: a89cdd8e7c741eee80b105acddb04cda9f40ef49
+References: bsc#1127371
+
+When a non-zero VLAN Tag ID is passed to t4_set_vlan_acl()
+then impose mandatory VLAN Usage with that VLAN ID.
+I.e any other VLAN ID should result in packets getting
+dropped.
+
+Signed-off-by: Casey Leedom <leedom@chelsio.com>
+Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Acked-by: Denis Kirjanov <dkirjanov@suse.com>
+---
+ drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 3 +++
+ drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 1 +
+ 2 files changed, 4 insertions(+)
+
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+index e58aeaea222c..19ab5f7f6cbe 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+@@ -10254,6 +10254,9 @@ int t4_set_vlan_acl(struct adapter *adap, unsigned int mbox, unsigned int vf,
+ vlan_cmd.en_to_len16 = cpu_to_be32(enable | FW_LEN16(vlan_cmd));
+ /* Drop all packets that donot match vlan id */
+ vlan_cmd.dropnovlan_fm = FW_ACL_VLAN_CMD_FM_F;
++ vlan_cmd.dropnovlan_fm = (enable
++ ? (FW_ACL_VLAN_CMD_DROPNOVLAN_F |
++ FW_ACL_VLAN_CMD_FM_F) : 0);
+ if (enable != 0) {
+ vlan_cmd.nvlan = 1;
+ vlan_cmd.vlanid[0] = cpu_to_be16(vlan);
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+index 7003f47f7fa1..dc5353406742 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+@@ -2414,6 +2414,7 @@ struct fw_acl_vlan_cmd {
+
+ #define FW_ACL_VLAN_CMD_DROPNOVLAN_S 7
+ #define FW_ACL_VLAN_CMD_DROPNOVLAN_V(x) ((x) << FW_ACL_VLAN_CMD_DROPNOVLAN_S)
++#define FW_ACL_VLAN_CMD_DROPNOVLAN_F FW_ACL_VLAN_CMD_DROPNOVLAN_V(1U)
+
+ #define FW_ACL_VLAN_CMD_FM_S 6
+ #define FW_ACL_VLAN_CMD_FM_M 0x1
+--
+2.12.3
+
diff --git a/patches.fixes/0001-cxgb4-remove-redundant-assignment-to-vlan_cmd.dropno.patch b/patches.fixes/0001-cxgb4-remove-redundant-assignment-to-vlan_cmd.dropno.patch
new file mode 100644
index 0000000000..f1cb45b3b2
--- /dev/null
+++ b/patches.fixes/0001-cxgb4-remove-redundant-assignment-to-vlan_cmd.dropno.patch
@@ -0,0 +1,35 @@
+From: Colin Ian King <colin.king@canonical.com>
+Subject: cxgb4: remove redundant assignment to vlan_cmd.dropnovlan_fm
+Patch-mainline: v4.20-rc1
+Git-commit: 25290bfc120df09bd81f41194e37c84f59792c77
+References: bsc#1127371
+
+A recent commit updated vlan_cmd.dropnovlan_fm but failed to remove
+the older assignment. Fix this by removing the former redundant
+assignment.
+
+Detected by CoverityScan, CID#1473290 ("Unused value")
+
+Fixes: a89cdd8e7c74 ("cxgb4: impose mandatory VLAN usage when non-zero TAG ID")
+Signed-off-by: Colin Ian King <colin.king@canonical.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Acked-by: Denis Kirjanov <dkirjanov@suse.com>
+---
+ drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+index 19ab5f7f6cbe..2236425ab4f3 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+@@ -10253,7 +10253,6 @@ int t4_set_vlan_acl(struct adapter *adap, unsigned int mbox, unsigned int vf,
+ FW_ACL_VLAN_CMD_VFN_V(vf));
+ vlan_cmd.en_to_len16 = cpu_to_be32(enable | FW_LEN16(vlan_cmd));
+ /* Drop all packets that donot match vlan id */
+- vlan_cmd.dropnovlan_fm = FW_ACL_VLAN_CMD_FM_F;
+ vlan_cmd.dropnovlan_fm = (enable
+ ? (FW_ACL_VLAN_CMD_DROPNOVLAN_F |
+ FW_ACL_VLAN_CMD_FM_F) : 0);
+--
+2.12.3
+
diff --git a/patches.fixes/0001-cxgb4-specify-IQTYPE-in-fw_iq_cmd.patch b/patches.fixes/0001-cxgb4-specify-IQTYPE-in-fw_iq_cmd.patch
new file mode 100644
index 0000000000..5f2655b777
--- /dev/null
+++ b/patches.fixes/0001-cxgb4-specify-IQTYPE-in-fw_iq_cmd.patch
@@ -0,0 +1,66 @@
+From: Arjun Vynipadath <arjun@chelsio.com>
+Subject: cxgb4: specify IQTYPE in fw_iq_cmd
+Patch-mainline: v4.19-rc1
+Git-commit: 8dce04f1fd64ce5cf03e942d7644967890ae4483
+References: bsc#1127371
+
+congestion argument passed to t4_sge_alloc_rxq() is used
+to differentiate between nic/ofld queues.
+
+Signed-off-by: Arjun Vynipadath <arjun@chelsio.com>
+Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Denis Kirjanov <dkirjanov@suse.com>
+---
+ drivers/net/ethernet/chelsio/cxgb4/sge.c | 4 +++-
+ drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 12 ++++++++++++
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/sge.c b/drivers/net/ethernet/chelsio/cxgb4/sge.c
+index 292fea574f1a..c1756c407127 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/sge.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/sge.c
+@@ -3318,7 +3318,9 @@ int t4_sge_alloc_rxq(struct adapter *ada
+ c.iqsize = htons(iq->size);
+ c.iqaddr = cpu_to_be64(iq->phys_addr);
+ if (cong >= 0)
+- c.iqns_to_fl0congen = htonl(FW_IQ_CMD_IQFLINTCONGEN_F);
++ c.iqns_to_fl0congen = htonl(FW_IQ_CMD_IQFLINTCONGEN_F |
++ FW_IQ_CMD_IQTYPE_V(cong ? FW_IQ_IQTYPE_NIC
++ : FW_IQ_IQTYPE_OFLD));
+
+ if (fl) {
+ enum chip_type chip = CHELSIO_CHIP_VERSION(adap->params.chip);
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+index dc5353406742..046d05458a9b 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+@@ -1432,6 +1432,12 @@ enum fw_iq_type {
+ FW_IQ_TYPE_NO_FL_INT_CAP
+ };
+
++enum fw_iq_iqtype {
++ FW_IQ_IQTYPE_OTHER,
++ FW_IQ_IQTYPE_NIC,
++ FW_IQ_IQTYPE_OFLD,
++};
++
+ struct fw_iq_cmd {
+ __be32 op_to_vfn;
+ __be32 alloc_to_len16;
+@@ -1546,6 +1552,12 @@ struct fw_iq_cmd {
+ #define FW_IQ_CMD_IQFLINTISCSIC_S 26
+ #define FW_IQ_CMD_IQFLINTISCSIC_V(x) ((x) << FW_IQ_CMD_IQFLINTISCSIC_S)
+
++#define FW_IQ_CMD_IQTYPE_S 24
++#define FW_IQ_CMD_IQTYPE_M 0x3
++#define FW_IQ_CMD_IQTYPE_V(x) ((x) << FW_IQ_CMD_IQTYPE_S)
++#define FW_IQ_CMD_IQTYPE_G(x) \
++ (((x) >> FW_IQ_CMD_IQTYPE_S) & FW_IQ_CMD_IQTYPE_M)
++
+ #define FW_IQ_CMD_FL0CNGCHMAP_S 20
+ #define FW_IQ_CMD_FL0CNGCHMAP_V(x) ((x) << FW_IQ_CMD_FL0CNGCHMAP_S)
+
+--
+2.12.3
+
diff --git a/series.conf b/series.conf
index f140f4c263..94ec352f91 100644
--- a/series.conf
+++ b/series.conf
@@ -18328,6 +18328,7 @@
patches.drivers/net-hns3-Fix-get_vector-ops-in-hclgevf_main-module.patch
patches.drivers/net-hns3-Prevent-sending-command-during-global-or-co.patch
patches.fixes/Documentation-ip-sysctl.txt-document-addr_gen_mode
+ patches.fixes/0001-cxgb4-specify-IQTYPE-in-fw_iq_cmd.patch
patches.drivers/be2net-remove-unused-old-AIC-info.patch
patches.drivers/be2net-remove-unused-old-custom-busy-poll-fields.patch
patches.drivers/net-hns3-Fix-return-value-error-in-hns3_reset_notify.patch
@@ -19487,6 +19488,8 @@
patches.drivers/net-hns3-Fix-ping-exited-problem-when-doing-lp-selft.patch
patches.drivers/net-hns3-Preserve-vlan-0-in-hardware-table.patch
patches.drivers/cxgb4-collect-hardware-queue-descriptors.patch
+ patches.fixes/0001-cxgb4-impose-mandatory-VLAN-usage-when-non-zero-TAG-.patch
+ patches.fixes/0001-cxgb4-remove-redundant-assignment-to-vlan_cmd.dropno.patch
patches.fixes/0001-cxgb4-add-per-rx-queue-counter-for-packet-errors.patch
patches.fixes/0001-cxgb4-update-supported-DCB-version.patch
patches.arch/s390-sles15sp1-00-16-12-s390-qeth-invoke-softirqs-after-napi_schedule.patch
@@ -21206,6 +21209,7 @@
patches.drivers/leds-lp55xx-fix-null-deref-on-firmware-load-failure.patch
patches.fixes/0001-cxgb4-cxgb4vf-Link-management-changes.patch
patches.fixes/0001-cxgb4vf-Update-port-information-in-cxgb4vf_open.patch
+ patches.fixes/0001-cxgb4-cxgb4vf-Program-hash-region-for-t4-t4vf-_chang.patch
patches.drivers/e1000e-fix-cyclic-resets-at-link-up-with-active-tx.patch
patches.drivers/wlcore-Fix-memory-leak-in-case-wl12xx_fetch_firmware.patch
patches.drivers/cw1200-fix-missing-unlock-on-error-in-cw1200_hw_scan.patch