From patchwork Mon Apr 9 04:48:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 37622 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 BAE1C1B751; Mon, 9 Apr 2018 06:49:25 +0200 (CEST) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0081.outbound.protection.outlook.com [104.47.34.81]) by dpdk.org (Postfix) with ESMTP id A3E731B722 for ; Mon, 9 Apr 2018 06:49:09 +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=UmHsPkAKXcSqVYwLUAhzzb4OWKASo07s1Rwb9pCkKYM=; b=Ug1dvXtS76V1likMz1bW19+FMBLuZIcp8mXfI4MVLiTjHepCWdaNLnFcm0k5sNmbQfBWCCwnfxGFpb2Z7HuwCWioV9m948yg2Y95nsSIdRhyvK38lPziCqN2rAzuHjUNLdJTPjDjiFwXDz0p2VkM2klGsCR4GoiJQm+cbN1yLcc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.653.12; Mon, 9 Apr 2018 04:49:06 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Rasesh Mody , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com Date: Sun, 8 Apr 2018 21:48:04 -0700 Message-Id: <1523249290-7444-9-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> References: <1522561624-15817-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: BYAPR03CA0036.namprd03.prod.outlook.com (2603:10b6:a02:a8::49) To MWHPR0701MB3675.namprd07.prod.outlook.com (2603:10b6:301:7e::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2e01eef6-c7e6-4369-bcaa-08d59dd5399e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:MWHPR0701MB3675; X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 3:RQsl9RHJvs27darUhhOSmreaQDBaZFPDv1fxKHZvsEAVsIsikn9IUL9X5AYW2Q6KMtqDJpQ0iSwSkQ5rc8IT5PJYsrvGFRjslpV3VRTT90VHPOArE/teCGBnxJH49LLOymZadgX5JoBQftfGz3T9grWnOKd9AhxTyFSVTgorX17hPELN6PLNFhmA8TNxOCyi7++sQz/Lo1jjVxryzauUxdW3SihPL+/Xfk/kYEC37e5laf6EMxlBreGh2X8MSOH4; 25:2xIhbZgGzS4NANLHCMA1ICX/MMAulcJ0JX4MANi9unV9SzGHJVoRvTvBvkT68+hwnrFwdndynbMzG35IDyzl7Bqtb56EF63qQ+yCLSOsLXVTsPLM3XoBp8VI3WlRX4n4o849oMjsm6j3ZoEURKdS+JqHLXqcxsEkf/DXcfOqwSSMoVGKFJRr/psVTCAAb71QPNjEwvBzXbONQH6tcG4bHEImFyeezHa1PEysBKjT6+Vy9SLb02z9LKEXz36T5renZjuZ0vGh4adgvcYKntvgGXcB18J3s6t2DKKwEzSEoxeaSvmCZo9xX0zDqLxSKXY1l11ppGD7e/tBQvLG0YnWoQ==; 31:ZYiqn7n6tGlxtIFALVlphLa9bkgrx5OyoJaETpugFBoytU9REwBE62UQJgQ21sjpiiJEiRXZ4/N9zXzNVq/esVb5+TtMJLt/SvQlWmH14Q4cvGl4Frl43mdebUH4iYRBz+t6pcHOv0OgJQB6Hd8akT+HRXRnAzdH0BMCPXFQH8IkK6BWmMkVzLvcWHs5sonAZlGq1PNj2wMMvlRmehToj85p1fcHJxIRAeJ0IDcH7nQ= X-MS-TrafficTypeDiagnostic: MWHPR0701MB3675: X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 20:InDz9W9zVEYSXhMSllwhGzxfoLY0itBYIblyBz9jlu2IMKxvSn19OcQRZ4Jy68P1wSbrDt8Rg43kUw356yE/CQjSNyVUe2uz28ozaLuUp1ULnFPUBMwmWXVFyM/faj9ZTNonZXbTSzAmfk9srxGFHekPhChGKhu+m/Oq2YmsSXsfdUuQz0XbZUotuZtJ2RMNR9JeMgmQCbP/sv2mQGUr8hQAVRNZmixOidnjULGy+WYXQq1XINdIk0sZ/lgOISlDtOw8n279OUuX95HTi7khLyoRn6xWZumA+N35VPogReBBLCq1pQNEV0Wgmi+BwU00hbPPwb6K91N2o147shxOAMkcRsDHtvKBUjmvxvxgJXXPpt7AIHP27SXed5YmzCfbK7ypM8TK0jabitVsRGv/e2qrqzzvbZj6pxRFFIRm6HKKetvfcekVnZ+X67qCYgfKuZB6yuJq+yYbaigV4mOeAcVa7Mf1K55svDSsRdcv0IsKK08dh5vmY97I5jW6CM52; 4:Kyf0SHEH1d2oPifGPC4Cm19qwUn4otW7aY4csGnNuouwTizkFyYuC7OEIe18hgJ+IyVzQ0cUcdKZ9V/lVJ/fG1W7v0v4cinCLCUBiRET0wiS7yPLWDxeyJ+v5Dy/91p2iT4uzpar5Ap6TsotQYdG5Q86e/+DW7H66vfpa+IC9QTxRYpVAQetPEGO53MheL4EiEOxMWaV8vqDLGL8VeUF5SKrYA7Orflul7/61MfonmnGQv6NQvW4thJch4k60CY6Y1bSwcaeYRUAR653rgiwDA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3002001)(3231221)(944501327)(52105095)(10201501046)(93006095)(93001095)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:MWHPR0701MB3675; BCL:0; PCL:0; RULEID:; SRVR:MWHPR0701MB3675; X-Forefront-PRVS: 0637FCE711 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(366004)(396003)(346002)(39380400002)(39850400004)(376002)(189003)(199004)(105586002)(8936002)(316002)(7736002)(2351001)(72206003)(305945005)(186003)(21086003)(16526019)(486006)(2906002)(59450400001)(2361001)(386003)(55016002)(86362001)(3846002)(478600001)(6116002)(76176011)(50226002)(51416003)(52116002)(7696005)(4326008)(50466002)(48376002)(53936002)(16586007)(81166006)(66066001)(476003)(68736007)(2616005)(11346002)(69596002)(47776003)(26005)(956004)(8676002)(97736004)(4720700003)(25786009)(107886003)(81156014)(36756003)(446003)(106356001)(5660300001)(6916009); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR0701MB3675; H:cavium.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR0701MB3675; 23:T3zBbueuFaQFPMo2xEx27J8FpGfzgZ41pqP60Gy?= sVS0LemNW0zcYYiIl5s6RC1a3tMZ8V4IGFPIBLfix2Fjh7HphdPnfbfwhOTcIi6ryh418kK4V2oybs0DxcIRe6UuDuGsPy2iqsb5EiyT7gGYblK1gkVUAwcz5Y7Rt3WgMbOqYatNui0x1GljyUv2FqvdtwKW2pM/Ptmg5XF6AXVYfGMqi3Ebn6566EXPw/YGMc6/Fj30JyW36xJxrg9yQGu5JBNV7HPs8Y+bZ8ZXZzg/zwqjXhlC6RPkUsPsndTuDYN5TOtvKlIWfTL6tIA8MGnpSiPJBWWhjDnQjA87DlSWI6r7Wp0Q8V9WHWY8trZWY22sP5zZK92nAU/DnQXdtvgE9uWdA1vPw8ZYzamivoWEnOtTVCzgjO2Tfu17pTCsJD2kekTcKNa620A2Q3bd1gLdPb9brBH/3GYwOiKQ+LZy8XQem9dXJaiTYsjAM9biT1JZMv8xn0mP0xg+TI9Lgc7wRYQFVDteT90ZFvJGgevMh+oGTnoHE9pZ0F0U1Q7s01Zxc8qwamlT9zCcPJyW82U96OvHN5lSXypwZ978qYzWHSg4SGpd349GTWVQjqvGXafsV8LzjJBHCsFKKZQdk8kDKFfpOi/k8Co6KjVgBJXqmul2G/6Cqw2DsHPrptHI4c1RUfCXLGQDAMKWh69S5i7BXFMXJsk+Od57e7RT2SE5avsWdzEq3KjZoP5h4Fm8LS+jRjHaxErEKn4zqyrXK2UUEpsQczczrkDXVcBoSo4bhWg9cR9iOyNxZjYn9L4zrba4Guj0RS8WAAWKKRNaKiw8+HnjhRqVNkM/hgc9Khm+PH2IHSDAeI5ZRG+1Eb8QMhOjWRDKPDMumAbleo9utCcsL76xo8kJvD3bUDHV3ffLc8PuDRGEvVZxtv8XeZ3u0E2uB1JaCIAqPpnOAXdKPuLlrEne89xZHmPnSpDXUES2vl7QZ/yHamHC/O4qc8Mc2DIhO6joBTC2kIJCjW/LkmloPCvmvHaaMH07Gy+Qe+vsvBq0+sz8oQkUBw/nMtSNAZPG99f/U+fU4j+Dow9cIU8+dLHdJQ2y9XNQRLokwYsxRliJXb8ODvU806Q4ua8C6H/vR54rt5DN2FIuEu0GLM6EmgtC5tDMz49StSLYxcSkfDXOxuP4OsfjIvHnCXecrMHpk6uIkuqF3hpXOg4bhr1RtFCoXU4amvkx00BWr/xd8PHswOU5g+5W13OvMrzA6SL4sX6743KBr6J9w3ub4ExJhGrvdgjRKgcn4aOW3N131KY6qM2epCbs0bmCsUgwVOYc= X-Microsoft-Antispam-Message-Info: THxynmLf5M4ScSx/23p7SViWX82R2BplUoB7rJ4xzNULxt4HxsQzuKUApvrm7/cVmuJ9p++k1b6qgCwXe8WvEpn9fbMPHWh/Wruj7qYdB72UndwMRf2nwSipgdEI38zgoyS2t2XHvk6F9F80mi3y6/3pd+HvU2GzXCGax09GfU8JRwlKkJC63NYrRCMZdpX0 X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 6:g0FVauKjjjHsXerFEaXt+pWgCHYehAYpDZtSn3FR4sLaiGMpP1iM5SGX/Fwp/H961Pg2ag1ETTg909Ke8m+/8HsiZ4o4D7qsydgYkyHvW8XWfFvwPlLVJLgWO3ZxzgDrPoX5mHUiUeC/h7lbP8ilRY9C8BKK9+YPSuXAy/G7KqiHurjOlMw7eQsCIF18NgJvpvyRG/wivV1B1aVFYwe5tY7a2eQgnhS8raApgBE3wh6fNi/1fvhKCWeh9bAZQiCb51o2XoQFvV7ClzTsiIkluQl7Asu3HCbvLKMocEuzFsTEZqXSlZxDOdtAdn1W9bmCH/sYMr/jYfxv1naHe7L/KRJHCEX02k2VaxFi2oYCfKKlSTb/2mUOGWmcbU9sbLVnL0HDyXDmGHyxk5cl7zz07xJpvB6LZ92KYwmX7hMTsZ5wbPlB+sg9bH8LtFMVMexC3X1zzub0vsA26PY1upaagQ==; 5:T7rXJ507KyopoWPMP6U5mVO0JI/bjXnnc4/LQqUS3s/Omcu03P6mfXeOilbzeQ+3YPFzdqzPSsC3xtUpzTBtYYWETvdFrbHetbgZF5uMiUeAPYL2r+xP9IcAATPj5HCi8yGsWvRUySadjGfE7z097IZ7Iuxp0F/bh4NALJ/e94w=; 24:GLryG0rMvQ6F7+ZIs1PgWflIb67Ja+Rr1gSq6LzI8V3jRooVKkxNLUoYcrshuH5MO3uNdW36fEcbHVoI3Seu7NAkzmlPW3kx4ArXyQ1wY2c= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR0701MB3675; 7:x1XI1wmX+xFgzcYARi6UMHGA8BMml40c4NCNbUsEzHhFhfteEqHQBtFGUvnSKb1z350YC6ufPQT5qVReDUSp296Ua7wQzpDavsR+e3mRuzd+MUYbFQzj7Tph41R5Q8wEbI0vj6p+2Mu8sqo+yN55nRldyo5iEO7mmCrMbpjAOyQVurPE3d7IADsrwxAyHNmMW7aQjFJRlXa+kqlw0ww/woTceDHn2XDsZ638qLufUqsM8FWO5AnwtVVq1dWRW4T7 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2018 04:49:06.0904 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2e01eef6-c7e6-4369-bcaa-08d59dd5399e X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR0701MB3675 Subject: [dpdk-dev] [PATCH v2 08/14] net/qede/base: add MFW support for driver load timeout 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 SPQ timeout base driver parameter support management FW timeout values other than default and none. Have fallback mechanism for old MFWs. Reduce the default timeout to 1 sec. Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_dev.c | 66 +++++++++++++++++++++++++++------ drivers/net/qede/base/ecore_dev_api.h | 14 +++++++ drivers/net/qede/base/ecore_spq.c | 16 +++++++- drivers/net/qede/base/ecore_spq.h | 13 +++++++ drivers/net/qede/base/mcp_public.h | 2 + 5 files changed, 97 insertions(+), 14 deletions(-) diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c index a3269f4..1b01bba 100644 --- a/drivers/net/qede/base/ecore_dev.c +++ b/drivers/net/qede/base/ecore_dev.c @@ -2289,14 +2289,15 @@ static void ecore_reset_mb_shadow(struct ecore_hwfn *p_hwfn, } static void ecore_pglueb_clear_err(struct ecore_hwfn *p_hwfn, - struct ecore_ptt *p_ptt) + struct ecore_ptt *p_ptt) { ecore_wr(p_hwfn, p_ptt, PGLUE_B_REG_WAS_ERROR_PF_31_0_CLR, 1 << p_hwfn->abs_pf_id); } -static void -ecore_fill_load_req_params(struct ecore_load_req_params *p_load_req, +static enum _ecore_status_t +ecore_fill_load_req_params(struct ecore_hwfn *p_hwfn, + 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 @@ -2308,15 +2309,51 @@ static void ecore_pglueb_clear_err(struct ecore_hwfn *p_hwfn, 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; + if (p_drv_load == OSAL_NULL) + goto out; + + p_load_req->drv_role = p_drv_load->is_crash_kernel ? + ECORE_DRV_ROLE_KDUMP : + ECORE_DRV_ROLE_OS; + p_load_req->avoid_eng_reset = p_drv_load->avoid_eng_reset; + p_load_req->override_force_load = p_drv_load->override_force_load; + + /* Old MFW versions don't support timeout values other than default and + * none, so these values are replaced according to the fall-back action. + */ + + if (p_drv_load->mfw_timeout_val == ECORE_LOAD_REQ_LOCK_TO_DEFAULT || + p_drv_load->mfw_timeout_val == ECORE_LOAD_REQ_LOCK_TO_NONE || + (p_hwfn->mcp_info->capabilities & + FW_MB_PARAM_FEATURE_SUPPORT_DRV_LOAD_TO)) { 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; + goto out; } + + switch (p_drv_load->mfw_timeout_fallback) { + case ECORE_TO_FALLBACK_TO_NONE: + p_load_req->timeout_val = ECORE_LOAD_REQ_LOCK_TO_NONE; + break; + case ECORE_TO_FALLBACK_TO_DEFAULT: + p_load_req->timeout_val = ECORE_LOAD_REQ_LOCK_TO_DEFAULT; + break; + case ECORE_TO_FALLBACK_FAIL_LOAD: + DP_NOTICE(p_hwfn, false, + "Received %d as a value for MFW timeout while the MFW supports only default [%d] or none [%d]. Abort.\n", + p_drv_load->mfw_timeout_val, + ECORE_LOAD_REQ_LOCK_TO_DEFAULT, + ECORE_LOAD_REQ_LOCK_TO_NONE); + return ECORE_ABORTED; + } + + DP_INFO(p_hwfn, + "Modified the MFW timeout value from %d to %s [%d] due to lack of MFW support\n", + p_drv_load->mfw_timeout_val, + (p_load_req->timeout_val == ECORE_LOAD_REQ_LOCK_TO_DEFAULT) ? + "default" : "none", + p_load_req->timeout_val); +out: + return ECORE_SUCCESS; } enum _ecore_status_t ecore_vf_start(struct ecore_hwfn *p_hwfn, @@ -2372,8 +2409,13 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, if (rc != ECORE_SUCCESS) return rc; - ecore_fill_load_req_params(&load_req_params, - p_params->p_drv_load_params); + ecore_set_spq_block_timeout(p_hwfn, p_params->spq_timeout_ms); + + rc = ecore_fill_load_req_params(p_hwfn, &load_req_params, + p_params->p_drv_load_params); + if (rc != ECORE_SUCCESS) + return rc; + 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 98bcabe..1d3fc56 100644 --- a/drivers/net/qede/base/ecore_dev_api.h +++ b/drivers/net/qede/base/ecore_dev_api.h @@ -57,6 +57,12 @@ void ecore_init_dp(struct ecore_dev *p_dev, */ void ecore_resc_setup(struct ecore_dev *p_dev); +enum ecore_mfw_timeout_fallback { + ECORE_TO_FALLBACK_TO_NONE, + ECORE_TO_FALLBACK_TO_DEFAULT, + ECORE_TO_FALLBACK_FAIL_LOAD, +}; + enum ecore_override_force_load { ECORE_OVERRIDE_FORCE_LOAD_NONE, ECORE_OVERRIDE_FORCE_LOAD_ALWAYS, @@ -79,6 +85,11 @@ struct ecore_drv_load_params { #define ECORE_LOAD_REQ_LOCK_TO_DEFAULT 0 #define ECORE_LOAD_REQ_LOCK_TO_NONE 255 + /* Action to take in case the MFW doesn't support timeout values other + * than default and none. + */ + enum ecore_mfw_timeout_fallback mfw_timeout_fallback; + /* Avoid engine reset when first PF loads on it */ bool avoid_eng_reset; @@ -104,6 +115,9 @@ struct ecore_hw_init_params { /* Driver load parameters */ struct ecore_drv_load_params *p_drv_load_params; + + /* SPQ block timeout in msec */ + u32 spq_timeout_ms; }; /** diff --git a/drivers/net/qede/base/ecore_spq.c b/drivers/net/qede/base/ecore_spq.c index 70ffa8c..a213bb8 100644 --- a/drivers/net/qede/base/ecore_spq.c +++ b/drivers/net/qede/base/ecore_spq.c @@ -30,7 +30,7 @@ #define SPQ_BLOCK_DELAY_MAX_ITER (10) #define SPQ_BLOCK_DELAY_US (10) -#define SPQ_BLOCK_SLEEP_MAX_ITER (1000) +#define SPQ_BLOCK_SLEEP_MAX_ITER (200) #define SPQ_BLOCK_SLEEP_MS (5) /*************************************************************************** @@ -60,8 +60,12 @@ static enum _ecore_status_t __ecore_spq_block(struct ecore_hwfn *p_hwfn, u32 iter_cnt; comp_done = (struct ecore_spq_comp_done *)p_ent->comp_cb.cookie; - iter_cnt = sleep_between_iter ? SPQ_BLOCK_SLEEP_MAX_ITER + iter_cnt = sleep_between_iter ? p_hwfn->p_spq->block_sleep_max_iter : SPQ_BLOCK_DELAY_MAX_ITER; +#ifndef ASIC_ONLY + if (CHIP_REV_IS_EMUL(p_hwfn->p_dev) && sleep_between_iter) + iter_cnt *= 5; +#endif while (iter_cnt--) { OSAL_POLL_MODE_DPC(p_hwfn); @@ -138,6 +142,14 @@ static enum _ecore_status_t ecore_spq_block(struct ecore_hwfn *p_hwfn, return ECORE_BUSY; } +void ecore_set_spq_block_timeout(struct ecore_hwfn *p_hwfn, + u32 spq_timeout_ms) +{ + p_hwfn->p_spq->block_sleep_max_iter = spq_timeout_ms ? + spq_timeout_ms / SPQ_BLOCK_SLEEP_MS : + SPQ_BLOCK_SLEEP_MAX_ITER; +} + /*************************************************************************** * SPQ entries inner API ***************************************************************************/ diff --git a/drivers/net/qede/base/ecore_spq.h b/drivers/net/qede/base/ecore_spq.h index 526cff0..94ae9a6 100644 --- a/drivers/net/qede/base/ecore_spq.h +++ b/drivers/net/qede/base/ecore_spq.h @@ -116,6 +116,9 @@ struct ecore_spq { dma_addr_t p_phys; struct ecore_spq_entry *p_virt; + /* SPQ max sleep iterations used in __ecore_spq_block() */ + u32 block_sleep_max_iter; + /* Bitmap for handling out-of-order completions */ #define SPQ_RING_SIZE \ (CORE_SPQE_PAGE_SIZE_BYTES / sizeof(struct slow_path_element)) @@ -150,6 +153,16 @@ struct ecore_spq { struct ecore_hwfn; /** + * @brief ecore_set_spq_block_timeout - calculates the maximum sleep + * iterations used in __ecore_spq_block(); + * + * @param p_hwfn + * @param spq_timeout_ms + */ +void ecore_set_spq_block_timeout(struct ecore_hwfn *p_hwfn, + u32 spq_timeout_ms); + +/** * @brief ecore_spq_post - Posts a Slow hwfn request to FW, or lacking that * Pends it to the future list. * diff --git a/drivers/net/qede/base/mcp_public.h b/drivers/net/qede/base/mcp_public.h index 81ca663..d3666a7 100644 --- a/drivers/net/qede/base/mcp_public.h +++ b/drivers/net/qede/base/mcp_public.h @@ -1777,6 +1777,8 @@ struct public_drv_mb { #define FW_MB_PARAM_FEATURE_SUPPORT_SMARTLINQ 0x00000001 /* MFW supports EEE */ #define FW_MB_PARAM_FEATURE_SUPPORT_EEE 0x00000002 +/* MFW supports DRV_LOAD Timeout */ +#define FW_MB_PARAM_FEATURE_SUPPORT_DRV_LOAD_TO 0x00000004 /* MFW supports virtual link */ #define FW_MB_PARAM_FEATURE_SUPPORT_VLINK 0x00010000