Skip to content

Commit ba15208

Browse files
committed
ice(4): Introduce new driver for Intel E800 Ethernet controllers
The ice(4) driver is the driver for the Intel E8xx series Ethernet controllers; currently with codenames Columbiaville and Columbia Park. These new controllers support 100G speeds, as well as introducing more queues, better virtualization support, and more offload capabilities. Future work will enable virtual functions (like in ixl(4)) and the other functionality outlined above. For full functionality, the kernel should be compiled with "device ice_ddp" like in the amd64 NOTES file, and/or ice_ddp_load="YES" should be added to /boot/loader.conf so that the DDP package file included in this commit can be downloaded to the adapter. Otherwise, the adapter will fall back to a single queue mode with limited functionality. A man page for this driver will be forthcoming. MFC after: 1 month Relnotes: yes Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D21959
1 parent 18da85d commit ba15208

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+64254
-0
lines changed

MAINTAINERS

+2
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,12 @@ sys/compat/linuxkpi hselasky If in doubt, ask.
9999
#x11 phabricator group.
100100
(to avoid drm graphics drivers
101101
impact)
102+
sys/contrib/dev/ice erj Pre-commit phabricator review requested.
102103
sys/contrib/ipfilter cy Pre-commit review requested.
103104
sys/dev/e1000 erj Pre-commit phabricator review requested.
104105
sys/dev/ixgbe erj Pre-commit phabricator review requested.
105106
sys/dev/ixl erj Pre-commit phabricator review requested.
107+
sys/dev/ice erj Pre-commit phabricator review requested.
106108
sys/dev/sound/usb hselasky If in doubt, ask.
107109
sys/dev/usb hselasky If in doubt, ask.
108110
sys/dev/xen royger Pre-commit review recommended.

sys/amd64/conf/GENERIC

+1
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ device ix # Intel PRO/10GbE PCIE PF Ethernet
245245
device ixv # Intel PRO/10GbE PCIE VF Ethernet
246246
device ixl # Intel 700 Series Physical Function
247247
device iavf # Intel Adaptive Virtual Function
248+
device ice # Intel 800 Series Physical Function
248249
device vmx # VMware VMXNET3 Ethernet
249250

250251
# PCI Ethernet NICs.

sys/amd64/conf/NOTES

+4
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,8 @@ device cpufreq
291291

292292
# bxe: Broadcom NetXtreme II (BCM5771X/BCM578XX) PCIe 10Gb Ethernet
293293
# adapters.
294+
# ice: Intel 800 Series Physical Function
295+
# Requires the ice_ddp module for full functionality
294296
# ipw: Intel PRO/Wireless 2100 IEEE 802.11 adapter
295297
# Requires the ipw firmware module
296298
# iwi: Intel PRO/Wireless 2200BG/2225BG/2915ABG IEEE 802.11 adapters
@@ -316,6 +318,8 @@ device iwi # Intel 2200BG/2225BG/2915ABG wireless NICs.
316318
device iwn # Intel 4965/1000/5000/6000 wireless NICs.
317319
device ixl # Intel 700 Series Physical Function
318320
device iavf # Intel Adaptive Virtual Function
321+
device ice # Intel 800 Series Physical Function
322+
device ice_ddp # Intel 800 Series DDP Package
319323
device mthca # Mellanox HCA InfiniBand
320324
device mlx4 # Shared code module between IB and Ethernet
321325
device mlx4ib # Mellanox ConnectX HCA InfiniBand

sys/arm64/conf/NOTES

+2
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,8 @@ device vnic # Cavium ThunderX NIC
8383
device al_eth # Annapurna Alpine Ethernet NIC
8484
device dwc_rk # Rockchip Designware
8585
device dwc_socfpga # Altera SOCFPGA Ethernet MAC
86+
device ice # Intel 800 Series Physical Function
87+
device ice_ddp # Intel 800 Series DDP Package
8688

8789
# Etherswitch devices
8890
device e6000sw # Marvell mv88e6085 based switches

sys/conf/files.amd64

