Home Home > GIT Browse > openSUSE-15.0
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKernel Build Daemon <kbuild@suse.de>2019-04-25 07:05:12 +0200
committerKernel Build Daemon <kbuild@suse.de>2019-04-25 07:05:12 +0200
commit737d834e2eafeac6ae716c3ea64a81637eca59c4 (patch)
tree3144c5a17f5711f910d127bb2ecdd9b8c0e14c6f
parentfba297d0e0569ad1cbfa5ab25b6d733b7277bd87 (diff)
parentbe4e79781bbb85050e30fe0446db1a862ec7ab19 (diff)
Merge branch 'SLE15' into openSUSE-15.0openSUSE-15.0
-rw-r--r--patches.fixes/0001-cxgb4-cxgb4vf-Add-support-for-SGE-doorbell-queue-tim.patch4
-rw-r--r--patches.fixes/0001-cxgb4-use-new-fw-interface-to-get-the-VIN-and-smt-in.patch412
-rw-r--r--series.conf1
3 files changed, 415 insertions, 2 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 6f6ba3f612..a2b9c117e6 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
@@ -743,10 +743,10 @@ diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/etherne
index e08e57b498ef..35e8915499f8 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
-@@ -1209,6 +1209,8 @@ enum fw_params_param_dev {
- FW_PARAMS_PARAM_DEV_HMA_SIZE = 0x20,
+@@ -1210,6 +1210,8 @@ enum fw_params_param_dev {
FW_PARAMS_PARAM_DEV_RDMA_WRITE_WITH_IMM = 0x21,
FW_PARAMS_PARAM_DEV_RI_WRITE_CMPL_WR = 0x24,
+ FW_PARAMS_PARAM_DEV_OPAQUE_VIID_SMT_EXTN = 0x27,
+ FW_PARAMS_PARAM_DEV_DBQ_TIMER = 0x29,
+ FW_PARAMS_PARAM_DEV_DBQ_TIMERTICK = 0x2A,
};
diff --git a/patches.fixes/0001-cxgb4-use-new-fw-interface-to-get-the-VIN-and-smt-in.patch b/patches.fixes/0001-cxgb4-use-new-fw-interface-to-get-the-VIN-and-smt-in.patch
new file mode 100644
index 0000000000..939f9a8fa0
--- /dev/null
+++ b/patches.fixes/0001-cxgb4-use-new-fw-interface-to-get-the-VIN-and-smt-in.patch
@@ -0,0 +1,412 @@
+From: Santosh Rastapur <santosh@chelsio.com>
+Subject: cxgb4: use new fw interface to get the VIN and smt index
+Patch-mainline: v5.0-rc1
+Git-commit: 02d805dc5fe34358b8a5e9fc141031a40cd496ed
+References: bsc#1127371
+
+If the fw supports returning VIN/VIVLD in FW_VI_CMD save it
+in port_info structure else retrieve these from viid and save
+them in port_info structure. Do the same for smt_idx from
+FW_VI_MAC_CMD
+
+Signed-off-by: Santosh Rastapur <santosh@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/infiniband/hw/cxgb4/cm.c | 6 +--
+ drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 12 ++++-
+ drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 58 ++++++++++++-------------
+ drivers/net/ethernet/chelsio/cxgb4/l2t.c | 13 +++---
+ drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 46 ++++++++++++++++++--
+ drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h | 20 +++++++++
+ drivers/scsi/cxgbi/cxgb4i/cxgb4i.c | 3 +-
+ drivers/target/iscsi/cxgbit/cxgbit_cm.c | 8 ++--
+ 8 files changed, 113 insertions(+), 53 deletions(-)
+
+diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
+index f4cf2dbb3e03..176036f2c66e 100644
+--- a/drivers/infiniband/hw/cxgb4/cm.c
++++ b/drivers/infiniband/hw/cxgb4/cm.c
+@@ -2061,8 +2061,7 @@ static int import_ep(struct c4iw_ep *ep, int iptype, __u8 *peer_ip,
+ }
+ ep->mtu = pdev->mtu;
+ ep->tx_chan = cxgb4_port_chan(pdev);
+- ep->smac_idx = cxgb4_tp_smt_idx(adapter_type,
+- cxgb4_port_viid(pdev));
++ ep->smac_idx = ((struct port_info *)netdev_priv(pdev))->smt_idx;
+ step = cdev->rdev.lldi.ntxq /
+ cdev->rdev.lldi.nchan;
+ ep->txq_idx = cxgb4_port_idx(pdev) * step;
+@@ -2081,8 +2080,7 @@ static int import_ep(struct c4iw_ep *ep, int iptype, __u8 *peer_ip,
+ goto out;
+ ep->mtu = dst_mtu(dst);
+ ep->tx_chan = cxgb4_port_chan(pdev);
+- ep->smac_idx = cxgb4_tp_smt_idx(adapter_type,
+- cxgb4_port_viid(pdev));
++ ep->smac_idx = ((struct port_info *)netdev_priv(pdev))->smt_idx;
+ step = cdev->rdev.lldi.ntxq /
+ cdev->rdev.lldi.nchan;
+ ep->txq_idx = cxgb4_port_idx(pdev) * step;
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+index 779ff7b8d4e4..9504ba28fc85 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
++++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+@@ -399,6 +399,7 @@ struct adapter_params {
+ bool fr_nsmr_tpte_wr_support; /* FW support for FR_NSMR_TPTE_WR */
+ u8 fw_caps_support; /* 32-bit Port Capabilities */
+ bool filter2_wr_support; /* FW support for FILTER2_WR */
++ unsigned int viid_smt_extn_support:1; /* FW returns vin and smt index */
+
+ /* MPS Buffer Group Map[per Port]. Bit i is set if buffer group i is
+ * used by the Port
+@@ -590,6 +591,13 @@ struct port_info {
+ bool ptp_enable;
+ struct sched_table *sched_tbl;
+ u32 eth_flags;
++
++ /* viid and smt fields either returned by fw
++ * or decoded by parsing viid by driver.
++ */
++ u8 vin;
++ u8 vivld;
++ u8 smt_idx;
+ };
+
+ struct dentry;
+@@ -1753,7 +1761,7 @@ int t4_cfg_pfvf(struct adapter *adap, unsigned int mbox, unsigned int pf,
+ unsigned int nexact, unsigned int rcaps, unsigned int wxcaps);
+ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port,
+ unsigned int pf, unsigned int vf, unsigned int nmac, u8 *mac,
+- unsigned int *rss_size);
++ unsigned int *rss_size, u8 *vivld, u8 *vin);
+ int t4_free_vi(struct adapter *adap, unsigned int mbox,
+ unsigned int pf, unsigned int vf,
+ unsigned int viid);
+@@ -1773,7 +1781,7 @@ int t4_free_mac_filt(struct adapter *adap, unsigned int mbox,
+ unsigned int viid, unsigned int naddr,
+ const u8 **addr, bool sleep_ok);
+ int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
+- int idx, const u8 *addr, bool persist, bool add_smt);
++ int idx, const u8 *addr, bool persist, u8 *smt_idx);
+ int t4_set_addr_hash(struct adapter *adap, unsigned int mbox, unsigned int viid,
+ bool ucast, u64 vec, bool sleep_ok);
+ int t4_enable_vi_params(struct adapter *adap, unsigned int mbox,
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+index 19fc550f5113..95331ba445d3 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+@@ -454,7 +454,7 @@ static int link_start(struct net_device *dev)
+ if (ret == 0) {
+ ret = t4_change_mac(pi->adapter, mb, pi->viid,
+ pi->xact_addr_filt, dev->dev_addr, true,
+- true);
++ &pi->smt_idx);
+ if (ret >= 0) {
+ pi->xact_addr_filt = ret;
+ ret = 0;
+@@ -1589,28 +1589,6 @@ unsigned int cxgb4_best_aligned_mtu(const unsigned short *mtus,
+ EXPORT_SYMBOL(cxgb4_best_aligned_mtu);
+
+ /**
+- * cxgb4_tp_smt_idx - Get the Source Mac Table index for this VI
+- * @chip: chip type
+- * @viid: VI id of the given port
+- *
+- * Return the SMT index for this VI.
+- */
+-unsigned int cxgb4_tp_smt_idx(enum chip_type chip, unsigned int viid)
+-{
+- /* In T4/T5, SMT contains 256 SMAC entries organized in
+- * 128 rows of 2 entries each.
+- * In T6, SMT contains 256 SMAC entries in 256 rows.
+- * TODO: The below code needs to be updated when we add support
+- * for 256 VFs.
+- */
+- if (CHELSIO_CHIP_VERSION(chip) <= CHELSIO_T5)
+- return ((viid & 0x7f) << 1);
+- else
+- return (viid & 0x7f);
+-}
+-EXPORT_SYMBOL(cxgb4_tp_smt_idx);
+-
+-/**
+ * cxgb4_port_chan - get the HW channel of a port
+ * @dev: the net device for the port
+ *
+@@ -2844,7 +2822,8 @@ static int cxgb_set_mac_addr(struct net_device *dev, void *p)
+ return -EADDRNOTAVAIL;
+
+ ret = t4_change_mac(pi->adapter, pi->adapter->pf, pi->viid,
+- pi->xact_addr_filt, addr->sa_data, true, true);
++ pi->xact_addr_filt, addr->sa_data, true,
++ &pi->smt_idx);
+ if (ret < 0)
+ return ret;
+
+@@ -4439,6 +4418,15 @@ static int adap_init0(struct adapter *adap)
+ adap->params.filter2_wr_support = (ret == 0 && val[0] != 0);
+ }
+
++ /* Check if FW supports returning vin and smt index.
++ * If this is not supported, driver will interpret
++ * these values from viid.
++ */
++ params[0] = FW_PARAM_DEV(OPAQUE_VIID_SMT_EXTN);
++ ret = t4_query_params(adap, adap->mbox, adap->pf, 0,
++ 1, params, val);
++ adap->params.viid_smt_extn_support = (ret == 0 && val[0] != 0);
++
+ /*
+ * Get device capabilities so we can determine what resources we need
+ * to manage.
+@@ -4736,14 +4724,26 @@ static pci_ers_result_t eeh_slot_reset(struct pci_dev *pdev)
+ return PCI_ERS_RESULT_DISCONNECT;
+
+ for_each_port(adap, i) {
+- struct port_info *p = adap2pinfo(adap, i);
++ struct port_info *pi = adap2pinfo(adap, i);
++ u8 vivld = 0, vin = 0;
+
+- ret = t4_alloc_vi(adap, adap->mbox, p->tx_chan, adap->pf, 0, 1,
+- NULL, NULL);
++ ret = t4_alloc_vi(adap, adap->mbox, pi->tx_chan, adap->pf, 0, 1,
++ NULL, NULL, &vivld, &vin);
+ if (ret < 0)
+ return PCI_ERS_RESULT_DISCONNECT;
+- p->viid = ret;
+- p->xact_addr_filt = -1;
++ pi->viid = ret;
++ pi->xact_addr_filt = -1;
++ /* If fw supports returning the VIN as part of FW_VI_CMD,
++ * save the returned values.
++ */
++ if (adap->params.viid_smt_extn_support) {
++ pi->vivld = vivld;
++ pi->vin = vin;
++ } else {
++ /* Retrieve the values from VIID */
++ pi->vivld = FW_VIID_VIVLD_G(pi->viid);
++ pi->vin = FW_VIID_VIN_G(pi->viid);
++ }
+ }
+
+ t4_load_mtus(adap, adap->params.mtus, adap->params.a_wnd,
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
+index baf834a37c6e..16bb44682f2a 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
+@@ -494,14 +494,11 @@ u64 cxgb4_select_ntuple(struct net_device *dev,
+ ntuple |= (u64)IPPROTO_TCP << tp->protocol_shift;
+
+ if (tp->vnic_shift >= 0) {
+- u32 viid = cxgb4_port_viid(dev);
+- u32 vf = FW_VIID_VIN_G(viid);
+- u32 pf = FW_VIID_PFN_G(viid);
+- u32 vld = FW_VIID_VIVLD_G(viid);
+-
+- ntuple |= (u64)(FT_VNID_ID_VF_V(vf) |
+- FT_VNID_ID_PF_V(pf) |
+- FT_VNID_ID_VLD_V(vld)) << tp->vnic_shift;
++ struct port_info *pi = (struct port_info *)netdev_priv(dev);
++
++ ntuple |= (u64)(FT_VNID_ID_VF_V(pi->vin) |
++ FT_VNID_ID_PF_V(adap->pf) |
++ FT_VNID_ID_VLD_V(pi->vivld)) << tp->vnic_shift;
+ }
+
+ return ntuple;
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+index dc5a987bb268..e58aeaea222c 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c
+@@ -7541,7 +7541,7 @@ int t4_cfg_pfvf(struct adapter *adap, unsigned int mbox, unsigned int pf,
+ */
+ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port,
+ unsigned int pf, unsigned int vf, unsigned int nmac, u8 *mac,
+- unsigned int *rss_size)
++ unsigned int *rss_size, u8 *vivld, u8 *vin)
+ {
+ int ret;
+ struct fw_vi_cmd c;
+@@ -7573,6 +7573,13 @@ int t4_alloc_vi(struct adapter *adap, unsigned int mbox, unsigned int port,
+ }
+ if (rss_size)
+ *rss_size = FW_VI_CMD_RSSSIZE_G(be16_to_cpu(c.rsssize_pkd));
++
++ if (vivld)
++ *vivld = FW_VI_CMD_VFVLD_G(be32_to_cpu(c.alloc_to_len16));
++
++ if (vin)
++ *vin = FW_VI_CMD_VIN_G(be32_to_cpu(c.alloc_to_len16));
++
+ return FW_VI_CMD_VIID_G(be16_to_cpu(c.type_viid));
+ }
+
+@@ -7944,7 +7951,7 @@ int t4_free_mac_filt(struct adapter *adap, unsigned int mbox,
+ * MAC value.
+ */
+ int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
+- int idx, const u8 *addr, bool persist, bool add_smt)
++ int idx, const u8 *addr, bool persist, u8 *smt_idx)
+ {
+ int ret, mode;
+ struct fw_vi_mac_cmd c;
+@@ -7953,7 +7960,7 @@ int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
+
+ if (idx < 0) /* new allocation */
+ idx = persist ? FW_VI_MAC_ADD_PERSIST_MAC : FW_VI_MAC_ADD_MAC;
+- mode = add_smt ? FW_VI_MAC_SMT_AND_MPSTCAM : FW_VI_MAC_MPS_TCAM_ENTRY;
++ mode = smt_idx ? FW_VI_MAC_SMT_AND_MPSTCAM : FW_VI_MAC_MPS_TCAM_ENTRY;
+
+ memset(&c, 0, sizeof(c));
+ c.op_to_viid = cpu_to_be32(FW_CMD_OP_V(FW_VI_MAC_CMD) |
+@@ -7970,6 +7977,23 @@ int t4_change_mac(struct adapter *adap, unsigned int mbox, unsigned int viid,
+ ret = FW_VI_MAC_CMD_IDX_G(be16_to_cpu(p->valid_to_idx));
+ if (ret >= max_mac_addr)
+ ret = -ENOMEM;
++ if (smt_idx) {
++ if (adap->params.viid_smt_extn_support) {
++ *smt_idx = FW_VI_MAC_CMD_SMTID_G
++ (be32_to_cpu(c.op_to_viid));
++ } else {
++ /* In T4/T5, SMT contains 256 SMAC entries
++ * organized in 128 rows of 2 entries each.
++ * In T6, SMT contains 256 SMAC entries in
++ * 256 rows.
++ */
++ if (CHELSIO_CHIP_VERSION(adap->params.chip) <=
++ CHELSIO_T5)
++ *smt_idx = (viid & FW_VIID_VIN_M) << 1;
++ else
++ *smt_idx = (viid & FW_VIID_VIN_M);
++ }
++ }
+ }
+ return ret;
+ }
+@@ -9374,6 +9398,7 @@ int t4_init_portinfo(struct port_info *pi, int mbox,
+ enum fw_port_type port_type;
+ int mdio_addr;
+ fw_port_cap32_t pcaps, acaps;
++ u8 vivld = 0, vin = 0;
+ int ret;
+
+ /* If we haven't yet determined whether we're talking to Firmware
+@@ -9428,7 +9453,8 @@ int t4_init_portinfo(struct port_info *pi, int mbox,
+ acaps = be32_to_cpu(cmd.u.info32.acaps32);
+ }
+
+- ret = t4_alloc_vi(pi->adapter, mbox, port, pf, vf, 1, mac, &rss_size);
++ ret = t4_alloc_vi(pi->adapter, mbox, port, pf, vf, 1, mac, &rss_size,
++ &vivld, &vin);
+ if (ret < 0)
+ return ret;
+
+@@ -9437,6 +9463,18 @@ int t4_init_portinfo(struct port_info *pi, int mbox,
+ pi->lport = port;
+ pi->rss_size = rss_size;
+
++ /* If fw supports returning the VIN as part of FW_VI_CMD,
++ * save the returned values.
++ */
++ if (adapter->params.viid_smt_extn_support) {
++ pi->vivld = vivld;
++ pi->vin = vin;
++ } else {
++ /* Retrieve the values from VIID */
++ pi->vivld = FW_VIID_VIVLD_G(pi->viid);
++ pi->vin = FW_VIID_VIN_G(pi->viid);
++ }
++
+ pi->port_type = port_type;
+ pi->mdio_addr = mdio_addr;
+ pi->mod_type = FW_PORT_MOD_TYPE_NA;
+diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+index 35e8915499f8..7003f47f7fa1 100644
+--- a/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
++++ b/drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h
+@@ -1209,6 +1209,7 @@ enum fw_params_param_dev {
+ FW_PARAMS_PARAM_DEV_HMA_SIZE = 0x20,
+ FW_PARAMS_PARAM_DEV_RDMA_WRITE_WITH_IMM = 0x21,
+ FW_PARAMS_PARAM_DEV_RI_WRITE_CMPL_WR = 0x24,
++ FW_PARAMS_PARAM_DEV_OPAQUE_VIID_SMT_EXTN = 0x27,
+ };
+
+ /*
+@@ -2072,6 +2073,19 @@ struct fw_vi_cmd {
+ #define FW_VI_CMD_FREE_V(x) ((x) << FW_VI_CMD_FREE_S)
+ #define FW_VI_CMD_FREE_F FW_VI_CMD_FREE_V(1U)
+
++#define FW_VI_CMD_VFVLD_S 24
++#define FW_VI_CMD_VFVLD_M 0x1
++#define FW_VI_CMD_VFVLD_V(x) ((x) << FW_VI_CMD_VFVLD_S)
++#define FW_VI_CMD_VFVLD_G(x) \
++ (((x) >> FW_VI_CMD_VFVLD_S) & FW_VI_CMD_VFVLD_M)
++#define FW_VI_CMD_VFVLD_F FW_VI_CMD_VFVLD_V(1U)
++
++#define FW_VI_CMD_VIN_S 16
++#define FW_VI_CMD_VIN_M 0xff
++#define FW_VI_CMD_VIN_V(x) ((x) << FW_VI_CMD_VIN_S)
++#define FW_VI_CMD_VIN_G(x) \
++ (((x) >> FW_VI_CMD_VIN_S) & FW_VI_CMD_VIN_M)
++
+ #define FW_VI_CMD_VIID_S 0
+ #define FW_VI_CMD_VIID_M 0xfff
+ #define FW_VI_CMD_VIID_V(x) ((x) << FW_VI_CMD_VIID_S)
+@@ -2137,6 +2151,12 @@ struct fw_vi_mac_cmd {
+ } u;
+ };
+
++#define FW_VI_MAC_CMD_SMTID_S 12
++#define FW_VI_MAC_CMD_SMTID_M 0xff
++#define FW_VI_MAC_CMD_SMTID_V(x) ((x) << FW_VI_MAC_CMD_SMTID_S)
++#define FW_VI_MAC_CMD_SMTID_G(x) \
++ (((x) >> FW_VI_MAC_CMD_SMTID_S) & FW_VI_MAC_CMD_SMTID_M)
++
+ #define FW_VI_MAC_CMD_VIID_S 0
+ #define FW_VI_MAC_CMD_VIID_V(x) ((x) << FW_VI_MAC_CMD_VIID_S)
+
+diff --git a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
+index 038177114944..633cb26bbbc8 100644
+--- a/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
++++ b/drivers/scsi/cxgbi/cxgb4i/cxgb4i.c
+@@ -1686,8 +1686,7 @@ static int init_act_open(struct cxgbi_sock *csk)
+ csk->mtu = dst_mtu(csk->dst);
+ cxgb4_best_mtu(lldi->mtus, csk->mtu, &csk->mss_idx);
+ csk->tx_chan = cxgb4_port_chan(ndev);
+- csk->smac_idx = cxgb4_tp_smt_idx(lldi->adapter_type,
+- cxgb4_port_viid(ndev));
++ csk->smac_idx = ((struct port_info *)netdev_priv(ndev))->smt_idx;
+ step = lldi->ntxq / lldi->nchan;
+ csk->txq_idx = cxgb4_port_idx(ndev) * step;
+ step = lldi->nrxq / lldi->nchan;
+diff --git a/drivers/target/iscsi/cxgbit/cxgbit_cm.c b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
+index 8de16016b6de..61952d4e7e5f 100644
+--- a/drivers/target/iscsi/cxgbit/cxgbit_cm.c
++++ b/drivers/target/iscsi/cxgbit/cxgbit_cm.c
+@@ -916,8 +916,8 @@ cxgbit_offload_init(struct cxgbit_sock *csk, int iptype, __u8 *peer_ip,
+ goto out;
+ csk->mtu = ndev->mtu;
+ csk->tx_chan = cxgb4_port_chan(ndev);
+- csk->smac_idx = cxgb4_tp_smt_idx(cdev->lldi.adapter_type,
+- cxgb4_port_viid(ndev));
++ csk->smac_idx =
++ ((struct port_info *)netdev_priv(ndev))->smt_idx;
+ step = cdev->lldi.ntxq /
+ cdev->lldi.nchan;
+ csk->txq_idx = cxgb4_port_idx(ndev) * step;
+@@ -952,8 +952,8 @@ cxgbit_offload_init(struct cxgbit_sock *csk, int iptype, __u8 *peer_ip,
+ port_id = cxgb4_port_idx(ndev);
+ csk->mtu = dst_mtu(dst);
+ csk->tx_chan = cxgb4_port_chan(ndev);
+- csk->smac_idx = cxgb4_tp_smt_idx(cdev->lldi.adapter_type,
+- cxgb4_port_viid(ndev));
++ csk->smac_idx =
++ ((struct port_info *)netdev_priv(ndev))->smt_idx;
+ step = cdev->lldi.ntxq /
+ cdev->lldi.nports;
+ csk->txq_idx = (port_id * step) +
+--
+2.12.3
+
diff --git a/series.conf b/series.conf
index 9571d90bae..30c3015a82 100644
--- a/series.conf
+++ b/series.conf
@@ -20318,6 +20318,7 @@
patches.suse/r8169-use-PCI_VDEVICE-macro.patch
patches.fixes/0001-cxgb4-cxgb4vf-Fix-mac_hlist-initialization-and-free.patch
patches.fixes/net-bcmgenet-remove-HFB_CTRL-access.patch
+ patches.fixes/0001-cxgb4-use-new-fw-interface-to-get-the-VIN-and-smt-in.patch
patches.fixes/ptp-Fix-pass-zero-to-ERR_PTR-in-ptp_clock_register.patch
patches.drivers/can-flexcan-flexcan_irq-fix-indention.patch
patches.drivers/wlcore-Fix-the-return-value-in-case-of-error-in-wlco.patch