i40e Driver Upgrade in support of N3000 on-board NICs

Uprev i40e to version 2.10.19.30
i40evf gets replaced by iavf version 3.7.61.20

The iavf driver supports both fortville and columbiaville,
so they decided to rename from i40evf to something more generic.

We get to drop the patch which polls for coming out of
reset as it was incorporated upstream.

The Intel FPGA Programmable Acceleration Card N3000 contains
dual Intel XL710 NICs and an FPGA for acceleration purposes.
This driver upgrade is required to support those NICs.

Change-Id: Ifbec94bcc00a8cce9fe97bf0eb41556b8bd3e592
Story: 2006740
Task: 37542
Depends-On: https://review.opendev.org/#/c/695061
Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
This commit is contained in:
Jim Somerville 2019-10-29 15:39:05 -04:00
parent 5afd5f90b2
commit 2718976ddc
15 changed files with 61 additions and 111 deletions

View File

@ -10,8 +10,8 @@ perf
# Network Drivers
#
# i40evf-kmod
kmod-i40evf
# iavf-kmod
kmod-iavf
# i40e-kmod
kmod-i40e

View File

@ -7,8 +7,8 @@
# Network Drivers
#
# i40evf-kmod
kmod-i40evf-rt
# iavf-kmod
kmod-iavf-rt
# i40e-kmod
kmod-i40e-rt

View File

@ -80,9 +80,9 @@ kmod-e1000e-rt
kmod-i40e
kmod-i40e-rt
# i40evf-kmod
kmod-i40evf
kmod-i40evf-rt
# iavf-kmod
kmod-iavf
kmod-iavf-rt
# ixgbevf-kmod
kmod-ixgbevf

View File

@ -65,7 +65,7 @@ kubernetes/etcd
kubernetes/helm
grub/grubby
kernel/kernel-modules/intel-e1000e
kernel/kernel-modules/intel-i40evf
kernel/kernel-modules/intel-iavf
kernel/kernel-modules/intel-i40e
kernel/kernel-modules/intel-ixgbevf
kernel/kernel-modules/intel-ixgbe

View File

@ -3,7 +3,7 @@ networking/mellanox/libibverbs
kernel/kernel-modules/mlnx-ofa_kernel
networking/mellanox/rdma-core
kernel/kernel-modules/intel-e1000e
kernel/kernel-modules/intel-i40evf
kernel/kernel-modules/intel-iavf
kernel/kernel-modules/intel-i40e
kernel/kernel-modules/intel-ixgbevf
kernel/kernel-modules/intel-ixgbe

View File

@ -1,4 +1,4 @@
COPY_LIST=" \
$PKG_BASE/files/* \
$STX_BASE/downloads/i40e-2.7.29.tar.gz"
$STX_BASE/downloads/i40e-2.10.19.30.tar.gz"
TIS_PATCH_VER=1

View File

@ -8,7 +8,7 @@
%define kmod_name i40e
Name: %{kmod_name}-kmod%{?bt_ext}
Version: 2.7.29
Version: 2.10.19.30
Release: 0%{?_tis_dist}.%{tis_patch_ver}
Group: System Environment/Kernel
License: GPLv2
@ -25,7 +25,6 @@ Source11: modules-load.conf
Patch01: i40e-Enable-getting-link-status-from-VF.patch
Patch02: i40e-add-more-debug-info-for-VFs-still-in-reset.patch
Patch03: ndo_get_vf_config-poll-for-out-of-vf-reset.patch
%define kversion %(rpm -q kernel%{?bt_ext}-devel | sort --version-sort | tail -1 | sed 's/kernel%{?bt_ext}-devel-//')

View File

