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 # Network Drivers
# #
# i40evf-kmod # iavf-kmod
kmod-i40evf kmod-iavf
# i40e-kmod # i40e-kmod
kmod-i40e kmod-i40e

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
COPY_LIST=" \ COPY_LIST=" \
$PKG_BASE/files/* \ $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 TIS_PATCH_VER=1

View File

@ -8,7 +8,7 @@
%define kmod_name i40e %define kmod_name i40e
Name: %{kmod_name}-kmod%{?bt_ext} Name: %{kmod_name}-kmod%{?bt_ext}
Version: 2.7.29 Version: 2.10.19.30
Release: 0%{?_tis_dist}.%{tis_patch_ver} Release: 0%{?_tis_dist}.%{tis_patch_ver}
Group: System Environment/Kernel Group: System Environment/Kernel
License: GPLv2 License: GPLv2
@ -25,7 +25,6 @@ Source11: modules-load.conf
Patch01: i40e-Enable-getting-link-status-from-VF.patch Patch01: i40e-Enable-getting-link-status-from-VF.patch
Patch02: i40e-add-more-debug-info-for-VFs-still-in-reset.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-//') %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 From b8c666367cd98a2b0033c043f6f206abd8e238a6 Mon Sep 17 00:00:00 2001
Message-Id: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> Message-Id: <b8c666367cd98a2b0033c043f6f206abd8e238a6.1572295393.git.Jim.Somerville@windriver.com>
From: Vadim Suraev <vsuraev@northforgeinc.com> From: Vadim Suraev <vsuraev@northforgeinc.com>
Date: Mon, 8 Feb 2016 15:57:30 -0500 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 Add handling of custom OP code sent from the PMD VF to get link status via the
virtual channel interface. virtual channel interface.
@ -16,10 +16,10 @@ Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com>
2 files changed, 79 insertions(+) 2 files changed, 79 insertions(+)
diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c 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 --- a/src/i40e_virtchnl_pf.c
+++ b/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); aq_ret);
} }
@ -101,7 +101,7 @@ index 020bacb..126ec19 100644
/** /**
* i40e_vc_config_queues_msg * i40e_vc_config_queues_msg
* @vf: pointer to the VF info * @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: case VIRTCHNL_OP_REQUEST_QUEUES:
ret = i40e_vc_request_queues_msg(vf, msg); ret = i40e_vc_request_queues_msg(vf, msg);
break; break;
@ -112,17 +112,17 @@ index 020bacb..126ec19 100644
case VIRTCHNL_OP_ENABLE_CHANNELS: case VIRTCHNL_OP_ENABLE_CHANNELS:
ret = i40e_vc_add_qch_msg(vf, msg); ret = i40e_vc_add_qch_msg(vf, msg);
diff --git a/src/virtchnl.h b/src/virtchnl.h diff --git a/src/virtchnl.h b/src/virtchnl.h
index afde603..b9b38c0 100644 index a22cc43..d3d9324 100644
--- a/src/virtchnl.h --- a/src/virtchnl.h
+++ b/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_DISABLE_CHANNELS = 31,
VIRTCHNL_OP_ADD_CLOUD_FILTER = 32, VIRTCHNL_OP_ADD_CLOUD_FILTER = 32,
VIRTCHNL_OP_DEL_CLOUD_FILTER = 33, VIRTCHNL_OP_DEL_CLOUD_FILTER = 33,
+ VIRTCHNL_OP_GET_LINK_STAT = 0x101, + VIRTCHNL_OP_GET_LINK_STAT = 0x101,
}; };
/* These macros are used to generate compilation errors if a structure/union
-- --
1.8.3.1 1.8.3.1

View File

@ -1,10 +1,10 @@
From d60e87567eb5418fbb848bf30f72d3d8bec3bad6 Mon Sep 17 00:00:00 2001 From 40b257ecf5d36abf14a4ef98fc2e44dba7100fea Mon Sep 17 00:00:00 2001
Message-Id: <d60e87567eb5418fbb848bf30f72d3d8bec3bad6.1528830095.git.Jim.Somerville@windriver.com> Message-Id: <40b257ecf5d36abf14a4ef98fc2e44dba7100fea.1572295393.git.Jim.Somerville@windriver.com>
In-Reply-To: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> In-Reply-To: <b8c666367cd98a2b0033c043f6f206abd8e238a6.1572295393.git.Jim.Somerville@windriver.com>
References: <412fdc8c0d51500e42e76e788ece3ca7dd260ced.1528830095.git.Jim.Somerville@windriver.com> References: <b8c666367cd98a2b0033c043f6f206abd8e238a6.1572295393.git.Jim.Somerville@windriver.com>
From: Jim Somerville <Jim.Somerville@windriver.com> From: Jim Somerville <Jim.Somerville@windriver.com>
Date: Mon, 26 Mar 2018 11:03:47 -0400 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> 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(-) 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/i40e_virtchnl_pf.c b/src/i40e_virtchnl_pf.c 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 --- a/src/i40e_virtchnl_pf.c
+++ b/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]; vf = &pf->vf[vf_id];
vsi = pf->vsi[vf->lan_vsi_idx]; vsi = pf->vsi[vf->lan_vsi_idx];
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
@ -26,7 +37,7 @@ index 126ec19..da29fc3 100644
ret = -EAGAIN; ret = -EAGAIN;
goto error_pvid; 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]; vf = &pf->vf[vf_id];
vsi = pf->vsi[vf->lan_vsi_idx]; vsi = pf->vsi[vf->lan_vsi_idx];
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) {
@ -37,18 +48,7 @@ index 126ec19..da29fc3 100644
ret = -EAGAIN; ret = -EAGAIN;
goto error; goto error;
} }
@@ -4844,8 +4844,8 @@ int i40e_ndo_get_vf_config(struct net_device *netdev, @@ -4881,8 +4881,8 @@ int i40e_ndo_set_vf_spoofchk(struct net_device *netdev, int vf_id, bool enable)
/* 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)
vf = &(pf->vf[vf_id]); vf = &(pf->vf[vf_id]);
if (!test_bit(I40E_VF_STATE_INIT, &vf->vf_states)) { 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=" \ COPY_LIST=" \
$PKG_BASE/files/* \ $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 TIS_PATCH_VER=1

View File

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

View File

@ -0,0 +1 @@
iavf