+46
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,52 @@ dev/agp/agp_via.c optional agp
144144
dev/amdgpio/amdgpio.c optional amdgpio
145145
dev/hyperv/vmbus/amd64/hyperv_machdep.c optional hyperv
146146
dev/hyperv/vmbus/amd64/vmbus_vector.S optional hyperv
147+
dev/ice/if_ice_iflib.c optional ice pci \
148+
compile-with "${NORMAL_C} -I$S/dev/ice"
149+
dev/ice/ice_lib.c optional ice pci \
150+
compile-with "${NORMAL_C} -I$S/dev/ice"
151+
dev/ice/ice_osdep.c optional ice pci \
152+
compile-with "${NORMAL_C} -I$S/dev/ice"
153+
dev/ice/ice_resmgr.c optional ice pci \
154+
compile-with "${NORMAL_C} -I$S/dev/ice"
155+
dev/ice/ice_strings.c optional ice pci \
156+
compile-with "${NORMAL_C} -I$S/dev/ice"
157+
dev/ice/ice_iflib_recovery_txrx.c optional ice pci \
158+
compile-with "${NORMAL_C} -I$S/dev/ice"
159+
dev/ice/ice_iflib_txrx.c optional ice pci \
160+
compile-with "${NORMAL_C} -I$S/dev/ice"
161+
dev/ice/ice_common.c optional ice pci \
162+
compile-with "${NORMAL_C} -I$S/dev/ice"
163+
dev/ice/ice_controlq.c optional ice pci \
164+
compile-with "${NORMAL_C} -I$S/dev/ice"
165+
dev/ice/ice_dcb.c optional ice pci \
166+
compile-with "${NORMAL_C} -I$S/dev/ice"
167+
dev/ice/ice_flex_pipe.c optional ice pci \
168+
compile-with "${NORMAL_C} -I$S/dev/ice"
169+
dev/ice/ice_flow.c optional ice pci \
170+
compile-with "${NORMAL_C} -I$S/dev/ice"
171+
dev/ice/ice_nvm.c optional ice pci \
172+
compile-with "${NORMAL_C} -I$S/dev/ice"
173+
dev/ice/ice_sched.c optional ice pci \
174+
compile-with "${NORMAL_C} -I$S/dev/ice"
175+
dev/ice/ice_sriov.c optional ice pci \
176+
compile-with "${NORMAL_C} -I$S/dev/ice"
177+
dev/ice/ice_switch.c optional ice pci \
178+
compile-with "${NORMAL_C} -I$S/dev/ice"
179+
ice_ddp.c optional ice_ddp \
180+
compile-with "${AWK} -f $S/tools/fw_stub.awk ice_ddp.fw:ice_ddp:0x01030900 -mice_ddp -c${.TARGET}" \
181+
no-implicit-rule before-depend local \
182+
clean "ice_ddp.c"
183+
ice_ddp.fwo optional ice_ddp \
184+
dependency "ice_ddp.fw" \
185+
compile-with "${NORMAL_FWO}" \
186+
no-implicit-rule \
187+
clean "ice_ddp.fwo"
188+
ice_ddp.fw optional ice_ddp \
189+
dependency "$S/contrib/dev/ice/ice-1.3.9.0.pkg" \
190+
compile-with "${CP} $S/contrib/dev/ice/ice-1.3.9.0.pkg ice_ddp.fw" \
191+
no-obj no-implicit-rule \
192+
clean "ice_ddp.fw"
147193
dev/ioat/ioat.c optional ioat pci
148194
dev/ioat/ioat_test.c optional ioat pci
149195
dev/ixl/if_ixl.c optional ixl pci \

sys/conf/files.arm64