@ -1,8 +1,8 @@
From 412fdc8c0d51500e42e76e788ece3ca7dd260ced Mon Sep 17 00:00:00 2001
Message-Id: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com>
From b8c666367cd98a2b0033c043f6f206abd8e238a6 Mon Sep 17 00:00:00 2001
Message-Id: <b8c666367cd98a2b0033c043f6f206abd8e238a6.1572295393.git.Jim.Somerville@windriver.com>
From: Vadim Suraev <vsuraev@northforgeinc.com>
Date: Mon, 8 Feb 2016 15:57:30 -0500
Subject: [PATCH 1/3] i40e: Enable getting link status from VF
Subject: [PATCH 1/2] i40e: Enable getting link status from VF
Add handling of custom OP code sent from the PMD VF to get link status via the
virtual channel interface.
@ -16,10 +16,10 @@ Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
2 files changed, 79 insertions(+)
diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c
index 020bacb..126ec19 100644
index 9e48f0d..21b4606 100644
--- a/src/i40e_virtchnl_pf.c
+++ b/src/i40e_virtchnl_pf.c
@@ -2559,6 +2559,81 @@ static int i40e_vc_config_promiscuous_mode_msg(struct i40e_vf *vf, u8 *msg)
@@ -2467,6 +2467,81 @@ err_out:
aq_ret);
}
@ -101,7 +101,7 @@ index 020bacb..126ec19 100644
/**
* i40e_vc_config_queues_msg
* @vf: pointer to the VF info
@@ -4300,6 +4375,9 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode,
@@ -4166,6 +4241,9 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode,
case VIRTCHNL_OP_REQUEST_QUEUES:
ret = i40e_vc_request_queues_msg(vf, msg);
break;
@ -112,17 +112,17 @@ index 020bacb..126ec19 100644
case VIRTCHNL_OP_ENABLE_CHANNELS:
ret = i40e_vc_add_qch_msg(vf, msg);
diff --git a/src/virtchnl.h b/src/virtchnl.h
index afde603..b9b38c0 100644
index a22cc43..d3d9324 100644
--- a/src/virtchnl.h
+++ b/src/virtchnl.h
@@ -124,6 +124,7 @@ enum virtchnl_ops {
@@ -128,6 +128,7 @@ enum virtchnl_ops {
VIRTCHNL_OP_DISABLE_CHANNELS = 31,
VIRTCHNL_OP_ADD_CLOUD_FILTER = 32,
VIRTCHNL_OP_DEL_CLOUD_FILTER = 33,
+ VIRTCHNL_OP_GET_LINK_STAT = 0x101,
};
/* These macros are used to generate compilation errors if a structure/union
--
1.8.3.1

View File

@ -1,10 +1,10 @@
From d60e87567eb5418fbb848bf30f72d3d8bec3bad6 Mon Sep 17 00:00:00 2001
Message-Id: <d60e87567eb5418fbb848bf30f72d3d8bec3bad6.1528830095.git.Jim.Somerville@windriver.com>
In-Reply-To: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com>
References: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com>
From 40b257ecf5d36abf14a4ef98fc2e44dba7100fea Mon Sep 17 00:00:00 2001
Message-Id: <40b257ecf5d36abf14a4ef98fc2e44dba7100fea.1572295393.git.Jim.Somerville@windriver.com>
In-Reply-To: <b8c666367cd98a2b0033c043f6f206abd8e238a6.1572295393.git.Jim.Somerville@windriver.com>
References: <b8c666367cd98a2b0033c043f6f206abd8e238a6.1572295393.git.Jim.Somerville@windriver.com>
From: Jim Somerville <Jim.Somerville@windriver.com>
Date: Mon, 26 Mar 2018 11:03:47 -0400
Subject: [PATCH 2/3] i40e add more debug info for VFs still in reset
Subject: [PATCH 2/2] i40e add more debug info for VFs still in reset
Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
---
@ -12,10 +12,21 @@ Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c
index 126ec19..da29fc3 100644
index 21b4606..dfb9568 100644
--- a/src/i40e_virtchnl_pf.c
+++ b/src/i40e_virtchnl_pf.c
@@ -4650,8 +4650,8 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev,
@@ -4363,8 +4363,8 @@ static int i40e_set_vf_mac(struct i40e_vf *vf, struct i40e_vsi *vsi,
msleep(20);
}
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
- dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n",
- vf->vf_id);
+ dev_err(&pf->pdev->dev, "%s: VF %d still in reset. Try again.\n",
+ __func__, vf->vf_id);
ret = -EAGAIN;
goto error_param;
}
@@ -4522,8 +4522,8 @@ int i40e_ndo_set_vf_port_vlan(struct net_device *netdev,
vf = &pf->vf[vf_id];
vsi = pf->vsi[vf->lan_vsi_idx];
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
@ -26,7 +37,7 @@ index 126ec19..da29fc3 100644
ret = -EAGAIN;
goto error_pvid;
}
@@ -4784,8 +4784,8 @@ int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int max_tx_rate)
@@ -4678,8 +4678,8 @@ int i40e_ndo_set_vf_bw(struct net_device *netdev, int vf_id, int max_tx_rate)
vf = &pf->vf[vf_id];
vsi = pf->vsi[vf->lan_vsi_idx];
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
@ -37,18 +48,7 @@ index 126ec19..da29fc3 100644
ret = -EAGAIN;
goto error;
}
@@ -4844,8 +4844,8 @@ int i40e_ndo_get_vf_config(struct net_device *netdev,
/* first vsi is always the LAN vsi */
vsi = pf->vsi[vf->lan_vsi_idx];
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
- dev_err(&pf->pdev->dev, "VF %d still in reset. Try again.\n",
- vf_id);
+ dev_err(&pf->pdev->dev, "%s: VF %d still in reset. Try again.\n",
+ __func__, vf_id);
ret = -EAGAIN;
goto error_param;
}
@@ -4989,8 +4989,8 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable)
@@ -4881,8 +4881,8 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable)
vf = &(pf->vf[vf_id]);
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {

View File

@ -1,49 +0,0 @@
From 25b521f58b33bf070c0b31d077333c13c3ad25e8 Mon Sep 17 00:00:00 2001
Message-Id: <25b521f58b33bf070c0b31d077333c13c3ad25e8.1528830095.git.Jim.Somerville@windriver.com>
In-Reply-To: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com>
References: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com>
From: Jim Somerville <Jim.Somerville@windriver.com>
Date: Mon, 2 Apr 2018 15:35:12 -0400
Subject: [PATCH 3/3] ndo_get_vf_config poll for out of vf reset
Same solution as 028daf80117376b22909becd9720daaefdfceff4 from the
net-next tree as supplied by Intel, but we apply it to
ndo_get_vf_config instead.
Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
---
src/i40e_virtchnl_pf.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c
index da29fc3..d5935d6 100644
--- a/src/i40e_virtchnl_pf.c
+++ b/src/i40e_virtchnl_pf.c
@@ -4829,6 +4829,7 @@ int i40e_ndo_get_vf_config(struct net_device *netdev,
struct i40e_pf *pf = vsi->back;
struct i40e_vf *vf;
int ret = 0;
+ u8 i;
if (test_and_set_bit(__I40E_VIRTCHNL_OP_PENDING, pf->state)) {
dev_warn(&pf->pdev->dev, "Unable to configure VFs, other operation is pending.\n");
@@ -4843,6 +4844,16 @@ int i40e_ndo_get_vf_config(struct net_device *netdev,
vf = &pf->vf[vf_id];
/* first vsi is always the LAN vsi */
vsi = pf->vsi[vf->lan_vsi_idx];
+
+ /* When the VF is resetting wait until it is done.
+ * It can take up to 200 milliseconds,
+ * but wait for up to 300 milliseconds to be safe.
+ */
+ for (i = 0; i < 15; i++) {
+ if (test_bit(I40E_VF_STATE_INIT, &vf->vf_states))
+ break;
+ msleep(20);
+ }
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
dev_err(&pf->pdev->dev, "%s: VF %d still in reset. Try again.\n",
__func__, vf_id);
--
1.8.3.1

View File

@ -1,4 +1,4 @@
COPY_LIST=" \
$PKG_BASE/files/* \
$STX_BASE/downloads/i40evf-3.6.15.tar.gz"
$STX_BASE/downloads/iavf-3.7.61.20.tar.gz"
TIS_PATCH_VER=1

View File

@ -5,10 +5,10 @@
%endif
# Define the kmod package name here.
%define kmod_name i40evf
%define kmod_name iavf
Name: %{kmod_name}-kmod%{?bt_ext}
Version: 3.6.15
Version: 3.7.61.20
Release: 0%{?_tis_dist}.%{tis_patch_ver}
Group: System Environment/Kernel
License: GPLv2
@ -25,52 +25,52 @@ Source11: modules-load.conf
%define kversion %(rpm -q kernel%{?bt_ext}-devel | sort --version-sort | tail -1 | sed 's/kernel%{?bt_ext}-devel-//')
%package -n kmod-i40evf%{?bt_ext}
Summary: i40evf kernel module(s)
%package -n kmod-iavf%{?bt_ext}
Summary: iavf kernel module(s)
Group: System Environment/Kernel
%global _use_internal_dependency_generator 0
Provides: kernel-modules >= %{kversion}
Provides: i40evf-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Provides: iavf-kmod = %{?epoch:%{epoch}:}%{version}-%{release}
Requires(post): /usr/sbin/depmod
Requires(postun): /usr/sbin/depmod
%description -n kmod-i40evf%{?bt_ext}
This package provides the i40evf kernel module(s) built
%description -n kmod-iavf%{?bt_ext}
This package provides the iavf kernel module(s) built
for the Linux kernel using the %{_target_cpu} family of processors.
%post -n kmod-i40evf%{?bt_ext}
%post -n kmod-iavf%{?bt_ext}
echo "Working. This may take some time ..."
if [ -e "/boot/System.map-%{kversion}" ]; then
/usr/sbin/depmod -aeF "/boot/System.map-%{kversion}" "%{kversion}" > /dev/null || :
fi
modules=( $(find /lib/modules/%{kversion}/extra/i40evf | grep '\.ko$') )
modules=( $(find /lib/modules/%{kversion}/extra/iavf | grep '\.ko$') )
if [ -x "/sbin/weak-modules" ]; then
printf '%s\n' "${modules[@]}" | /sbin/weak-modules --add-modules
fi
echo "Done."
%preun -n kmod-i40evf%{?bt_ext}
rpm -ql kmod-i40evf%{?bt_ext}-%{version}-%{release}.x86_64 | grep '\.ko$' > /var/run/rpm-kmod-i40evf%{?bt_ext}-modules
%preun -n kmod-iavf%{?bt_ext}
rpm -ql kmod-iavf%{?bt_ext}-%{version}-%{release}.x86_64 | grep '\.ko$' > /var/run/rpm-kmod-iavf%{?bt_ext}-modules
%postun -n kmod-i40evf%{?bt_ext}
%postun -n kmod-iavf%{?bt_ext}
echo "Working. This may take some time ..."
if [ -e "/boot/System.map-%{kversion}" ]; then
/usr/sbin/depmod -aeF "/boot/System.map-%{kversion}" "%{kversion}" > /dev/null || :
fi
modules=( $(cat /var/run/rpm-kmod-i40evf%{?bt_ext}-modules) )
rm /var/run/rpm-kmod-i40evf%{?bt_ext}-modules
modules=( $(cat /var/run/rpm-kmod-iavf%{?bt_ext}-modules) )
rm /var/run/rpm-kmod-iavf%{?bt_ext}-modules
if [ -x "/sbin/weak-modules" ]; then
printf '%s\n' "${modules[@]}" | /sbin/weak-modules --remove-modules
fi
echo "Done."
%files -n kmod-i40evf%{?bt_ext}
%files -n kmod-iavf%{?bt_ext}
%defattr(644,root,root,755)
/lib/modules/%{kversion}/
%config(noreplace)/etc/depmod.d/kmod-i40evf.conf
%doc /usr/share/doc/kmod-i40evf-%{version}/
%config(noreplace)/etc/depmod.d/kmod-iavf.conf
%doc /usr/share/doc/kmod-iavf-%{version}/
%doc /usr/share/man/man7/
%{_sysconfdir}/modules-load.d/i40evf.conf
%{_sysconfdir}/modules-load.d/iavf.conf
# Disable the building of the debug package(s).
%define debug_package %{nil}
@ -102,7 +102,7 @@ popd >/dev/null
%{__install} -d %{buildroot}%{_mandir}/man7/
%{__install} %{kmod_name}.7.gz %{buildroot}%{_mandir}/man7/
%{__install} -d %{buildroot}%{_sysconfdir}/modules-load.d
%{__install} -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/modules-load.d/i40evf.conf
%{__install} -m 644 %{SOURCE11} %{buildroot}%{_sysconfdir}/modules-load.d/iavf.conf
# Strip the modules(s).
find %{buildroot} -type f -name \*.ko -exec %{__strip} --strip-debug \{\} \;

View File

@ -0,0 +1 @@
iavf