134 lines
5.2 KiB
ReStructuredText
134 lines
5.2 KiB
ReStructuredText
|
.. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||
|
|
||
|
=============================================
|
||
|
Netronome Flow Processor (NFP) Kernel Drivers
|
||
|
=============================================
|
||
|
|
||
|
Copyright (c) 2019, Netronome Systems, Inc.
|
||
|
|
||
|
Contents
|
||
|
========
|
||
|
|
||
|
- `Overview`_
|
||
|
- `Acquiring Firmware`_
|
||
|
|
||
|
Overview
|
||
|
========
|
||
|
|
||
|
This driver supports Netronome's line of Flow Processor devices,
|
||
|
including the NFP4000, NFP5000, and NFP6000 models, which are also
|
||
|
incorporated in the company's family of Agilio SmartNICs. The SR-IOV
|
||
|
physical and virtual functions for these devices are supported by
|
||
|
the driver.
|
||
|
|
||
|
Acquiring Firmware
|
||
|
==================
|
||
|
|
||
|
The NFP4000 and NFP6000 devices require application specific firmware
|
||
|
to function. Application firmware can be located either on the host file system
|
||
|
or in the device flash (if supported by management firmware).
|
||
|
|
||
|
Firmware files on the host filesystem contain card type (`AMDA-*` string), media
|
||
|
config etc. They should be placed in `/lib/firmware/netronome` directory to
|
||
|
load firmware from the host file system.
|
||
|
|
||
|
Firmware for basic NIC operation is available in the upstream
|
||
|
`linux-firmware.git` repository.
|
||
|
|
||
|
Firmware in NVRAM
|
||
|
-----------------
|
||
|
|
||
|
Recent versions of management firmware supports loading application
|
||
|
firmware from flash when the host driver gets probed. The firmware loading
|
||
|
policy configuration may be used to configure this feature appropriately.
|
||
|
|
||
|
Devlink or ethtool can be used to update the application firmware on the device
|
||
|
flash by providing the appropriate `nic_AMDA*.nffw` file to the respective
|
||
|
command. Users need to take care to write the correct firmware image for the
|
||
|
card and media configuration to flash.
|
||
|
|
||
|
Available storage space in flash depends on the card being used.
|
||
|
|
||
|
Dealing with multiple projects
|
||
|
------------------------------
|
||
|
|
||
|
NFP hardware is fully programmable therefore there can be different
|
||
|
firmware images targeting different applications.
|
||
|
|
||
|
When using application firmware from host, we recommend placing
|
||
|
actual firmware files in application-named subdirectories in
|
||
|
`/lib/firmware/netronome` and linking the desired files, e.g.::
|
||
|
|
||
|
$ tree /lib/firmware/netronome/
|
||
|
/lib/firmware/netronome/
|
||
|
├── bpf
|
||
|
│ ├── nic_AMDA0081-0001_1x40.nffw
|
||
|
│ └── nic_AMDA0081-0001_4x10.nffw
|
||
|
├── flower
|
||
|
│ ├── nic_AMDA0081-0001_1x40.nffw
|
||
|
│ └── nic_AMDA0081-0001_4x10.nffw
|
||
|
├── nic
|
||
|
│ ├── nic_AMDA0081-0001_1x40.nffw
|
||
|
│ └── nic_AMDA0081-0001_4x10.nffw
|
||
|
├── nic_AMDA0081-0001_1x40.nffw -> bpf/nic_AMDA0081-0001_1x40.nffw
|
||
|
└── nic_AMDA0081-0001_4x10.nffw -> bpf/nic_AMDA0081-0001_4x10.nffw
|
||
|
|
||
|
3 directories, 8 files
|
||
|
|
||
|
You may need to use hard instead of symbolic links on distributions
|
||
|
which use old `mkinitrd` command instead of `dracut` (e.g. Ubuntu).
|
||
|
|
||
|
After changing firmware files you may need to regenerate the initramfs
|
||
|
image. Initramfs contains drivers and firmware files your system may
|
||
|
need to boot. Refer to the documentation of your distribution to find
|
||
|
out how to update initramfs. Good indication of stale initramfs
|
||
|
is system loading wrong driver or firmware on boot, but when driver is
|
||
|
later reloaded manually everything works correctly.
|
||
|
|
||
|
Selecting firmware per device
|
||
|
-----------------------------
|
||
|
|
||
|
Most commonly all cards on the system use the same type of firmware.
|
||
|
If you want to load specific firmware image for a specific card, you
|
||
|
can use either the PCI bus address or serial number. Driver will print
|
||
|
which files it's looking for when it recognizes a NFP device::
|
||
|
|
||
|
nfp: Looking for firmware file in order of priority:
|
||
|
nfp: netronome/serial-00-12-34-aa-bb-cc-10-ff.nffw: not found
|
||
|
nfp: netronome/pci-0000:02:00.0.nffw: not found
|
||
|
nfp: netronome/nic_AMDA0081-0001_1x40.nffw: found, loading...
|
||
|
|
||
|
In this case if file (or link) called *serial-00-12-34-aa-bb-5d-10-ff.nffw*
|
||
|
or *pci-0000:02:00.0.nffw* is present in `/lib/firmware/netronome` this
|
||
|
firmware file will take precedence over `nic_AMDA*` files.
|
||
|
|
||
|
Note that `serial-*` and `pci-*` files are **not** automatically included
|
||
|
in initramfs, you will have to refer to documentation of appropriate tools
|
||
|
to find out how to include them.
|
||
|
|
||
|
Firmware loading policy
|
||
|
-----------------------
|
||
|
|
||
|
Firmware loading policy is controlled via three HWinfo parameters
|
||
|
stored as key value pairs in the device flash:
|
||
|
|
||
|
app_fw_from_flash
|
||
|
Defines which firmware should take precedence, 'Disk' (0), 'Flash' (1) or
|
||
|
the 'Preferred' (2) firmware. When 'Preferred' is selected, the management
|
||
|
firmware makes the decision over which firmware will be loaded by comparing
|
||
|
versions of the flash firmware and the host supplied firmware.
|
||
|
This variable is configurable using the 'fw_load_policy'
|
||
|
devlink parameter.
|
||
|
|
||
|
abi_drv_reset
|
||
|
Defines if the driver should reset the firmware when
|
||
|
the driver is probed, either 'Disk' (0) if firmware was found on disk,
|
||
|
'Always' (1) reset or 'Never' (2) reset. Note that the device is always
|
||
|
reset on driver unload if firmware was loaded when the driver was probed.
|
||
|
This variable is configurable using the 'reset_dev_on_drv_probe'
|
||
|
devlink parameter.
|
||
|
|
||
|
abi_drv_load_ifc
|
||
|
Defines a list of PF devices allowed to load FW on the device.
|
||
|
This variable is not currently user configurable.
|