+46
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,52 @@ dev/axgbe/xgbe-dev.c optional axgbe
240240
dev/axgbe/xgbe-drv.c optional axgbe
241241
dev/axgbe/xgbe-mdio.c optional axgbe
242242
dev/cpufreq/cpufreq_dt.c optional cpufreq fdt
243+
dev/ice/if_ice_iflib.c optional ice pci \
244+
compile-with "${NORMAL_C} -I$S/dev/ice"
245+
dev/ice/ice_lib.c optional ice pci \
246+
compile-with "${NORMAL_C} -I$S/dev/ice"
247+
dev/ice/ice_osdep.c optional ice pci \
248+
compile-with "${NORMAL_C} -I$S/dev/ice"
249+
dev/ice/ice_resmgr.c optional ice pci \
250+
compile-with "${NORMAL_C} -I$S/dev/ice"
251+
dev/ice/ice_strings.c optional ice pci \
252+
compile-with "${NORMAL_C} -I$S/dev/ice"
253+
dev/ice/ice_iflib_recovery_txrx.c optional ice pci \
254+
compile-with "${NORMAL_C} -I$S/dev/ice"
255+
dev/ice/ice_iflib_txrx.c optional ice pci \
256+
compile-with "${NORMAL_C} -I$S/dev/ice"
257+
dev/ice/ice_common.c optional ice pci \
258+
compile-with "${NORMAL_C} -I$S/dev/ice"
259+
dev/ice/ice_controlq.c optional ice pci \
260+
compile-with "${NORMAL_C} -I$S/dev/ice"
261+
dev/ice/ice_dcb.c optional ice pci \
262+
compile-with "${NORMAL_C} -I$S/dev/ice"
263+
dev/ice/ice_flex_pipe.c optional ice pci \
264+
compile-with "${NORMAL_C} -I$S/dev/ice"
265+
dev/ice/ice_flow.c optional ice pci \
266+
compile-with "${NORMAL_C} -I$S/dev/ice"
267+
dev/ice/ice_nvm.c optional ice pci \
268+
compile-with "${NORMAL_C} -I$S/dev/ice"
269+
dev/ice/ice_sched.c optional ice pci \
270+
compile-with "${NORMAL_C} -I$S/dev/ice"
271+
dev/ice/ice_sriov.c optional ice pci \
272+
compile-with "${NORMAL_C} -I$S/dev/ice"
273+
dev/ice/ice_switch.c optional ice pci \
274+
compile-with "${NORMAL_C} -I$S/dev/ice"
275+
ice_ddp.c optional ice_ddp \
276+
compile-with "${AWK} -f $S/tools/fw_stub.awk ice_ddp.fw:ice_ddp:0x01030900 -mice_ddp -c${.TARGET}" \
277+
no-implicit-rule before-depend local \
278+
clean "ice_ddp.c"
279+
ice_ddp.fwo optional ice_ddp \
280+
dependency "ice_ddp.fw" \
281+
compile-with "${NORMAL_FWO}" \
282+
no-implicit-rule \
283+
clean "ice_ddp.fwo"
284+
ice_ddp.fw optional ice_ddp \
285+
dependency "$S/contrib/dev/ice/ice-1.3.9.0.pkg" \
286+
compile-with "${CP} $S/contrib/dev/ice/ice-1.3.9.0.pkg ice_ddp.fw" \
287+
no-obj no-implicit-rule \
288+
clean "ice_ddp.fw"
243289
dev/iicbus/sy8106a.c optional sy8106a fdt
244290
dev/iicbus/twsi/mv_twsi.c optional twsi fdt
245291
dev/iicbus/twsi/a10_twsi.c optional twsi fdt

sys/contrib/dev/ice/LICENSE

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
Copyright (c) 2006-2018, Intel Corporation.
2+
All rights reserved.
3+
4+
Redistribution. Redistribution and use in binary form, without
5+
modification, are permitted provided that the following conditions are
6+
met:
7+
8+
* Redistributions must reproduce the above copyright notice and the
9+
following disclaimer in the documentation and/or other materials
10+
provided with the distribution.
11+
* Neither the name of Intel Corporation nor the names of its suppliers
12+
may be used to endorse or promote products derived from this software
13+
without specific prior written permission.
14+
* No reverse engineering, decompilation, or disassembly of this software
15+
is permitted.
16+
17+
Limited patent license. Intel Corporation grants a world-wide,
18+
royalty-free, non-exclusive license under patents it now or hereafter
19+
owns or controls to make, have made, use, import, offer to sell and
20+
sell ("Utilize") this software, but solely to the extent that any
21+
such patent is necessary to Utilize the software alone, or in
22+
combination with an operating system licensed under an approved Open
23+
Source license as listed by the Open Source Initiative at
24+
http://opensource.org/licenses. The patent license shall not apply to
25+
any other combinations which include this software. No hardware per
26+
se is licensed hereunder.
27+
28+
DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
29+
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
30+
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32+
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
33+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34+
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
35+
OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
36+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
37+
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
38+
USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
39+
DAMAGE.
40+
41+

