From patchwork Tue Sep 19 01:29:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 28888 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4CB251B1C7; Tue, 19 Sep 2017 03:31:32 +0200 (CEST) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0082.outbound.protection.outlook.com [104.47.37.82]) by dpdk.org (Postfix) with ESMTP id CBF331AEEB for ; Tue, 19 Sep 2017 03:31:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=DxOKCYuNaxMq/gby+iwtllEP/irUWDPZX6JXb/v0cj8=; b=BkhOZAZCIGMGIH3Vijqrv/tCgjOorGUp5xTKDaapkp+4vXjc952hnx8Ch/joGX7piHV3iAbr9apfA1W/h5hM8FlX8pCjvXDgSBHqYcDt3UqtgOk8nBDR5cV7p+Wzqp6+327uTC+z4MZt3b9W+E42MOnBVoplljPjUhed9hESfds= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by SN4PR0701MB3838.namprd07.prod.outlook.com (2603:10b6:803:4f::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11; Tue, 19 Sep 2017 01:31:15 +0000 From: Rasesh Mody To: dev@dpdk.org, ferruh.yigit@intel.com Cc: Rasesh Mody , Dept-EngDPDKDev@cavium.com Date: Mon, 18 Sep 2017 18:29:53 -0700 Message-Id: <1505784633-1171-14-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1505784633-1171-1-git-send-email-rasesh.mody@cavium.com> References: <1505784633-1171-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: SN4PR0501CA0015.namprd05.prod.outlook.com (2603:10b6:803:40::28) To SN4PR0701MB3838.namprd07.prod.outlook.com (2603:10b6:803:4f::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8aa418f8-14a4-4b4d-aa3c-08d4fefe1f00 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:SN4PR0701MB3838; X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 3:dHjUk1jkYiE6zz9YhvJBeZ+SbyzWIAwZUp0KTwhRkPFmCTAc7WYq9s3K/yKnTSaT/gRuv+xH6PpgYQ/Mht/6PJfisPKF+aeRGzaHlSuXlsATe7OnUW/IEZb8NUg2AJK3vvhjo8IV41HQtdISoSkt1UKFAMx7Z9v04sum4R46N/i3zkquX2RKCWRKHrLvFUsKSRQgGoMrIcxJ31o3G8sV5u/O72t+Wv9ef7HFSrUy2xuhFQ9Zzgf+mz+IaJPh0WyA; 25:h35I1c0N5eIkg5C8Q1xFlZLJuDJkmyjCOYy6+4SSBHwbhSaFs/5GE6ekF2AkrKUuoi2lCIxcGfqzDWYcyHK6KbJAD8m8eEKk9ylwbSXr57JIB7FCJ4JQ0IXkDejAhV7BzwboGGjKh/+nMQk3dhBUJwBDw85hLOXxOsCfO2W51TzVLdCH1fFPFyw5lHDdHH/7reHbBBdEHmHjEM4PwpXx02rjbvtHhhouBH61ZzE/x0wYDPuvAfeO7U0Qcoi7MBy3RgdMfYp6wJGYY9UrCdbjvUUPGqZr4r8jWAz8BQCr4Ch3CJsoRXBYXiDSppTLZ7Q6G1qzH/qndGg/lGVM8Q8vuQ==; 31:iT/aSrozi5V0Eiqn8djU+9auRM3/jmHpLjhCf9PyOmX4xRTjBZbXD9IT7hZZFZXQDMqALdcG4BmmlqoIOpXTmF2KZ8diDiojARuYD47nM8NqWNcLCZjEZp6GBqo0xIEyPBrhYlTO0yYrtegOh+nMjbenXU6MIJCqkaGSFjyrGQ9GuU7J/HGtm+Ce9I7CP1Yi/ezw/RIvp1cBRqo8cfVguFW44AP542pltH2lGMKSZ2Y= X-MS-TrafficTypeDiagnostic: SN4PR0701MB3838: X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 20:chm9AK/o75zlUuL8mQHPwIU8wjXC8khxXUiATQ/yX0W75nHMEet7Q+rQFezb57PqHl9BKKiXCCm8+Ft1JVyT/upfIByBzDaisW5HJfPSJb1dYfUD0rSOKdvRu4LZPXMevW4eJzUzJnn7gR7zhA4GdNrp7tnxC2moklJ0y0bsptpVA9J4rwTaEAnvdq1QNhdvQAQbnSZEkhAxxxi8muVaVlc+FVzlRrNG8vr9ldzym8qqqQTfuSdNkLWfUgS1LxbIg5FXopgAO/G3hOy37vYyIHHYBt22jHMp5R/yJ/13xrsOQXszoJickdDVbXz2vQVm2dUo+KdLqHl+PbuSjqIbL/m36fTfZTrzxm8HElq/v5c+D6KZhB3HgHo29EHMlyzeoV4TwaFWelLDqiFAyduzZok8458fGxbyzV5SZINVPffxYIQ2h1QXwmaIZ7wPnazWJGgK9w5b2m6ymODzet6/JchGeNbD5rJGJmtPLggHBG71ZMUr/KByUq5K3RpwmtLw; 4:IsfELbMBKpAuChJBbxSprt41DnfPwWqauBK+lS0IydcVQw/WUwrTF7Q+NCyIO85VypArqNEanSdtAeLTteRo7gGIcBOvnlRJxa6IJnNz07X62n2+d24r7Fmbk2vTCcLGnZXc6OTMIH2H1UG8B4HB1vY467W32Z/pc5zmfldqPp7dvabuf9saudYOv07Dr9HZ1DmOGHVYYYKtdxjcCI4fGWE4/wOrot2F8oQFArRCwx/w1a6aSqi2fWiioYEVUeYh X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123555025)(20161123562025)(20161123558100)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN4PR0701MB3838; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN4PR0701MB3838; X-Forefront-PRVS: 04359FAD81 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(199003)(189002)(48376002)(33646002)(68736007)(316002)(21086003)(16526017)(16586007)(72206003)(36756003)(478600001)(97736004)(86362001)(66066001)(25786009)(69596002)(47776003)(50986999)(81166006)(8936002)(50226002)(8676002)(5660300001)(7736002)(53936002)(305945005)(81156014)(55016002)(50466002)(76176999)(6116002)(3846002)(2950100002)(101416001)(4326008)(4720700003)(2906002)(107886003)(6666003)(189998001)(106356001)(5003940100001)(105586002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN4PR0701MB3838; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN4PR0701MB3838; 23:0Ou3kHKGnIlWpMj6+BW6mKmDa3/kNlxp/2iUYn4?= 0bEdwmVEhOTVVESOpMKBsprw29Uv4VXJ6tOxFHSLoL//3dLFs9llT3lJoCkfir/hrtpwht4Gb0hQAr1qRGO4UJvLHaAwaCvt9UTv7fSBx6lqLi2qsPGDtABefsnQeHBCiy7O2LYXxRFxzAFEj3FdbcXqV+UUKx8O2m7nJxVybt13fV2/M81GJ8iaAbPm+2zT7CloYEs6eVu+651P16pdbh6QzL47WwqugOoNndcpsrbfnwGpySlDN5g62w9JJXhwTDa0CYHIJX5xY8SoGpGDnxRE26u7+OlTb6mTXlotuXjLnV1vlJ64G3qnbTlvxiK9g0hs9gadLnRaPwT+cWU2oUNfwqUO0Ds237iM/+JsqUnQdEjftycPdUYdQbCcz60FgJs60s9sFFqYX4EWnQqoHtYddkhx37BdZ8GTPVrQ7qaBFa0Ect8UKycDJ8XycxRYZrBLpuoSsvi9uX8ToQckc8tTcWrml0kCIkmHUR2D+tY3RuJHHbybKN0AkLVSKEpMSitZxTRpdgp0gTJPIyVC39UHCIOlALD/hWvmDHFwLSs37A3aFc6L4SvN6G3/AIN8IimeadNsJHryyWKfnkVzplR6qB/tmt6guW+nUnG2t6ld92wy8GkAV42L/xQEYWILX2LZbeJoysaWNgJGV4vIVGkTxnr1xqq6ZZKsyymRHsuWfl9k1LStMYN6+5XIDwGho3QG57uPdEPcuNTiTAasZ+K1B9mkEI9des/G8pgClIozVglKKs3X71omFFbAe+WwKNfxq/eNBtjuvC26GMjBEW7j6d3fgJocRjD2X+z8QR1bL8TxuclXtaH/JzhUOZmICr3bp49ssCuuhM+ib5MGb0U09DBH8nibE8iEifPgsZiC7mA5+45grTjac89scMkEv1/b3WqFZ+dBxoUtGoH/s5xVAdDQFqSRz+f/PX01kicKsOWmTU26KUjU5SHZN86zLaXGUK0GdMYfRFh6Zb7MtbHXqWwpPFyp0ZxFSuxfvmQprFJpmlLVyIRXhJdf5NR3hDjxeaS/fDr/O7gd1tfnP4iY2DBofOh4vWO9EkXr9Kt6VmeZNHnruKxhe9Cx9xYiaRTg= X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 6:liX05vf1mXA2YFFD4TxXzvabG/vkuwub7hyM3zJTCY7+pNZrObNi5kPkDMPzHAC9+BvV319SMb5xbU05KCeoFHECupXD36d+8XtLs6ZPxHd8GGe+PK1UbDFfehOQtUgQzQc/5PnA9zSngIGTxTX1nLRgxadENJ/F0yoMuKCX5AGTq3vTcev05Adm0sZVP56DyDq49c382yR3Bkjbj+VlSa2D28zbAzh7mK998l0ah1e8anON7AX6gMClyp9f0wPnWo7wWjNyg4c+hRN5F8KjAfIB54jZml0D5BqfKOcRjpJmRYSbab+nau+iv76VoYAcvWL6QBWgH7yUXDILH2GqSw==; 5:WLfYGsR92mz4EXOw658XjyUdDj4XguYR/Wk33il5SfO38DGyWlJf0UGgMnXkC3dVl1roHwTP7Hh3zaXszPdPNFtxrIOdcfG1+sTjs1B99HPzOz50GZ83YgbQvKap/Kkwwa755bXmp5FMxL0gJ5hDWw==; 24:seX2lYBSNXTmpD1ttDGdZHmfPvZVDKkj8ToLJJNUGRLCjE9liybsV7xLdz/WW6EB1EIijcerh0sOYPMKtCJyuBEnytxp57Cqmxxs9nLU3aw=; 7:iTKDzUNCM1/x1PouKJm/Mo/j7t6ex/WLNm1Ejl4aV+eq4NBQAao0wkg1Ws2wUPtX7UEMW8VJC98ric3pIXguCJj7QUBfrk0HFF5+/PUiba8aJE0o/YL+Mh0fUUrfHRAmlKl6naazZp19iUDyQjT90P0RvgXb52J65B3z/lTPzlxGZAHD8hWh0awjUj1FlxTLiPfHWC/vcMZxHVQrQASPI0JwzqGDmRIfeGEboVV0Ljg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2017 01:31:15.8711 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN4PR0701MB3838 Subject: [dpdk-dev] [PATCH 13/53] net/qede/base: alter driver's force load behavior X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" - Add an option to override the default force load behavior. - PMD will set the override force load parameter to ECORE_OVERRIDE_FORCE_LOAD_ALWAYS. - Modify the printout when a force load is required to include the loaded value - No need for 'default' when switching over enums and covering all the values. Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_dev.c | 32 +++++++++--- drivers/net/qede/base/ecore_dev_api.h | 44 ++++++++++------ drivers/net/qede/base/ecore_mcp.c | 93 ++++++++++++++++----------------- drivers/net/qede/base/ecore_mcp.h | 5 ++ drivers/net/qede/qede_main.c | 14 +++-- 5 files changed, 114 insertions(+), 74 deletions(-) diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c index b206b44..938834b 100644 --- a/drivers/net/qede/base/ecore_dev.c +++ b/drivers/net/qede/base/ecore_dev.c @@ -1980,6 +1980,30 @@ static void ecore_pglueb_clear_err(struct ecore_hwfn *p_hwfn, 1 << p_hwfn->abs_pf_id); } +static void +ecore_fill_load_req_params(struct ecore_load_req_params *p_load_req, + struct ecore_drv_load_params *p_drv_load) +{ + /* Make sure that if ecore-client didn't provide inputs, all the + * expected defaults are indeed zero. + */ + OSAL_BUILD_BUG_ON(ECORE_DRV_ROLE_OS != 0); + OSAL_BUILD_BUG_ON(ECORE_LOAD_REQ_LOCK_TO_DEFAULT != 0); + OSAL_BUILD_BUG_ON(ECORE_OVERRIDE_FORCE_LOAD_NONE != 0); + + OSAL_MEM_ZERO(p_load_req, sizeof(*p_load_req)); + + if (p_drv_load != OSAL_NULL) { + p_load_req->drv_role = p_drv_load->is_crash_kernel ? + ECORE_DRV_ROLE_KDUMP : + ECORE_DRV_ROLE_OS; + p_load_req->timeout_val = p_drv_load->mfw_timeout_val; + p_load_req->avoid_eng_reset = p_drv_load->avoid_eng_reset; + p_load_req->override_force_load = + p_drv_load->override_force_load; + } +} + enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, struct ecore_hw_init_params *p_params) { @@ -2021,12 +2045,8 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, if (rc != ECORE_SUCCESS) return rc; - OSAL_MEM_ZERO(&load_req_params, sizeof(load_req_params)); - load_req_params.drv_role = p_params->is_crash_kernel ? - ECORE_DRV_ROLE_KDUMP : - ECORE_DRV_ROLE_OS; - load_req_params.timeout_val = p_params->mfw_timeout_val; - load_req_params.avoid_eng_reset = p_params->avoid_eng_reset; + ecore_fill_load_req_params(&load_req_params, + p_params->p_drv_load_params); rc = ecore_mcp_load_req(p_hwfn, p_hwfn->p_main_ptt, &load_req_params); if (rc != ECORE_SUCCESS) { diff --git a/drivers/net/qede/base/ecore_dev_api.h b/drivers/net/qede/base/ecore_dev_api.h index 9126cf9..99a9c49 100644 --- a/drivers/net/qede/base/ecore_dev_api.h +++ b/drivers/net/qede/base/ecore_dev_api.h @@ -57,22 +57,13 @@ void ecore_init_dp(struct ecore_dev *p_dev, */ void ecore_resc_setup(struct ecore_dev *p_dev); -struct ecore_hw_init_params { - /* Tunnelling parameters */ - struct ecore_tunnel_info *p_tunn; - - bool b_hw_start; - - /* Interrupt mode [msix, inta, etc.] to use */ - enum ecore_int_mode int_mode; - - /* NPAR tx switching to be used for vports configured for tx-switching - */ - bool allow_npar_tx_switch; - - /* Binary fw data pointer in binary fw file */ - const u8 *bin_fw_data; +enum ecore_override_force_load { + ECORE_OVERRIDE_FORCE_LOAD_NONE, + ECORE_OVERRIDE_FORCE_LOAD_ALWAYS, + ECORE_OVERRIDE_FORCE_LOAD_NEVER, +}; +struct ecore_drv_load_params { /* Indicates whether the driver is running over a crash kernel. * As part of the load request, this will be used for providing the * driver role to the MFW. @@ -90,6 +81,29 @@ struct ecore_hw_init_params { /* Avoid engine reset when first PF loads on it */ bool avoid_eng_reset; + + /* Allow overriding the default force load behavior */ + enum ecore_override_force_load override_force_load; +}; + +struct ecore_hw_init_params { + /* Tunneling parameters */ + struct ecore_tunnel_info *p_tunn; + + bool b_hw_start; + + /* Interrupt mode [msix, inta, etc.] to use */ + enum ecore_int_mode int_mode; + + /* NPAR tx switching to be used for vports configured for tx-switching + */ + bool allow_npar_tx_switch; + + /* Binary fw data pointer in binary fw file */ + const u8 *bin_fw_data; + + /* Driver load parameters */ + struct ecore_drv_load_params *p_drv_load_params; }; /** diff --git a/drivers/net/qede/base/ecore_mcp.c b/drivers/net/qede/base/ecore_mcp.c index 1e616ad..868b075 100644 --- a/drivers/net/qede/base/ecore_mcp.c +++ b/drivers/net/qede/base/ecore_mcp.c @@ -538,11 +538,28 @@ static void ecore_mcp_mf_workaround(struct ecore_hwfn *p_hwfn, } #endif -static bool ecore_mcp_can_force_load(u8 drv_role, u8 exist_drv_role) +static bool +ecore_mcp_can_force_load(u8 drv_role, u8 exist_drv_role, + enum ecore_override_force_load override_force_load) { - return (drv_role == DRV_ROLE_OS && - exist_drv_role == DRV_ROLE_PREBOOT) || - (drv_role == DRV_ROLE_KDUMP && exist_drv_role == DRV_ROLE_OS); + bool can_force_load = false; + + switch (override_force_load) { + case ECORE_OVERRIDE_FORCE_LOAD_ALWAYS: + can_force_load = true; + break; + case ECORE_OVERRIDE_FORCE_LOAD_NEVER: + can_force_load = false; + break; + default: + can_force_load = (drv_role == DRV_ROLE_OS && + exist_drv_role == DRV_ROLE_PREBOOT) || + (drv_role == DRV_ROLE_KDUMP && + exist_drv_role == DRV_ROLE_OS); + break; + } + + return can_force_load; } static enum _ecore_status_t ecore_mcp_cancel_load_req(struct ecore_hwfn *p_hwfn, @@ -713,9 +730,9 @@ struct ecore_load_req_out_params { return ECORE_SUCCESS; } -static enum _ecore_status_t eocre_get_mfw_drv_role(struct ecore_hwfn *p_hwfn, - enum ecore_drv_role drv_role, - u8 *p_mfw_drv_role) +static void ecore_get_mfw_drv_role(struct ecore_hwfn *p_hwfn, + enum ecore_drv_role drv_role, + u8 *p_mfw_drv_role) { switch (drv_role) { case ECORE_DRV_ROLE_OS: @@ -724,12 +741,7 @@ static enum _ecore_status_t eocre_get_mfw_drv_role(struct ecore_hwfn *p_hwfn, case ECORE_DRV_ROLE_KDUMP: *p_mfw_drv_role = DRV_ROLE_KDUMP; break; - default: - DP_ERR(p_hwfn, "Unexpected driver role %d\n", drv_role); - return ECORE_INVAL; } - - return ECORE_SUCCESS; } enum ecore_load_req_force { @@ -738,10 +750,9 @@ enum ecore_load_req_force { ECORE_LOAD_REQ_FORCE_ALL, }; -static enum _ecore_status_t -ecore_get_mfw_force_cmd(struct ecore_hwfn *p_hwfn, - enum ecore_load_req_force force_cmd, - u8 *p_mfw_force_cmd) +static void ecore_get_mfw_force_cmd(struct ecore_hwfn *p_hwfn, + enum ecore_load_req_force force_cmd, + u8 *p_mfw_force_cmd) { switch (force_cmd) { case ECORE_LOAD_REQ_FORCE_NONE: @@ -753,12 +764,7 @@ enum ecore_load_req_force { case ECORE_LOAD_REQ_FORCE_ALL: *p_mfw_force_cmd = LOAD_REQ_FORCE_ALL; break; - default: - DP_ERR(p_hwfn, "Unexpected force value %d\n", force_cmd); - return ECORE_INVAL; } - - return ECORE_SUCCESS; } enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, @@ -767,7 +773,7 @@ enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, { struct ecore_load_req_out_params out_params; struct ecore_load_req_in_params in_params; - u8 mfw_drv_role, mfw_force_cmd; + u8 mfw_drv_role = 0, mfw_force_cmd; enum _ecore_status_t rc; #ifndef ASIC_ONLY @@ -782,17 +788,11 @@ enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, in_params.drv_ver_0 = ECORE_VERSION; in_params.drv_ver_1 = ecore_get_config_bitmap(); in_params.fw_ver = STORM_FW_VERSION; - rc = eocre_get_mfw_drv_role(p_hwfn, p_params->drv_role, &mfw_drv_role); - if (rc != ECORE_SUCCESS) - return rc; - + ecore_get_mfw_drv_role(p_hwfn, p_params->drv_role, &mfw_drv_role); in_params.drv_role = mfw_drv_role; in_params.timeout_val = p_params->timeout_val; - rc = ecore_get_mfw_force_cmd(p_hwfn, ECORE_LOAD_REQ_FORCE_NONE, - &mfw_force_cmd); - if (rc != ECORE_SUCCESS) - return rc; - + ecore_get_mfw_force_cmd(p_hwfn, ECORE_LOAD_REQ_FORCE_NONE, + &mfw_force_cmd); in_params.force_cmd = mfw_force_cmd; in_params.avoid_eng_reset = p_params->avoid_eng_reset; @@ -824,19 +824,20 @@ enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, p_hwfn->mcp_info->block_mb_sending = false; if (ecore_mcp_can_force_load(in_params.drv_role, - out_params.exist_drv_role)) { + out_params.exist_drv_role, + p_params->override_force_load)) { DP_INFO(p_hwfn, - "A force load is required [existing: role %d, fw_ver 0x%08x, drv_ver 0x%08x_0x%08x]. Sending a force load request.\n", + "A force load is required [{role, fw_ver, drv_ver}: loading={%d, 0x%08x, 0x%08x_%08x}, existing={%d, 0x%08x, 0x%08x_%08x}]\n", + in_params.drv_role, in_params.fw_ver, + in_params.drv_ver_0, in_params.drv_ver_1, out_params.exist_drv_role, out_params.exist_fw_ver, out_params.exist_drv_ver_0, out_params.exist_drv_ver_1); - rc = ecore_get_mfw_force_cmd(p_hwfn, - ECORE_LOAD_REQ_FORCE_ALL, - &mfw_force_cmd); - if (rc != ECORE_SUCCESS) - return rc; + ecore_get_mfw_force_cmd(p_hwfn, + ECORE_LOAD_REQ_FORCE_ALL, + &mfw_force_cmd); in_params.force_cmd = mfw_force_cmd; OSAL_MEM_ZERO(&out_params, sizeof(out_params)); @@ -846,7 +847,9 @@ enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, return rc; } else { DP_NOTICE(p_hwfn, false, - "A force load is required [existing: role %d, fw_ver 0x%08x, drv_ver 0x%08x_0x%08x]. Avoiding to prevent disruption of active PFs.\n", + "A force load is required [{role, fw_ver, drv_ver}: loading={%d, 0x%08x, x%08x_0x%08x}, existing={%d, 0x%08x, 0x%08x_0x%08x}] - Avoid\n", + in_params.drv_role, in_params.fw_ver, + in_params.drv_ver_0, in_params.drv_ver_1, out_params.exist_drv_role, out_params.exist_fw_ver, out_params.exist_drv_ver_0, @@ -877,19 +880,11 @@ enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, return ECORE_INVAL; } break; - case FW_MSG_CODE_DRV_LOAD_REFUSED_PDA: - case FW_MSG_CODE_DRV_LOAD_REFUSED_DIAG: - case FW_MSG_CODE_DRV_LOAD_REFUSED_HSI: - case FW_MSG_CODE_DRV_LOAD_REFUSED_REJECT: - DP_NOTICE(p_hwfn, false, - "MFW refused a load request [resp 0x%08x]. Aborting.\n", - out_params.load_code); - return ECORE_BUSY; default: DP_NOTICE(p_hwfn, false, - "Unexpected response to load request [resp 0x%08x]. Aborting.\n", + "Unexpected refusal to load request [resp 0x%08x]. Aborting.\n", out_params.load_code); - break; + return ECORE_BUSY; } p_params->load_code = out_params.load_code; diff --git a/drivers/net/qede/base/ecore_mcp.h b/drivers/net/qede/base/ecore_mcp.h index 5d2f4e5..9b6a9b4 100644 --- a/drivers/net/qede/base/ecore_mcp.h +++ b/drivers/net/qede/base/ecore_mcp.h @@ -13,6 +13,7 @@ #include "mcp_public.h" #include "ecore.h" #include "ecore_mcp_api.h" +#include "ecore_dev_api.h" /* Using hwfn number (and not pf_num) is required since in CMT mode, * same pf_num may be used by two different hwfn @@ -153,9 +154,13 @@ enum ecore_drv_role { }; struct ecore_load_req_params { + /* Input params */ enum ecore_drv_role drv_role; u8 timeout_val; /* 1..254, '0' - default value, '255' - no timeout */ bool avoid_eng_reset; + enum ecore_override_force_load override_force_load; + + /* Output params */ u32 load_code; }; diff --git a/drivers/net/qede/qede_main.c b/drivers/net/qede/qede_main.c index 42b556f..9be8f80 100644 --- a/drivers/net/qede/qede_main.c +++ b/drivers/net/qede/qede_main.c @@ -221,10 +221,11 @@ static void qed_stop_iov_task(struct ecore_dev *edev) static int qed_slowpath_start(struct ecore_dev *edev, struct qed_slowpath_params *params) { + struct ecore_drv_load_params drv_load_params; + struct ecore_hw_init_params hw_init_params; + struct ecore_mcp_drv_version drv_version; const uint8_t *data = NULL; struct ecore_hwfn *hwfn; - struct ecore_mcp_drv_version drv_version; - struct ecore_hw_init_params hw_init_params; struct ecore_ptt *p_ptt; int rc; @@ -280,8 +281,13 @@ static int qed_slowpath_start(struct ecore_dev *edev, hw_init_params.int_mode = ECORE_INT_MODE_MSIX; hw_init_params.allow_npar_tx_switch = true; hw_init_params.bin_fw_data = data; - hw_init_params.mfw_timeout_val = ECORE_LOAD_REQ_LOCK_TO_DEFAULT; - hw_init_params.avoid_eng_reset = false; + + memset(&drv_load_params, 0, sizeof(drv_load_params)); + drv_load_params.mfw_timeout_val = ECORE_LOAD_REQ_LOCK_TO_DEFAULT; + drv_load_params.avoid_eng_reset = false; + drv_load_params.override_force_load = ECORE_OVERRIDE_FORCE_LOAD_ALWAYS; + hw_init_params.p_drv_load_params = &drv_load_params; + rc = ecore_hw_init(edev, &hw_init_params); if (rc) { DP_ERR(edev, "ecore_hw_init failed\n");