From patchwork Mon Jan 15 02:54:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chaoyong He X-Patchwork-Id: 135869 X-Patchwork-Delegate: ferruh.yigit@amd.com 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 01313438C7; Mon, 15 Jan 2024 03:55:46 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D71A340A6F; Mon, 15 Jan 2024 03:55:02 +0100 (CET) Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2119.outbound.protection.outlook.com [40.107.92.119]) by mails.dpdk.org (Postfix) with ESMTP id 62046406B8 for ; Mon, 15 Jan 2024 03:55:01 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R9smm8OkYdIFN4zV+oiTgcGEUitAP7F2NJiCq70Uj3iHX00NvNqxIPeqOwZCF01MCzR9WHeztL3Jzqa7waMGEVSuBO1MaqnaGh7RMaYAzA4MGJfYmOCt8uIu2Q/hXxB8bU2rgPR2bi4PQgVtIeoltV76uq0nsQm6YPuiXJO+XGXMkWR1KtIPmWSg6xQm7DtpcoY34EAtHEmYSV5+r5UntxAN+j1h/+7S0M814Ljh0uJANYTyavGQts/9oDKvU1oOPv+IUArQ964EiYGDI5p1Nnkf9Ug/Pnd6w6fYDfBXm1NE9ZFYP9VX0BZeJYaYNwikaQ9737a2taDW3bkx/AYmCg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ANNvfr296muRU03PSohPR86+iuqIWhEJgZnJGWuBIo0=; b=MDSIfpOFNFrhYKPHN6OJ4ARl7GbSU3lkb8qUmpRWkC2odTkIVCAg8jOYlJ+HHWBDSpU3JZL+x6kkH5HAsU3d6Tk7TwzURAAuYLT/RNOFuzTd/6bN8cKwwuNlk8qbXcjHL+O4i0ohYkGcppj5BhctXyhVCr/S81kI0zIovKBLiFM5920Yb67dBcbSHGV1dMoNHH5K9IV69eMo4eIdMAgvVTi/ULpDDKqfPVplzICRCrYPjimWYLgwaHpLoi3B0EBuyyDW+VcTMQVrVJPt/JVWZNe2Vck4ZyCTqS7xAwYfKd0ev5RTw/579kOPVhj5EeE61kJVbeJ1S4oKGGIblu1mqw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ANNvfr296muRU03PSohPR86+iuqIWhEJgZnJGWuBIo0=; b=ihGp976ta70ju8+PBvgVywqj+AkLjFiJH6BNDUYqD0ni2h4iuagI72l/mG3UB+zXdwNU1ESbCQi9QiL5evwHFHynytqPvWyJ3EBJvjWaCKCawMcSTJBKjR5IQYxVdqtK29TJAthHUYV63YWvbC2n240iehglH0R05HdGHzC0yng= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) by SA0PR13MB6002.namprd13.prod.outlook.com (2603:10b6:806:152::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7181.21; Mon, 15 Jan 2024 02:54:58 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::8e02:f738:570a:f8aa]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::8e02:f738:570a:f8aa%7]) with mapi id 15.20.7181.026; Mon, 15 Jan 2024 02:54:58 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, Peng Zhang , Chaoyong He , Long Wu Subject: [PATCH 7/8] net/nfp: reload the firmware only when firmware changed Date: Mon, 15 Jan 2024 10:54:18 +0800 Message-Id: <20240115025419.2447759-8-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20240115025419.2447759-1-chaoyong.he@corigine.com> References: <20240115025419.2447759-1-chaoyong.he@corigine.com> X-ClientProxiedBy: PH0PR07CA0025.namprd07.prod.outlook.com (2603:10b6:510:5::30) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|SA0PR13MB6002:EE_ X-MS-Office365-Filtering-Correlation-Id: 43f2b5f1-bc87-4846-68ce-08dc15755c04 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: zW1wD2Y8KT0B9z+wB9OVxZkGpQMyr4cNH+i5n/s3a2yhUYzOPJw6P8c+q4nB2F2gl0bizRCmYJiaVVcV3ePka/Pk5iXttTh8qSG1TG7yVyLDVHFUzNyP0n4OgwL5ejWbxRYG4JR6s2n1vcv5HxH0uMO0+a2s4fJ7NLKTWyKnUU5cMvvGDTXpgSwGtcKBwdI8JGn5O9Z0dN6skS0BohI+8jmo2wUPDj5Lbve44xJ5vEJ7pyLSNJzbPkJTu6Ab3vPmwTxYZcI5qTAuj6XHxSvVfdEkj7p8VruWu4+YE8kCPUdHhw18nClQi0pwQJLIkPl5G/t2hHD0CNpN1eMqf1PXZ7mc24ZIs/Q+ZpHTpRdYrtI6/ex52N4sb9WLUZ+IKwS2TUt2EtV8HgCsWpGDFANPjO4CowMURl+qpG2Gb72u5ZHgHpv2FROG0lMVFTiStO/sqjVYyyx4xsRngMA/Etv/dwDF6pIZlrE4+BBClpuBwkGx+PaJd8IBkykQXK1JTNLf+Q5FpSQgvrNfnT3A8+bJVS9qYleUPqvAHjw6mWbe16XNsdg2+sywnZh55svgk93ZXAL9iRhfC1aV6YcHCWQ6lCGhDlYGDo8WmPiiuuqjbkB/dCDipfdNy1p1PsaHtIn0 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(376002)(396003)(366004)(346002)(39830400003)(136003)(230922051799003)(1800799012)(186009)(64100799003)(451199024)(1076003)(6486002)(6506007)(6666004)(6512007)(26005)(107886003)(36756003)(2616005)(83380400001)(38350700005)(52116002)(86362001)(38100700002)(41300700001)(478600001)(44832011)(8676002)(4326008)(8936002)(5660300002)(66946007)(66476007)(66556008)(6916009)(316002)(2906002)(54906003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: z78uLaMuxWSUmCXk1Gv8ecTut37J1j01i7sQWwmmar1OIRfO08eq2ZhT6kX2QXd22mNfR0QosKoIaWhLrLNPj+VcRuXbig9eiAsfIcX0oBt/8YNNtLlbsUnGrQtco7inrDagDbPBTWZZ6JQyoNbiqubcaXsgRNzC8Cqs+7UTTHqsi2Vyy55G0DWBD+a7cMWf6KKsqSGbSUBAZOZQV4jtEVpajMUUtpQFf6kX5LLmG0riTt9T91IVbgv5oQmMGyPMEZorcSTuiPLU5pS4OsKHPhr/CWH9aOZI0tQypkBy8IgPN17oHBUIhtr2HgSXPCdSkyEMWSdJgNo/ujLFunjtNPvo6UrWZ4Rinj3LiqaU5DjYPCJ6r/3C9hKY785BKemYwLn+5CJX7/wiXEPQmvGqtuRdkVm4i+wK10qbKyrNposlienzk5p/biC5zd6ASu4qYeUreaQ/xkhY2Q2SyFH02GdHc/6qR5UfBqqJFpLWRLeZp+A6nMLaLDtjYfq8wttB3a/N/xWaEh8BJWBC1BbMnMKgEGjWe3aBeM1VBI9drU3RbBxV+j1hfuxvTQfME4vbcTIpTpkh4C0biuPGk3dzAoqZgMBkADrqdzuZatlyzVd/ksg67OLpaltQoBdUiCgIN0TAmM5x0BonMzO1/36M3Mz+8AcIZ+9dWSuWQ/AxhSmBhMnKz2kVSnFyTG2SD3DsXstLW6EHjQqNN2hexgabzgm0dD2WFekPGUBhghkOXfILgzQT6Mb7IWIlH/CIgVVOT2yYukFpcg/lNWyTXY2WMV3fuMGtComUCYd9v5yqiuAo/CLYngoVcf21xZLPJrYYzUa6a9CfJKPslYBgAcxh+AJFmQYbCWtID9+OMif6jIUQnY+nY6irSidKOewe7ZWErh3crujUdynIpdOQCDIaVEZuvwg6oxYcXDTNiURsSHAPyZqhuB4MHMzFIOEZto7a8j8wrJl2s4PH/dPmfo8kRr8bRur0X/meRJ2zEiUb8DM7fjKJ7EKogKOHMknNWqUN4NTUr/BYJSAC+UyfOU/kgogaa+J6XIEA1+17M76lYoKH+Og1dWmlUBTmnsuUahOojfiVHUx962zCSAY2XeOdcsN7UbAakAgCz2zxI5RyBREk0NtqyBddQRJmRpMGG91mIQlu7C7H6HagvqMoBKSQh7yyJnQ96Cz8hs6+MwJfne7DNmmDZLO3WlgfJ+z9dpU9FvOFYhMxnTGDe3lSs+rI3hdQlRmBfV0LGe3NmMntdYqk+fdqpbHwUdw2OZCkqHHQZ854Fz98Pq6/Ib20dGPL8/jVq3VzvQxtM+idxQYeESudJ0D4NcOVFZ1hfsLomGuqI0gmm+Xzezvy2vgCHk4ooL+Lw6tWjGXg3HCAab1vDeLjZ7HD3E7MirP0lGRAb7owQ/dZZSoitLiTwPZXg3+hy/ZCIocs2dNxMkXHdCeqJu0xAXQdxeeL8lAJceoO7++vxhR5vLW+c6IW5WKUCDnRBtcpNmFArxNlL/Tj3lNdPaLW9M3YhQ85CL/FTaaMDihEjLT5XM70V+nGGYNP6ew6S0nMR4uwRkgrdiwP72Do4VG8y2vlV6eIRwOc4jm8omjkwLtZtVNb9DJgAVhvQl78mQ== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43f2b5f1-bc87-4846-68ce-08dc15755c04 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jan 2024 02:54:58.1845 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FcvlEohoE6kCV2hw6wiZCOAoUMkn9zFLEcktc9gHnDcQcj0CmGMzAu1c8ohmTV+PDm3DG514fv4txPUAa8WZj7FcN1boqIax6IZDvsrTVtM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR13MB6002 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 From: Peng Zhang Add the interfaces of getting firmware build time from BSP and ELF file, only reloading the firmware when the build time is different, which means the firmware has changed. This will accelerate the average startup time for both multi-PF and single-PF firmware. Signed-off-by: Peng Zhang Reviewed-by: Chaoyong He Reviewed-by: Long Wu --- drivers/net/nfp/nfp_ethdev.c | 86 ++++++++++++++++++++++++++++---- drivers/net/nfp/nfp_net_common.c | 17 +++++++ drivers/net/nfp/nfp_net_common.h | 2 + 3 files changed, 94 insertions(+), 11 deletions(-) diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 46bb09a211..22edf11253 100644 --- a/drivers/net/nfp/nfp_ethdev.c +++ b/drivers/net/nfp/nfp_ethdev.c @@ -19,6 +19,7 @@ #include "nfpcore/nfp_nsp.h" #include "nfpcore/nfp6000_pcie.h" #include "nfpcore/nfp_resource.h" +#include "nfpcore/nfp_elf.h" #include "nfp_cpp_bridge.h" #include "nfp_ipsec.h" @@ -1067,6 +1068,36 @@ nfp_fw_unload(struct nfp_cpp *cpp) nfp_nsp_close(nsp); } +/* 0 is firmware not change, 1 is firmware changed, < 0 has error */ +static int +nfp_fw_check_change(struct nfp_cpp *cpp, + char *fw_name, + bool *fw_changed) +{ + int ret; + struct nfp_net_hw hw; + uint32_t new_buildtime = 0; + uint32_t old_buildtime = 0; + + ret = nfp_elf_get_fw_buildtime(&new_buildtime, fw_name); + if (ret < 0) + return ret; + + hw.cpp = cpp; + nfp_net_get_fw_buildtime(&hw, &old_buildtime); + if (new_buildtime != old_buildtime) { + PMD_DRV_LOG(INFO, "FW version is changed, new %u, old %u", + new_buildtime, old_buildtime); + *fw_changed = true; + } else { + PMD_DRV_LOG(INFO, "FW version is not changed, build_time is %u.", + new_buildtime); + *fw_changed = false; + } + + return 0; +} + static int nfp_fw_reload(struct nfp_nsp *nsp, char *fw_name) @@ -1132,15 +1163,39 @@ nfp_fw_skip_load(const struct nfp_dev_info *dev_info, return false; } +static int +nfp_fw_reload_for_single_pf(struct nfp_nsp *nsp, + char *fw_name, + struct nfp_cpp *cpp) +{ + int err; + bool fw_changed = true; + + if (nfp_nsp_fw_loaded(nsp)) { + err = nfp_fw_check_change(cpp, fw_name, &fw_changed); + if (err < 0) + return err; + } + + if (!fw_changed) + return 0; + + err = nfp_fw_reload(nsp, fw_name); + if (err < 0) + return err; + + return 0; +} static int -nfp_fw_reload_for_multipf(struct nfp_nsp *nsp, +nfp_fw_reload_for_multi_pf(struct nfp_nsp *nsp, char *fw_name, struct nfp_cpp *cpp, const struct nfp_dev_info *dev_info, struct nfp_multi_pf *multi_pf) { int err; + bool fw_changed = true; bool skip_load_fw = false; err = nfp_net_keepalive_init(cpp, multi_pf); @@ -1151,27 +1206,36 @@ nfp_fw_reload_for_multipf(struct nfp_nsp *nsp, err = nfp_net_keepalive_start(multi_pf); if (err != 0) { - nfp_net_keepalive_uninit(multi_pf); PMD_DRV_LOG(ERR, "NFP write beat failed"); - return err; + goto keepalive_uninit; } - if (nfp_nsp_fw_loaded(nsp)) + if (nfp_nsp_fw_loaded(nsp)) { + err = nfp_fw_check_change(cpp, fw_name, &fw_changed); + if (err < 0) + goto keepalive_stop; + } + + if (!fw_changed) skip_load_fw = nfp_fw_skip_load(dev_info, multi_pf); if (skip_load_fw) return 0; err = nfp_fw_reload(nsp, fw_name); - if (err != 0) { - nfp_net_keepalive_stop(multi_pf); - nfp_net_keepalive_uninit(multi_pf); - return err; - } + if (err != 0) + goto keepalive_stop; nfp_net_keepalive_clear_others(dev_info, multi_pf); return 0; + +keepalive_stop: + nfp_net_keepalive_stop(multi_pf); +keepalive_uninit: + nfp_net_keepalive_uninit(multi_pf); + + return err; } static int @@ -1228,9 +1292,9 @@ nfp_fw_setup(struct rte_pci_device *dev, } if (multi_pf->enabled) - err = nfp_fw_reload_for_multipf(nsp, fw_name, cpp, dev_info, multi_pf); + err = nfp_fw_reload_for_multi_pf(nsp, fw_name, cpp, dev_info, multi_pf); else - err = nfp_fw_reload(nsp, fw_name); + err = nfp_fw_reload_for_single_pf(nsp, fw_name, cpp); nfp_nsp_close(nsp); return err; diff --git a/drivers/net/nfp/nfp_net_common.c b/drivers/net/nfp/nfp_net_common.c index a438eb5871..7b8c175a36 100644 --- a/drivers/net/nfp/nfp_net_common.c +++ b/drivers/net/nfp/nfp_net_common.c @@ -2090,6 +2090,23 @@ nfp_net_get_nsp_info(struct nfp_net_hw *hw, nfp_nsp_close(nsp); } +void +nfp_net_get_fw_buildtime(struct nfp_net_hw *hw, + uint32_t *mip_buildtime) +{ + struct nfp_mip *mip; + + mip = nfp_mip_open(hw->cpp); + if (mip == NULL) { + *mip_buildtime = 0; + return; + } + + *mip_buildtime = nfp_mip_buildtime(mip); + + nfp_mip_close(mip); +} + static void nfp_net_get_mip_name(struct nfp_net_hw *hw, char *mip_name) diff --git a/drivers/net/nfp/nfp_net_common.h b/drivers/net/nfp/nfp_net_common.h index 66c900e3b8..69d17cae17 100644 --- a/drivers/net/nfp/nfp_net_common.h +++ b/drivers/net/nfp/nfp_net_common.h @@ -295,6 +295,8 @@ int nfp_net_fec_get(struct rte_eth_dev *dev, uint32_t *fec_capa); int nfp_net_fec_set(struct rte_eth_dev *dev, uint32_t fec_capa); +void nfp_net_get_fw_buildtime(struct nfp_net_hw *hw, + uint32_t *fw_buildtimes); #define NFP_PRIV_TO_APP_FW_NIC(app_fw_priv)\ ((struct nfp_app_fw_nic *)app_fw_priv)