sys/contrib/dev/ice/README

+197
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
Dynamic Device Personalization (DDP) Package
2+
============================================
3+
February 21, 2020
4+
5+
6+
Contents
7+
========
8+
- Overview
9+
- Safe Mode
10+
- Notes
11+
- Installation & Troubleshooting
12+
- Legal
13+
14+
15+
Overview
16+
========
17+
Adapters based on the Intel(R) Ethernet Controller 800 Series require a Dynamic
18+
Device Personalization (DDP) package file to enable advanced features (such as
19+
dynamic tunneling, Flow Director, RSS, and ADQ).
20+
21+
DDP allows you to change the packet processing pipeline of a device by applying
22+
a profile package to the device at runtime. Profiles can be used to, for
23+
example, add support for new protocols, change existing protocols, or change
24+
default settings. DDP profiles can also be rolled back without rebooting the
25+
system.
26+
27+
The DDP package loads during device initialization. The driver checks to see if
28+
the DDP package is present and compatible. If this file exists, the driver will
29+
load it into the device. If the DDP package file is missing or incompatible
30+
with the driver, the driver will go into Safe Mode where it will use the
31+
configuration contained in the device's NVM. See "Safe Mode" later in this
32+
README for more information.
33+
34+
A general purpose, OS-default DDP package is automatically installed with all
35+
supported Intel Ethernet Controller 800 Series drivers on Microsoft* Windows*,
36+
ESX*, FreeBSD*, and Linux* operating systems. Additional DDP packages are
37+
available to address needs for specific market segments. For example, a
38+
telecommunications (Comms) DDP package is available to support certain
39+
market-specific protocols in addition to the protocols in the OS-default
40+
package.
41+
42+
The OS-default DDP package supports the following:
43+
- MAC
44+
- EtherType
45+
- VLAN
46+
- IPv4
47+
- IPv6
48+
- TCP
49+
- ARP
50+
- UDP
51+
- SCTP
52+
- ICMP
53+
- ICMPv6
54+
- CTRL
55+
- LLDP
56+
- VXLAN-GPE
57+
- VXLAN (non-GPE)
58+
- Geneve
59+
- GRE
60+
- NVGRE
61+
- RoCEv2
62+
63+
64+
Safe Mode
65+
=========
66+
Safe Mode disables advanced and performance features, and supports only basic
67+
traffic and minimal functionality, such as updating the NVM or downloading a
68+
new driver or DDP package.
69+
70+
See the Intel(R) Ethernet Adapters and Devices User Guide for more details on
71+
DDP and Safe Mode.
72+
73+
74+
Notes
75+
=====
76+
- You cannot update the DDP package if any PF drivers are already loaded. To
77+
overwrite a package, unload all PFs and then reload the driver with the new
78+
package.
79+
80+
- Except for Linux, you can only use one DDP package per driver, even if you
81+
have more than one device installed that uses the driver.
82+
83+
- Only the first loaded PF per device can download a package for that device.
84+
85+
- If you are using DPDK, see the DPDK documentation at https://www.dpdk.org/
86+
for installation instructions and more information.
87+
88+
89+
Installation and Troubleshooting
90+
================================
91+
92+
Microsoft* Windows*
93+
-------------------
94+
The DDP package is installed as part of the driver binary. You don't need to
95+
take additional steps to install the DDP package file.
96+
97+
If you encounter issues with the DDP package file, download the latest driver.
98+
99+
100+
ESX
101+
---
102+
The DDP package is installed as part of the driver binary. You don't need to
103+
take additional steps to install the DDP package file.
104+
105+
If you encounter issues with the DDP package file, download the latest driver.
106+
107+
108+
FreeBSD
109+
-------
110+
The FreeBSD driver automatically installs the default DDP package file during
111+
driver installation. See the ice driver README for general installation and
112+
building instructions.
113+
114+
The DDP package loads during device initialization. The driver looks for the
115+
ice_ddp module and checks that it contains a valid DDP package file.
116+
117+
If you encounter issues with the DDP package file, you may need to download an
118+
updated driver or ice_ddp module. See the log messages for more information.
119+
120+
NOTE: It's important to do 'make install' during initial ice driver
121+
installation so that the driver loads the DDP package automatically.
122+
123+
124+
Linux
125+
-----
126+
The Linux driver automatically installs the default DDP package file during
127+
driver installation. See the ice driver README for general installation and
128+
building instructions.
129+
130+
The DDP package loads during device initialization. The driver looks for
131+
intel/ice/ddp/ice.pkg in your firmware root (typically /lib/firmware/ or
132+
/lib/firmware/updates/) and checks that it contains a valid DDP package file.
133+
The ice.pkg file is a symbolic link to the default DDP package file installed
134+
by the linux-firmware software package or the ice out-of-tree driver
135+
installation.
136+
137+
If you encounter issues with the DDP package file, you may need to download an
138+
updated driver or DDP package file. See the log messages for more information.
139+
140+
You can install specific DDP package files for different physical devices in
141+
the same system. To install a specific DDP package:
142+
143+
1. Download the DDP package file (ice-x.x.x.x.zip) you want for your device. In
144+
addition to licensing information and this README, this zip file contains the
145+
following files:
146+
ice-x.x.x.x.pkg
147+
ice.pkg
148+
149+
NOTE: The ice.pkg file is a Linux symbolic link file pointing to
150+
ice-x.x.x.x.pkg (in the same path).
151+
152+
2. Rename the ice-x.x.x.x.pkg file as ice-xxxxxxxxxxxxxxxx.pkg, where
153+
'xxxxxxxxxxxxxxxx' is the unique 64-bit PCI Express device serial number (in
154+
hex) of the device you want the package downloaded on. The filename must
155+
include the complete serial number (including leading zeros) and be all
156+
lowercase. For example, if the 64-bit serial number is b887a3ffffca0568, then
157+
the file name would be ice-b887a3ffffca0568.pkg.
158+
159+
To find the serial number from the PCI bus address, you can use the following
160+
command:
161+
162+
# lspci -vv -s af:00.0 | grep -i Serial
163+
Capabilities: [150 v1] Device Serial Number b8-87-a3-ff-ff-ca-05-68
164+
165+
You can use the following command to format the serial number without the
166+
dashes:
167+
168+
# lspci -vv -s af:00.0 | grep -i Serial | awk '{print $7}' | sed s/-//g
169+
b887a3ffffca0568
170+
171+
3. Copy the renamed DDP package file to /lib/firmware/updates/intel/ice/ddp/.
172+
If the directory does not yet exist, create it before copying the file.
173+
174+
4. Unload all of the PFs on the device.
175+
176+
5. Reload the driver with the new package.
177+
178+
NOTE: The presence of a device-specific DDP package file overrides the loading
179+
of the default DDP package file (ice.pkg).
180+
181+
182+
Legal / Disclaimers
183+
===================
184+
Copyright (c) 2019 - 2020, Intel Corporation.
185+
186+
Intel and the Intel logo are trademarks of Intel Corporation or its
187+
subsidiaries in the U.S. and/or other countries.
188+
189+
*Other names and brands may be claimed as the property of others.
190+
191+
This software and the related documents are Intel copyrighted materials, and
192+
your use of them is governed by the express license under which they were
193+
provided to you ("License"). Unless the License provides otherwise, you may not
194+
use, modify, copy, publish, distribute, disclose or transmit this software or
195+
the related documents without Intel's prior written permission.
196+
This software and the related documents are provided as is, with no express or
197+
implied warranties, other than those that are expressly stated in the License.

sys/contrib/dev/ice/ice-1.3.9.0.pkg

624 KB
Binary file not shown.

0 commit comments

Comments
 (0)