From patchwork Wed Aug 28 01:57:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhichao Zeng X-Patchwork-Id: 143417 Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DB0334587D; Wed, 28 Aug 2024 03:43:41 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id A2B1340285; Wed, 28 Aug 2024 03:43:41 +0200 (CEST) Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.12]) by mails.dpdk.org (Postfix) with ESMTP id C74824026F for ; Wed, 28 Aug 2024 03:43:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1724809419; x=1756345419; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=8wFfTov1o2e0SqRsk7FtJIpr1LAa3pgASCJto48OacA=; b=MW+7H0NLNGyJtB6msoX8YoGDYe4zE3zwGgsbAaMoy5ezxOfiL3QhbW0s ltd0Xgb7vbQa5jrCDSIvSq8lGyKwXN2w/r8DBN+DQRudrpXavTmvBDgjH R23Ng0MlvFtvI2L4go+LP3O/r3GV3MZiia84dpnrhXC3zok2GHqegHiWW 0wcyB6sIi8thyK8vLKRs9fAFPpaz9a+Io2f2Fb9V3OVhhyY41jsFP/R0L XVqcIJTn6eMFydaj9+TBiLsFb12TlWzbdpmBn8+6bSmhyClkc6xa8naZo LIe2ihOChwHMV3he67waKRsCljtmKd0ec2E62X9T2vO+qQy1GSC8HoYHd Q==; X-CSE-ConnectionGUID: 9siwRDQGS5GcSzzTPjiDOw== X-CSE-MsgGUID: 3wW/bOH2T6yeSM08iGAZ/Q== X-IronPort-AV: E=McAfee;i="6700,10204,11177"; a="34692584" X-IronPort-AV: E=Sophos;i="6.10,181,1719903600"; d="scan'208";a="34692584" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Aug 2024 18:43:37 -0700 X-CSE-ConnectionGUID: bbejqO96QW2tYGMiwoyNTA== X-CSE-MsgGUID: sEhxquJGRv+3luWLiHhNCQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.10,181,1719903600"; d="scan'208";a="62721029" Received: from unknown (HELO zhichao-dpdk..) ([10.239.252.103]) by fmviesa006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Aug 2024 18:43:35 -0700 From: Zhichao Zeng To: dev@dpdk.org Cc: bruce.richardson@intel.com, Zhichao Zeng Subject: [PATCH] net/ice: support for more flexible loading of DDP package Date: Wed, 28 Aug 2024 09:57:58 +0800 Message-Id: <20240828015758.1047979-1-zhichaox.zeng@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The "Dynamic Device Personalization" package is loaded at initialization time by the driver, but the specific package file loaded depends upon what package file is found first by searching through a hard-coded list of firmware paths. To enable greater control over the package loading, this commit two ways to support custom DDP packages: 1. Add device option to choose a specific DDP package file to load. For example: -a 80:00.0,ddp_pkg_file=/path/to/ice-version.pkg 2. Read firmware search path from "/sys/module/firmware_class/parameters/path" like the kernel behavior. Signed-off-by: Bruce Richardson Signed-off-by: Zhichao Zeng --- doc/guides/nics/ice.rst | 12 ++++++++ drivers/net/ice/ice_ethdev.c | 59 ++++++++++++++++++++++++++++++++++++ drivers/net/ice/ice_ethdev.h | 2 ++ 3 files changed, 73 insertions(+) diff --git a/doc/guides/nics/ice.rst b/doc/guides/nics/ice.rst index ae975d19ad..0484fafbc1 100644 --- a/doc/guides/nics/ice.rst +++ b/doc/guides/nics/ice.rst @@ -108,6 +108,18 @@ Runtime Configuration -a 80:00.0,default-mac-disable=1 +- ``DDP Package File`` + + Rather than have the driver search for the DDP package to load, + or to override what package is used, + the ``ddp_pkg_file`` option can be used to provide the path to a specific package file. + For example:: + + -a 80:00.0,ddp_pkg_file=/path/to/ice-version.pkg + + There is also support for customizing the firmware search path, will read the search path + from "/sys/module/firmware_class/parameters/path" and try to load DDP package. + - ``Protocol extraction for per queue`` Configure the RX queues to do protocol extraction into mbuf for protocol diff --git a/drivers/net/ice/ice_ethdev.c b/drivers/net/ice/ice_ethdev.c index 304f959b7e..a1b542c1af 100644 --- a/drivers/net/ice/ice_ethdev.c +++ b/drivers/net/ice/ice_ethdev.c @@ -36,6 +36,7 @@ #define ICE_ONE_PPS_OUT_ARG "pps_out" #define ICE_RX_LOW_LATENCY_ARG "rx_low_latency" #define ICE_MBUF_CHECK_ARG "mbuf_check" +#define ICE_DDP_FILENAME "ddp_pkg_file" #define ICE_CYCLECOUNTER_MASK 0xffffffffffffffffULL @@ -52,6 +53,7 @@ static const char * const ice_valid_args[] = { ICE_RX_LOW_LATENCY_ARG, ICE_DEFAULT_MAC_DISABLE, ICE_MBUF_CHECK_ARG, + ICE_DDP_FILENAME, NULL }; @@ -692,6 +694,18 @@ handle_field_name_arg(__rte_unused const char *key, const char *value, return 0; } +static int +handle_ddp_filename_arg(__rte_unused const char *key, const char *value, void *name_args) +{ + const char **filename = name_args; + if (strlen(value) >= ICE_MAX_PKG_FILENAME_SIZE) { + PMD_DRV_LOG(ERR, "The DDP package filename is too long : '%s'", value); + return -1; + } + *filename = strdup(value); + return 0; +} + static void ice_check_proto_xtr_support(struct ice_hw *hw) { @@ -1873,6 +1887,20 @@ ice_load_pkg_type(struct ice_hw *hw) return package_type; } +static int ice_read_customized_path(char *pkg_file) +{ + char buf[ICE_MAX_PKG_FILENAME_SIZE]; + FILE *fp = fopen(ICE_PKG_FILE_CUSTOMIZED_PATH, "r"); + if (fp == NULL) { + PMD_INIT_LOG(ERR, "Failed to read CUSTOMIZED_PATH"); + return -EIO; + } + fscanf(fp, "%s\n", buf); + strncpy(pkg_file, buf, ICE_MAX_PKG_FILENAME_SIZE); + + return 0; +} + int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn) { struct ice_hw *hw = &adapter->hw; @@ -1882,12 +1910,28 @@ int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn) size_t bufsz; int err; + if (adapter->devargs.ddp_filename != NULL) { + strlcpy(pkg_file, adapter->devargs.ddp_filename, sizeof(pkg_file)); + if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0) { + goto load_fw; + } else { + PMD_INIT_LOG(ERR, "Cannot load DDP file: %s\n", pkg_file); + return -1; + } + } + 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); + + ice_read_customized_path(pkg_file); + strcat(pkg_file, opt_ddp_filename); + if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0) + goto load_fw; + strncpy(pkg_file, ICE_PKG_FILE_SEARCH_PATH_UPDATES, ICE_MAX_PKG_FILENAME_SIZE); strcat(pkg_file, opt_ddp_filename); @@ -1901,6 +1945,10 @@ int ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn) goto load_fw; no_dsn: + ice_read_customized_path(pkg_file); + if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0) + goto load_fw; + strncpy(pkg_file, ICE_PKG_FILE_UPDATES, ICE_MAX_PKG_FILENAME_SIZE); if (rte_firmware_read(pkg_file, &buf, &bufsz) == 0) goto load_fw; @@ -2217,6 +2265,14 @@ static int ice_parse_devargs(struct rte_eth_dev *dev) ret = rte_kvargs_process(kvlist, ICE_RX_LOW_LATENCY_ARG, &parse_bool, &ad->devargs.rx_low_latency); + if (ret) + goto bail; + + ret = rte_kvargs_process(kvlist, ICE_DDP_FILENAME, + &handle_ddp_filename_arg, &ad->devargs.ddp_filename); + if (ret) + goto bail; + bail: rte_kvargs_free(kvlist); return ret; @@ -2689,6 +2745,8 @@ ice_dev_close(struct rte_eth_dev *dev) ice_free_hw_tbls(hw); rte_free(hw->port_info); hw->port_info = NULL; + free((void *)(uintptr_t)ad->devargs.ddp_filename); + ad->devargs.ddp_filename = NULL; ice_shutdown_all_ctrlq(hw, true); rte_free(pf->proto_xtr); pf->proto_xtr = NULL; @@ -6981,6 +7039,7 @@ RTE_PMD_REGISTER_PARAM_STRING(net_ice, ICE_PROTO_XTR_ARG "=[queue:]" ICE_SAFE_MODE_SUPPORT_ARG "=<0|1>" ICE_DEFAULT_MAC_DISABLE "=<0|1>" + ICE_DDP_FILENAME "=" ICE_RX_LOW_LATENCY_ARG "=<0|1>"); RTE_LOG_REGISTER_SUFFIX(ice_logtype_init, init, NOTICE); diff --git a/drivers/net/ice/ice_ethdev.h b/drivers/net/ice/ice_ethdev.h index 3ea9f37dc8..2781362d04 100644 --- a/drivers/net/ice/ice_ethdev.h +++ b/drivers/net/ice/ice_ethdev.h @@ -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 @@ -568,6 +569,7 @@ struct ice_devargs { /* Name of the field. */ char xtr_field_name[RTE_MBUF_DYN_NAMESIZE]; uint64_t mbuf_check; + const char *ddp_filename; }; /**