Skip to content

Commit

Permalink
net/ice: support custom search path for DDP package files
Browse files Browse the repository at this point in the history
Add support for customizing the firmware search path for DDP package
files, to match the kernel driver behavior. The PMD will read the search
path from "/sys/module/firmware_class/parameters/path", and try to load
a DDP package from that location before checking the standard package
paths.

When documenting this new behaviour, update the documentation in general
for loading the DDP package, moving it out of the "limitations" section
of the document.

Signed-off-by: Zhichao Zeng <zhichaox.zeng@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
  • Loading branch information
zengzhichao233 authored and bruce-richardson committed Oct 4, 2024
1 parent f2e59fd commit b58cd61
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 32 deletions.
57 changes: 28 additions & 29 deletions doc/guides/nics/ice.rst
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,34 @@ are listed in the Tested Platforms section of the Release Notes for each release
| 24.03 | 1.13.7 | 1.3.35 | 1.3.45 | 1.3.13 | 4.4 |
+-----------+---------------+-----------------+-----------+--------------+-----------+

Dynamic Device Personalization (DDP) package loading
----------------------------------------------------

The Intel E810 requires a programmable pipeline package be downloaded by the driver to support normal operations.
The E810 has limited functionality built in to allow PXE boot and other use cases,
but for DPDK use the driver must download a package file during the driver initialization stage.

The default DDP package file name is ``ice.pkg``.
For a specific NIC, the DDP package supposed to be loaded can have a filename: ``ice-xxxxxx.pkg``,
where 'xxxxxx' is the 64-bit PCIe Device Serial Number of the NIC.
For example, if the NIC's device serial number is 00-CC-BB-FF-FF-AA-05-68,
the device-specific DDP package filename is ``ice-00ccbbffffaa0568.pkg`` (in hex and all low case).
A symbolic link to the DDP package file is also ok.
The same package file is used by both the kernel driver and the ICE PMD.
For more information, please review the README file from
`Intel® Ethernet 800 Series Dynamic Device Personalization (DDP) for Telecommunication (Comms) Package
<https://www.intel.com/content/www/us/en/download/19660/intel-ethernet-800-series-dynamic-device-personalization-ddp-for-telecommunication-comms-package.html>`_.

ICE PMD supports using a customized DDP search path.
The driver will read the search path from '/sys/module/firmware_class/parameters/path' as a 'CUSTOMIZED_PATH'.
During initialization, the driver searches in the following paths in order:
'CUSTOMIZED_PATH', '/lib/firmware/updates/intel/ice/ddp' and '/lib/firmware/intel/ice/ddp'.
The device-specific DDP package has a higher loading priority than default DDP package, ``ice.pkg``.

.. Note::

Windows support: DDP packages are not supported on Windows.

Configuration
-------------

Expand Down Expand Up @@ -487,32 +515,3 @@ Usage::

In "brief" mode, all scheduling nodes in the tree are displayed.
In "detail" mode, each node's configuration parameters are also displayed.

Limitations or Known issues
---------------------------

The Intel E810 requires a programmable pipeline package be downloaded
by the driver to support normal operations. The E810 has a limited
functionality built in to allow PXE boot and other use cases, but the
driver must download a package file during the driver initialization
stage.

The default DDP package file name is ice.pkg. For a specific NIC, the
DDP package supposed to be loaded can have a filename: ice-xxxxxx.pkg,
where 'xxxxxx' is the 64-bit PCIe Device Serial Number of the NIC. For
example, if the NIC's device serial number is 00-CC-BB-FF-FF-AA-05-68,
the device-specific DDP package filename is ice-00ccbbffffaa0568.pkg
(in hex and all low case). During initialization, the driver searches
in the following paths in order: /lib/firmware/updates/intel/ice/ddp
and /lib/firmware/intel/ice/ddp. The corresponding device-specific DDP
package will be downloaded first if the file exists. If not, then the
driver tries to load the default package. The type of loaded package
is stored in ``ice_adapter->active_pkg_type``.

A symbolic link to the DDP package file is also ok. The same package
file is used by both the kernel driver and the DPDK PMD.

.. Note::

Windows support: The DDP package is not supported on Windows so,
loading of the package is disabled on Windows.
46 changes: 43 additions & 3 deletions drivers/net/ice/ice_ethdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#include <ethdev_pci.h>

#include <ctype.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
Expand Down Expand Up @@ -1873,21 +1874,60 @@ ice_load_pkg_type(struct ice_hw *hw)
return package_type;
}

static int ice_read_customized_path(char *pkg_file, uint16_t buff_len)
{
int fp, n;

fp = open(ICE_PKG_FILE_CUSTOMIZED_PATH, O_RDONLY);
if (fp < 0) {
PMD_INIT_LOG(INFO, "Failed to read CUSTOMIZED_PATH");
return -EIO;
}

n = read(fp, pkg_file, buff_len - 1);
if (n == 0) {
close(fp);
return -EIO;
}

if (pkg_file[n - 1] == '\n')
n--;

pkg_file[n] = '\0';

close(fp);
return 0;
}

int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn)
{
struct ice_hw *hw = &adapter->hw;
char pkg_file[ICE_MAX_PKG_FILENAME_SIZE];
char customized_path[ICE_MAX_PKG_FILENAME_SIZE];
char opt_ddp_filename[ICE_MAX_PKG_FILENAME_SIZE];
void *buf;
size_t bufsz;
int err;

if (!use_dsn)
goto no_dsn;

memset(opt_ddp_filename, 0, ICE_MAX_PKG_FILENAME_SIZE);
snprintf(opt_ddp_filename, ICE_MAX_PKG_FILENAME_SIZE,
"ice-%016" PRIx64 ".pkg", dsn);

if (ice_read_customized_path(customized_path, ICE_MAX_PKG_FILENAME_SIZE) == 0) {
if (use_dsn) {
snprintf(pkg_file, RTE_DIM(pkg_file), "%s/%s",
customized_path, opt_ddp_filename);
if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0)
goto load_fw;
}
snprintf(pkg_file, RTE_DIM(pkg_file), "%s/%s", customized_path, "ice.pkg");
if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0)
goto load_fw;
}

if (!use_dsn)
goto no_dsn;

strncpy(pkg_file, ICE_PKG_FILE_SEARCH_PATH_UPDATES,
ICE_MAX_PKG_FILENAME_SIZE);
strcat(pkg_file, opt_ddp_filename);
Expand Down
1 change: 1 addition & 0 deletions drivers/net/ice/ice_ethdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
#define ICE_PKG_FILE_UPDATES "/lib/firmware/updates/intel/ice/ddp/ice.pkg"
#define ICE_PKG_FILE_SEARCH_PATH_DEFAULT "/lib/firmware/intel/ice/ddp/"
#define ICE_PKG_FILE_SEARCH_PATH_UPDATES "/lib/firmware/updates/intel/ice/ddp/"
#define ICE_PKG_FILE_CUSTOMIZED_PATH "/sys/module/firmware_class/parameters/path"
#define ICE_MAX_PKG_FILENAME_SIZE 256

#define MAX_ACL_NORMAL_ENTRIES 256
Expand Down

0 comments on commit b58cd61

Please sign in to comment.