xref: /dpdk/doc/guides/nics/cxgbe.rst (revision 68a03efeed657e6e05f281479b33b51102797e15)
1.. SPDX-License-Identifier: BSD-3-Clause
2   Copyright(c) 2014-2018 Chelsio Communications.
3   All rights reserved.
4
5CXGBE Poll Mode Driver
6======================
7
8The CXGBE PMD (**librte_net_cxgbe**) provides poll mode driver support
9for **Chelsio Terminator** 10/25/40/100 Gbps family of adapters. CXGBE PMD
10has support for the latest Linux and FreeBSD operating systems.
11
12CXGBEVF PMD provides poll mode driver support for SR-IOV Virtual functions
13and has support for the latest Linux operating systems.
14
15More information can be found at `Chelsio Communications Official Website
16<http://www.chelsio.com>`_.
17
18Features
19--------
20
21CXGBE and CXGBEVF PMD has support for:
22
23- Multiple queues for TX and RX
24- Receiver Side Steering (RSS)
25  Receiver Side Steering (RSS) on IPv4, IPv6, IPv4-TCP/UDP, IPv6-TCP/UDP.
26  For 4-tuple, enabling 'RSS on TCP' and 'RSS on TCP + UDP' is supported.
27- VLAN filtering
28- Checksum offload
29- Promiscuous mode
30- All multicast mode
31- Port hardware statistics
32- Jumbo frames
33- Flow API - Support for both Wildcard (LE-TCAM) and Exact (HASH) match filters.
34
35Limitations
36-----------
37
38The Chelsio Terminator series of devices provide two/four ports but
39expose a single PCI bus address, thus, librte_net_cxgbe registers
40itself as a PCI driver that allocates one Ethernet device per detected
41port.
42
43For this reason, one cannot allow/block a single port without
44allowing/blocking the other ports on the same device.
45
46.. _t5-nics:
47
48Supported Chelsio T5 NICs
49-------------------------
50
51- 1G NICs: T502-BT
52- 10G NICs: T520-BT, T520-CR, T520-LL-CR, T520-SO-CR, T540-CR
53- 40G NICs: T580-CR, T580-LP-CR, T580-SO-CR
54- Other T5 NICs: T522-CR
55
56.. _t6-nics:
57
58Supported Chelsio T6 NICs
59-------------------------
60
61- 25G NICs: T6425-CR, T6225-CR, T6225-LL-CR, T6225-SO-CR
62- 100G NICs: T62100-CR, T62100-LP-CR, T62100-SO-CR
63
64Supported SR-IOV Chelsio NICs
65-----------------------------
66
67SR-IOV virtual functions are supported on all the Chelsio NICs listed
68in :ref:`t5-nics` and :ref:`t6-nics`.
69
70Prerequisites
71-------------
72
73- Requires firmware version **1.25.4.0** and higher. Visit
74  `Chelsio Download Center <http://service.chelsio.com>`_ to get latest firmware
75  bundled with the latest Chelsio Unified Wire package.
76
77  For Linux, installing and loading the latest cxgb4 kernel driver from the
78  Chelsio Unified Wire package should get you the latest firmware. More
79  information can be obtained from the User Guide that is bundled with the
80  Chelsio Unified Wire package.
81
82  For FreeBSD, the latest firmware obtained from the Chelsio Unified Wire
83  package must be manually flashed via cxgbetool available in FreeBSD source
84  repository.
85
86  Instructions on how to manually flash the firmware are given in section
87  :ref:`linux-installation` for Linux and section :ref:`freebsd-installation`
88  for FreeBSD.
89
90
91Runtime Options
92---------------
93
94The following ``devargs`` options can be enabled at runtime. They must
95be passed as part of EAL arguments. For example,
96
97.. code-block:: console
98
99   dpdk-testpmd -a 02:00.4,keep_ovlan=1 -- -i
100
101Common Runtime Options
102~~~~~~~~~~~~~~~~~~~~~~
103
104- ``keep_ovlan`` (default **0**)
105
106  Toggle behavior to keep/strip outer VLAN in Q-in-Q packets. If
107  enabled, the outer VLAN tag is preserved in Q-in-Q packets. Otherwise,
108  the outer VLAN tag is stripped in Q-in-Q packets.
109
110- ``tx_mode_latency`` (default **0**)
111
112  When set to 1, Tx doesn't wait for max number of packets to get
113  coalesced and sends the packets immediately at the end of the
114  current Tx burst. When set to 0, Tx waits across multiple Tx bursts
115  until the max number of packets have been coalesced. In this case,
116  Tx only sends the coalesced packets to hardware once the max
117  coalesce limit has been reached.
118
119CXGBE VF Only Runtime Options
120~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
121
122- ``force_link_up`` (default **0**)
123
124  When set to 1, CXGBEVF PMD always forces link as up for all VFs on
125  underlying Chelsio NICs. This enables multiple VFs on the same NIC
126  to send traffic to each other even when the physical link is down.
127
128CXGBE PF Only Runtime Options
129~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
130
131- ``filtermode`` (default **0**)
132
133  Apart from the 4-tuple (IP src/dst addresses and TCP/UDP src/dst port
134  addresses), there are only 40-bits available to match other fields in
135  packet headers. So, ``filtermode`` devarg allows user to dynamically
136  select a 40-bit supported match field combination for LETCAM (wildcard)
137  filters.
138
139  Default value of **0** makes driver pick the combination configured in
140  the firmware configuration file on the adapter.
141
142  The supported flags and their corresponding values are shown in table below.
143  These flags can be OR'd to create 1 of the multiple supported combinations
144  for LETCAM filters.
145
146        ==================      ======
147        FLAG                    VALUE
148        ==================      ======
149        Physical Port           0x1
150        PFVF                    0x2
151        Destination MAC         0x4
152        Ethertype               0x8
153        Inner VLAN              0x10
154        Outer VLAN              0x20
155        IP TOS                  0x40
156        IP Protocol             0x80
157        ==================      ======
158
159  The supported ``filtermode`` combinations and their corresponding OR'd
160  values are shown in table below.
161
162        +-----------------------------------+-----------+
163        | FILTERMODE COMBINATIONS           |   VALUE   |
164        +===================================+===========+
165        | Protocol, TOS, Outer VLAN, Port   |     0xE1  |
166        +-----------------------------------+-----------+
167        | Protocol, TOS, Outer VLAN         |     0xE0  |
168        +-----------------------------------+-----------+
169        | Protocol, TOS, Inner VLAN, Port   |     0xD1  |
170        +-----------------------------------+-----------+
171        | Protocol, TOS, Inner VLAN         |     0xD0  |
172        +-----------------------------------+-----------+
173        | Protocol, TOS, PFVF, Port         |     0xC3  |
174        +-----------------------------------+-----------+
175        | Protocol, TOS, PFVF               |     0xC2  |
176        +-----------------------------------+-----------+
177        | Protocol, TOS, Port               |     0xC1  |
178        +-----------------------------------+-----------+
179        | Protocol, TOS                     |     0xC0  |
180        +-----------------------------------+-----------+
181        | Protocol, Outer VLAN, Port        |     0xA1  |
182        +-----------------------------------+-----------+
183        | Protocol, Outer VLAN              |     0xA0  |
184        +-----------------------------------+-----------+
185        | Protocol, Inner VLAN, Port        |     0x91  |
186        +-----------------------------------+-----------+
187        | Protocol, Inner VLAN              |     0x90  |
188        +-----------------------------------+-----------+
189        | Protocol, Ethertype, DstMAC, Port |     0x8D  |
190        +-----------------------------------+-----------+
191        | Protocol, Ethertype, DstMAC       |     0x8C  |
192        +-----------------------------------+-----------+
193        | Protocol, Ethertype, Port         |     0x89  |
194        +-----------------------------------+-----------+
195        | Protocol, Ethertype               |     0x88  |
196        +-----------------------------------+-----------+
197        | Protocol, DstMAC, PFVF, Port      |     0x87  |
198        +-----------------------------------+-----------+
199        | Protocol, DstMAC, PFVF            |     0x86  |
200        +-----------------------------------+-----------+
201        | Protocol, DstMAC, Port            |     0x85  |
202        +-----------------------------------+-----------+
203        | Protocol, DstMAC                  |     0x84  |
204        +-----------------------------------+-----------+
205        | Protocol, PFVF, Port              |     0x83  |
206        +-----------------------------------+-----------+
207        | Protocol, PFVF                    |     0x82  |
208        +-----------------------------------+-----------+
209        | Protocol, Port                    |     0x81  |
210        +-----------------------------------+-----------+
211        | Protocol                          |     0x80  |
212        +-----------------------------------+-----------+
213        | TOS, Outer VLAN, Port             |     0x61  |
214        +-----------------------------------+-----------+
215        | TOS, Outer VLAN                   |     0x60  |
216        +-----------------------------------+-----------+
217        | TOS, Inner VLAN, Port             |     0x51  |
218        +-----------------------------------+-----------+
219        | TOS, Inner VLAN                   |     0x50  |
220        +-----------------------------------+-----------+
221        | TOS, Ethertype, DstMAC, Port      |     0x4D  |
222        +-----------------------------------+-----------+
223        | TOS, Ethertype, DstMAC            |     0x4C  |
224        +-----------------------------------+-----------+
225        | TOS, Ethertype, Port              |     0x49  |
226        +-----------------------------------+-----------+
227        | TOS, Ethertype                    |     0x48  |
228        +-----------------------------------+-----------+
229        | TOS, DstMAC, PFVF, Port           |     0x47  |
230        +-----------------------------------+-----------+
231        | TOS, DstMAC, PFVF                 |     0x46  |
232        +-----------------------------------+-----------+
233        | TOS, DstMAC, Port                 |     0x45  |
234        +-----------------------------------+-----------+
235        | TOS, DstMAC                       |     0x44  |
236        +-----------------------------------+-----------+
237        | TOS, PFVF, Port                   |     0x43  |
238        +-----------------------------------+-----------+
239        | TOS, PFVF                         |     0x42  |
240        +-----------------------------------+-----------+
241        | TOS, Port                         |     0x41  |
242        +-----------------------------------+-----------+
243        | TOS                               |     0x40  |
244        +-----------------------------------+-----------+
245        | Outer VLAN, Inner VLAN, Port      |     0x31  |
246        +-----------------------------------+-----------+
247        | Outer VLAN, Ethertype, Port       |     0x29  |
248        +-----------------------------------+-----------+
249        | Outer VLAN, Ethertype             |     0x28  |
250        +-----------------------------------+-----------+
251        | Outer VLAN, DstMAC, Port          |     0x25  |
252        +-----------------------------------+-----------+
253        | Outer VLAN, DstMAC                |     0x24  |
254        +-----------------------------------+-----------+
255        | Outer VLAN, Port                  |     0x21  |
256        +-----------------------------------+-----------+
257        | Outer VLAN                        |     0x20  |
258        +-----------------------------------+-----------+
259        | Inner VLAN, Ethertype, Port       |     0x19  |
260        +-----------------------------------+-----------+
261        | Inner VLAN, Ethertype             |     0x18  |
262        +-----------------------------------+-----------+
263        | Inner VLAN, DstMAC, Port          |     0x15  |
264        +-----------------------------------+-----------+
265        | Inner VLAN, DstMAC                |     0x14  |
266        +-----------------------------------+-----------+
267        | Inner VLAN, Port                  |     0x11  |
268        +-----------------------------------+-----------+
269        | Inner VLAN                        |     0x10  |
270        +-----------------------------------+-----------+
271        | Ethertype, DstMAC, Port           |     0xD   |
272        +-----------------------------------+-----------+
273        | Ethertype, DstMAC                 |     0xC   |
274        +-----------------------------------+-----------+
275        | Ethertype, PFVF, Port             |     0xB   |
276        +-----------------------------------+-----------+
277        | Ethertype, PFVF                   |     0xA   |
278        +-----------------------------------+-----------+
279        | Ethertype, Port                   |     0x9   |
280        +-----------------------------------+-----------+
281        | Ethertype                         |     0x8   |
282        +-----------------------------------+-----------+
283        | DstMAC, PFVF, Port                |     0x7   |
284        +-----------------------------------+-----------+
285        | DstMAC, PFVF                      |     0x6   |
286        +-----------------------------------+-----------+
287        | DstMAC, Port                      |     0x5   |
288        +-----------------------------------+-----------+
289        | Destination MAC                   |     0x4   |
290        +-----------------------------------+-----------+
291        | PFVF, Port                        |     0x3   |
292        +-----------------------------------+-----------+
293        | PFVF                              |     0x2   |
294        +-----------------------------------+-----------+
295        | Physical Port                     |     0x1   +
296        +-----------------------------------+-----------+
297
298  For example, to enable matching ``ethertype`` field in Ethernet
299  header, and ``protocol`` field in IPv4 header, the ``filtermode``
300  combination must be given as:
301
302  .. code-block:: console
303
304     dpdk-testpmd -a 02:00.4,filtermode=0x88 -- -i
305
306- ``filtermask`` (default **0**)
307
308  ``filtermask`` devarg works similar to ``filtermode``, but is used
309  to configure a filter mode combination for HASH (exact-match) filters.
310
311  .. note::
312
313     The combination chosen for ``filtermask`` devarg **must be a subset** of
314     the combination chosen for ``filtermode`` devarg.
315
316  Default value of **0** makes driver pick the combination configured in
317  the firmware configuration file on the adapter.
318
319  Note that the filter rule will only be inserted in HASH region, if the
320  rule contains **all** the fields specified in the ``filtermask`` combination.
321  Otherwise, the filter rule will get inserted in LETCAM region.
322
323  The same combination list explained in the tables in ``filtermode`` devarg
324  section earlier applies for ``filtermask`` devarg, as well.
325
326  For example, to enable matching only protocol field in IPv4 header, the
327  ``filtermask`` combination must be given as:
328
329  .. code-block:: console
330
331     dpdk-testpmd -a 02:00.4,filtermode=0x88,filtermask=0x80 -- -i
332
333.. _driver-compilation:
334
335Driver compilation and testing
336------------------------------
337
338Refer to the document :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
339for details.
340
341Linux
342-----
343
344.. _linux-installation:
345
346Linux Installation
347~~~~~~~~~~~~~~~~~~
348
349Steps to manually install the latest firmware from the downloaded Chelsio
350Unified Wire package for Linux operating system are as follows:
351
352#. Load the kernel module:
353
354   .. code-block:: console
355
356      modprobe cxgb4
357
358#. Use ifconfig to get the interface name assigned to Chelsio card:
359
360   .. code-block:: console
361
362      ifconfig -a | grep "00:07:43"
363
364   Example output:
365
366   .. code-block:: console
367
368      p1p1      Link encap:Ethernet  HWaddr 00:07:43:2D:EA:C0
369      p1p2      Link encap:Ethernet  HWaddr 00:07:43:2D:EA:C8
370
371#. Install cxgbtool:
372
373   .. code-block:: console
374
375      cd <path_to_uwire>/tools/cxgbtool
376      make install
377
378#. Use cxgbtool to load the firmware config file onto the card:
379
380   .. code-block:: console
381
382      cxgbtool p1p1 loadcfg <path_to_uwire>/src/network/firmware/t5-config.txt
383
384#. Use cxgbtool to load the firmware image onto the card:
385
386   .. code-block:: console
387
388      cxgbtool p1p1 loadfw <path_to_uwire>/src/network/firmware/t5fw-*.bin
389
390#. Unload and reload the kernel module:
391
392   .. code-block:: console
393
394      modprobe -r cxgb4
395      modprobe cxgb4
396
397#. Verify with ethtool:
398
399   .. code-block:: console
400
401      ethtool -i p1p1 | grep "firmware"
402
403   Example output:
404
405   .. code-block:: console
406
407      firmware-version: 1.25.4.0, TP 0.1.23.2
408
409Running testpmd
410~~~~~~~~~~~~~~~
411
412This section demonstrates how to launch **testpmd** with Chelsio
413devices managed by librte_net_cxgbe in Linux operating system.
414
415#. Load the kernel module:
416
417   .. code-block:: console
418
419      modprobe cxgb4
420
421#. Get the PCI bus addresses of the interfaces bound to cxgb4 driver:
422
423   .. code-block:: console
424
425      dmesg | tail -2
426
427   Example output:
428
429   .. code-block:: console
430
431      cxgb4 0000:02:00.4 p1p1: renamed from eth0
432      cxgb4 0000:02:00.4 p1p2: renamed from eth1
433
434   .. note::
435
436      Both the interfaces of a Chelsio 2-port adapter are bound to the
437      same PCI bus address.
438
439#. Unload the kernel module:
440
441   .. code-block:: console
442
443      modprobe -ar cxgb4 csiostor
444
445#. Running testpmd
446
447   Follow instructions available in the document
448   :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
449   to run testpmd.
450
451   .. note::
452
453      Currently, CXGBE PMD only supports the binding of PF4 for Chelsio NICs.
454
455   Example output:
456
457   .. code-block:: console
458
459      [...]
460      EAL: PCI device 0000:02:00.4 on NUMA socket -1
461      EAL:   probe driver: 1425:5401 rte_cxgbe_pmd
462      EAL:   PCI memory mapped at 0x7fd7c0200000
463      EAL:   PCI memory mapped at 0x7fd77cdfd000
464      EAL:   PCI memory mapped at 0x7fd7c10b7000
465      PMD: rte_cxgbe_pmd: fw: 1.25.4.0, TP: 0.1.23.2
466      PMD: rte_cxgbe_pmd: Coming up as MASTER: Initializing adapter
467      Interactive-mode selected
468      Configuring Port 0 (socket 0)
469      Port 0: 00:07:43:2D:EA:C0
470      Configuring Port 1 (socket 0)
471      Port 1: 00:07:43:2D:EA:C8
472      Checking link statuses...
473      PMD: rte_cxgbe_pmd: Port0: passive DA port module inserted
474      PMD: rte_cxgbe_pmd: Port1: passive DA port module inserted
475      Port 0 Link Up - speed 10000 Mbps - full-duplex
476      Port 1 Link Up - speed 10000 Mbps - full-duplex
477      Done
478      testpmd>
479
480   .. note::
481
482      Flow control pause TX/RX is disabled by default and can be enabled via
483      testpmd. Refer section :ref:`flow-control` for more details.
484
485Configuring SR-IOV Virtual Functions
486~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
487
488This section demonstrates how to enable SR-IOV virtual functions
489on Chelsio NICs and demonstrates how to run testpmd with SR-IOV
490virtual functions.
491
492#. Load the kernel module:
493
494   .. code-block:: console
495
496      modprobe cxgb4
497
498#. Get the PCI bus addresses of the interfaces bound to cxgb4 driver:
499
500   .. code-block:: console
501
502      dmesg | tail -2
503
504   Example output:
505
506   .. code-block:: console
507
508      cxgb4 0000:02:00.4 p1p1: renamed from eth0
509      cxgb4 0000:02:00.4 p1p2: renamed from eth1
510
511   .. note::
512
513      Both the interfaces of a Chelsio 2-port adapter are bound to the
514      same PCI bus address.
515
516#. Use ifconfig to get the interface name assigned to Chelsio card:
517
518   .. code-block:: console
519
520      ifconfig -a | grep "00:07:43"
521
522   Example output:
523
524   .. code-block:: console
525
526      p1p1      Link encap:Ethernet  HWaddr 00:07:43:2D:EA:C0
527      p1p2      Link encap:Ethernet  HWaddr 00:07:43:2D:EA:C8
528
529#. Bring up the interfaces:
530
531   .. code-block:: console
532
533      ifconfig p1p1 up
534      ifconfig p1p2 up
535
536#. Instantiate SR-IOV Virtual Functions. PF0..3 can be used for
537   SR-IOV VFs. Multiple VFs can be instantiated on each of PF0..3.
538   To instantiate one SR-IOV VF on each PF0 and PF1:
539
540   .. code-block:: console
541
542      echo 1 > /sys/bus/pci/devices/0000\:02\:00.0/sriov_numvfs
543      echo 1 > /sys/bus/pci/devices/0000\:02\:00.1/sriov_numvfs
544
545#. Get the PCI bus addresses of the virtual functions:
546
547   .. code-block:: console
548
549      lspci | grep -i "Chelsio" | grep -i "VF"
550
551   Example output:
552
553   .. code-block:: console
554
555      02:01.0 Ethernet controller: Chelsio Communications Inc T540-CR Unified Wire Ethernet Controller [VF]
556      02:01.1 Ethernet controller: Chelsio Communications Inc T540-CR Unified Wire Ethernet Controller [VF]
557
558#. Running testpmd
559
560   Follow instructions available in the document
561   :ref:`compiling and testing a PMD for a NIC <pmd_build_and_test>`
562   to bind virtual functions and run testpmd.
563
564   Example output:
565
566   .. code-block:: console
567
568      [...]
569      EAL: PCI device 0000:02:01.0 on NUMA socket 0
570      EAL:   probe driver: 1425:5803 net_cxgbevf
571      PMD: rte_cxgbe_pmd: Firmware version: 1.25.4.0
572      PMD: rte_cxgbe_pmd: TP Microcode version: 0.1.23.2
573      PMD: rte_cxgbe_pmd: Chelsio rev 0
574      PMD: rte_cxgbe_pmd: No bootstrap loaded
575      PMD: rte_cxgbe_pmd: No Expansion ROM loaded
576      PMD: rte_cxgbe_pmd:  0000:02:01.0 Chelsio rev 0 1G/10GBASE-SFP
577      EAL: PCI device 0000:02:01.1 on NUMA socket 0
578      EAL:   probe driver: 1425:5803 net_cxgbevf
579      PMD: rte_cxgbe_pmd: Firmware version: 1.25.4.0
580      PMD: rte_cxgbe_pmd: TP Microcode version: 0.1.23.2
581      PMD: rte_cxgbe_pmd: Chelsio rev 0
582      PMD: rte_cxgbe_pmd: No bootstrap loaded
583      PMD: rte_cxgbe_pmd: No Expansion ROM loaded
584      PMD: rte_cxgbe_pmd:  0000:02:01.1 Chelsio rev 0 1G/10GBASE-SFP
585      Configuring Port 0 (socket 0)
586      Port 0: 06:44:29:44:40:00
587      Configuring Port 1 (socket 0)
588      Port 1: 06:44:29:44:40:10
589      Checking link statuses...
590      Done
591      testpmd>
592
593FreeBSD
594-------
595
596.. _freebsd-installation:
597
598FreeBSD Installation
599~~~~~~~~~~~~~~~~~~~~
600
601Steps to manually install the latest firmware from the downloaded Chelsio
602Unified Wire package for FreeBSD operating system are as follows:
603
604#. Load the kernel module:
605
606   .. code-block:: console
607
608      kldload if_cxgbe
609
610#. Use dmesg to get the t5nex instance assigned to the Chelsio card:
611
612   .. code-block:: console
613
614      dmesg | grep "t5nex"
615
616   Example output:
617
618   .. code-block:: console
619
620      t5nex0: <Chelsio T520-CR> irq 16 at device 0.4 on pci2
621      cxl0: <port 0> on t5nex0
622      cxl1: <port 1> on t5nex0
623      t5nex0: PCIe x8, 2 ports, 14 MSI-X interrupts, 31 eq, 13 iq
624
625   In the example above, a Chelsio T520-CR card is bound to a t5nex0 instance.
626
627#. Install cxgbetool from FreeBSD source repository:
628
629   .. code-block:: console
630
631      cd <path_to_FreeBSD_source>/tools/tools/cxgbetool/
632      make && make install
633
634#. Use cxgbetool to load the firmware image onto the card:
635
636   .. code-block:: console
637
638      cxgbetool t5nex0 loadfw <path_to_uwire>/src/network/firmware/t5fw-*.bin
639
640#. Unload and reload the kernel module:
641
642   .. code-block:: console
643
644      kldunload if_cxgbe
645      kldload if_cxgbe
646
647#. Verify with sysctl:
648
649   .. code-block:: console
650
651      sysctl -a | grep "t5nex" | grep "firmware"
652
653   Example output:
654
655   .. code-block:: console
656
657      dev.t5nex.0.firmware_version: 1.25.4.0
658
659Running testpmd
660~~~~~~~~~~~~~~~
661
662This section demonstrates how to launch **testpmd** with Chelsio
663devices managed by librte_net_cxgbe in FreeBSD operating system.
664
665#. Change to DPDK source directory where the target has been compiled in
666   section :ref:`driver-compilation`:
667
668   .. code-block:: console
669
670      cd <DPDK-source-directory>
671
672#. Copy the contigmem kernel module to /boot/kernel directory:
673
674   .. code-block:: console
675
676      cp <build_dir>/kernel/freebsd/contigmem.ko /boot/kernel/
677
678#. Add the following lines to /boot/loader.conf:
679
680   .. code-block:: console
681
682      # reserve 2 x 1G blocks of contiguous memory using contigmem driver
683      hw.contigmem.num_buffers=2
684      hw.contigmem.buffer_size=1073741824
685      # load contigmem module during boot process
686      contigmem_load="YES"
687
688   The above lines load the contigmem kernel module during boot process and
689   allocate 2 x 1G blocks of contiguous memory to be used for DPDK later on.
690   This is to avoid issues with potential memory fragmentation during later
691   system up time, which may result in failure of allocating the contiguous
692   memory required for the contigmem kernel module.
693
694#. Restart the system and ensure the contigmem module is loaded successfully:
695
696   .. code-block:: console
697
698      reboot
699      kldstat | grep "contigmem"
700
701   Example output:
702
703   .. code-block:: console
704
705      2    1 0xffffffff817f1000 3118     contigmem.ko
706
707#. Repeat step 1 to ensure that you are in the DPDK source directory.
708
709#. Load the cxgbe kernel module:
710
711   .. code-block:: console
712
713      kldload if_cxgbe
714
715#. Get the PCI bus addresses of the interfaces bound to t5nex driver:
716
717   .. code-block:: console
718
719      pciconf -l | grep "t5nex"
720
721   Example output:
722
723   .. code-block:: console
724
725      t5nex0@pci0:2:0:4: class=0x020000 card=0x00001425 chip=0x54011425 rev=0x00
726
727   In the above example, the t5nex0 is bound to 2:0:4 bus address.
728
729   .. note::
730
731      Both the interfaces of a Chelsio 2-port adapter are bound to the
732      same PCI bus address.
733
734#. Unload the kernel module:
735
736   .. code-block:: console
737
738      kldunload if_cxgbe
739
740#. Set the PCI bus addresses to hw.nic_uio.bdfs kernel environment parameter:
741
742   .. code-block:: console
743
744      kenv hw.nic_uio.bdfs="2:0:4"
745
746   This automatically binds 2:0:4 to nic_uio kernel driver when it is loaded in
747   the next step.
748
749   .. note::
750
751      Currently, CXGBE PMD only supports the binding of PF4 for Chelsio NICs.
752
753#. Load nic_uio kernel driver:
754
755   .. code-block:: console
756
757      kldload <build_dir>/kernel/freebsd/nic_uio.ko
758
759#. Start testpmd with basic parameters:
760
761   .. code-block:: console
762
763      ./<build_dir>/app/dpdk-testpmd -l 0-3 -n 4 -a 0000:02:00.4 -- -i
764
765   Example output:
766
767   .. code-block:: console
768
769      [...]
770      EAL: PCI device 0000:02:00.4 on NUMA socket 0
771      EAL:   probe driver: 1425:5401 rte_cxgbe_pmd
772      EAL:   PCI memory mapped at 0x8007ec000
773      EAL:   PCI memory mapped at 0x842800000
774      EAL:   PCI memory mapped at 0x80086c000
775      PMD: rte_cxgbe_pmd: fw: 1.25.4.0, TP: 0.1.23.2
776      PMD: rte_cxgbe_pmd: Coming up as MASTER: Initializing adapter
777      Interactive-mode selected
778      Configuring Port 0 (socket 0)
779      Port 0: 00:07:43:2D:EA:C0
780      Configuring Port 1 (socket 0)
781      Port 1: 00:07:43:2D:EA:C8
782      Checking link statuses...
783      PMD: rte_cxgbe_pmd: Port0: passive DA port module inserted
784      PMD: rte_cxgbe_pmd: Port1: passive DA port module inserted
785      Port 0 Link Up - speed 10000 Mbps - full-duplex
786      Port 1 Link Up - speed 10000 Mbps - full-duplex
787      Done
788      testpmd>
789
790.. note::
791
792   Flow control pause TX/RX is disabled by default and can be enabled via
793   testpmd. Refer section :ref:`flow-control` for more details.
794
795Sample Application Notes
796------------------------
797
798.. _flow-control:
799
800Enable/Disable Flow Control
801~~~~~~~~~~~~~~~~~~~~~~~~~~~
802
803Flow control pause TX/RX is disabled by default and can be enabled via
804testpmd as follows:
805
806.. code-block:: console
807
808   testpmd> set flow_ctrl rx on tx on 0 0 0 0 mac_ctrl_frame_fwd off autoneg on 0
809   testpmd> set flow_ctrl rx on tx on 0 0 0 0 mac_ctrl_frame_fwd off autoneg on 1
810
811To disable again, run:
812
813.. code-block:: console
814
815   testpmd> set flow_ctrl rx off tx off 0 0 0 0 mac_ctrl_frame_fwd off autoneg off 0
816   testpmd> set flow_ctrl rx off tx off 0 0 0 0 mac_ctrl_frame_fwd off autoneg off 1
817
818Jumbo Mode
819~~~~~~~~~~
820
821There are two ways to enable sending and receiving of jumbo frames via testpmd.
822One method involves using the **mtu** command, which changes the mtu of an
823individual port without having to stop the selected port. Another method
824involves stopping all the ports first and then running **max-pkt-len** command
825to configure the mtu of all the ports with a single command.
826
827- To configure each port individually, run the mtu command as follows:
828
829  .. code-block:: console
830
831     testpmd> port config mtu 0 9000
832     testpmd> port config mtu 1 9000
833
834- To configure all the ports at once, stop all the ports first and run the
835  max-pkt-len command as follows:
836
837  .. code-block:: console
838
839     testpmd> port stop all
840     testpmd> port config all max-pkt-len 9000
841