From patchwork Sun Apr 1 05:46:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 36824 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 236436D81; Sun, 1 Apr 2018 07:48:02 +0200 (CEST) Received: from NAM03-DM3-obe.outbound.protection.outlook.com (mail-dm3nam03on0041.outbound.protection.outlook.com [104.47.41.41]) by dpdk.org (Postfix) with ESMTP id E78565B12 for ; Sun, 1 Apr 2018 07:47:55 +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=Nout/Sfab3nhfqtgm+IKVd1aUuIHDRUEAFr4ogrR1Q0=; b=OVxKzQteIpiHKjfCDx6Fm0kbU/UaCXsrb7H9bVe924qr/AtXlBVdWiS1ag7RCtoHfNWhe5BzpT7Th0XZawjE0DRG2O4zsEfI69+0QgUXINrQBBq/c1jm7hC96cY3piZfUARba/PtJEnfnm0eUiYrIRMX9ssDevopluA1Aoa22y8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by DM5PR0701MB3670.namprd07.prod.outlook.com (2603:10b6:4:7e::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.631.10; Sun, 1 Apr 2018 05:47:54 +0000 From: Rasesh Mody To: dev@dpdk.org Cc: Rasesh Mody , ferruh.yigit@intel.com, Dept-EngDPDKDev@cavium.com Date: Sat, 31 Mar 2018 22:46:58 -0700 Message-Id: <1522561624-15817-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: BN6PR11CA0017.namprd11.prod.outlook.com (2603:10b6:405:2::27) To DM5PR0701MB3670.namprd07.prod.outlook.com (2603:10b6:4:7e::18) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 363ec09d-96aa-4831-ab78-08d597941d8c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:DM5PR0701MB3670; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 3:ytJGY2o4LFjRtkZKVymok3ZnFXMmZlqkWOyBKOY6RpfM4TfE5YpSXOgkLHyFJvGqzzooubxGI7X9kRYTzWJS8wxyBLhlqbBZtO8qWGh9+evRHZEEwbM+TLxhdDEZY/TSUoBy5exRFl5ifRBWwBMHt+NY8J6zTrI2nLP95SYfIgVJnVRbtplkXF+MZjPbRTeRkxZ56bm2IZ+j8PWOkGsj8AuH0qpiOjs3kWmmAanUXGWBHsGtHbpWNBx8favrYC21; 25:m58OoWaVjLNyU4czIDwl6KpyeEYClOmg6YSnV8pJrd0M/nvT2di+ERYZ6SWpqOPn2Sa7MZ9PSJPGNLwggbqa/bk0aUZRrp13Mz5PgFmWAaB4u6MfUVzcEJPYUvFWjlrLiLLnhpq/nB1qd/rvBROutDU/WTssRpdzSHGFnl87gAVGRee95bJxIn+tGOZquxD4I1kpBTvh0wjKCKYk/7s2nxE6hHjR966vnLXRxaeRpoIRu5FdfcCZf3N6iMuiNt/js8X0OlU9m59Y2MDaVbRNcFRH+4CGyMYdH+9lLFAgbeMT4bjDcUg63c2fUsIgeYReko6JHnNDwhUOIbuEbwQG2Q==; 31:87xtGObcppixExnq2QG1UbD1cirR7/O56WA4gnFh/E7FkipGbdnmS6aMru/rTo6tTWyDxLVKmfqMiVhKIChDlaCPgP7XpEsbx25YK8PZm3pk413Ka5jqNQ+Htd3GJRPjg4MtK44ZzU/g69hDMvZ869TF6ZSGt9o1T6XO6Q1apwonmkIMPorAJlUm5AmY+NufhpZcw5jP9vqtpf8EQgrnPGXtDZjgsAf41Ebx7ZPi1AU= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3670: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 20:4+ezxcU+uX0zlyMeP9m68L5e8AFoVOjvtBaFPcTlKTNZGpdT9CjMUEeqayXnd2FYEu43HRAC9mcWKkqnVDAlFz4dVoqD49j+W8x98YUZQALwJJTmOY1HWbb/O/LV194ytGStFGiH9kXUUEkeJU9w70lwwthnSYR7XhjkoZJi2x295g8AMIn+NELMwaSLX34vUuMM1TIuDlnF8nqm5U3OA6UXs1kE+y4Dtl85cEgulbO/Rk/MqFckT1hW0T3iwUBuwtQkhxcr9M82n37NyYxeFwROYh7PR4KkMEUvVo+hxw9R3qXDFfNsb/vS7wd9suhB9ZP2cxfhfEhrggZhbk0IASTPIWzpQDyc+ZfR6OQWA4U1Jox+MJCe4iISeaw24bVDSW0t0SuiIXtbsFIWq8nfQQaWp65rtuparWmeyC7QUlD0sxaoEqlek4tcP+mYnfC198+eCDxZuGdN327dzqMXsuVcnf2pT6YYkIHUaPyFt7EufbXiVexwpooZ4jV87mBe; 4:a7U/e6HrGv9zpdQw/GdMS5ihLN+jvFfpQIpV1dpG7Tqc9OwnmAMu7bIo5x5p+50KdIA5O/CD5y+aTsr/Rr9ZHyzBxtk5utoBVNoBOlEHufFb+/dvbdoaJDGdkx6RmYiaY9FEQ9kJeS8gQL4jI4axzIS1aLN919yz2nm1m0C1Z0Un5nacXspgN67JfWz/7u1+A1VtSAKupQtoP9XNRpfI8EB9PeYcWquPtERftsaElw+zcfPWXZNAehC4A7AHIipfs80QqUA6KJvC9oxllpe65A== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(10201501046)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:DM5PR0701MB3670; BCL:0; PCL:0; RULEID:; SRVR:DM5PR0701MB3670; X-Forefront-PRVS: 06290ECA9D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39850400004)(376002)(346002)(366004)(396003)(39380400002)(189003)(199004)(25786009)(16526019)(52116002)(81166006)(81156014)(76176011)(8676002)(7696005)(478600001)(72206003)(51416003)(305945005)(26005)(386003)(7736002)(186003)(2361001)(59450400001)(86362001)(47776003)(69596002)(2906002)(66066001)(4326008)(68736007)(2351001)(55016002)(97736004)(21086003)(50226002)(107886003)(4720700003)(36756003)(8936002)(16586007)(316002)(52396003)(6116002)(106356001)(11346002)(53936002)(105586002)(5660300001)(6916009)(3846002)(486005)(446003)(476003)(48376002)(50466002)(486005)(956004)(2616005); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3670; 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; DM5PR0701MB3670; 23:wKPXrZmRhnpPfIWb8qYXIDdMEALGy3PQoEHteMy?= 81oHW1OfZjAYQiXwjsKMIbMGExeHlM0NdOOTxPf5T2N9Pg0yRQA6e/qzBZIWbfMMgb2JpF2IU0gvmF2hVvqrZ7tajuzTWC+QKXtX1FJRk3UJxqs8czpjYR7VRxN4R0rHuKW7Lp8f/slq9loI1/iPRUM/y+T+Bbc0lF+hhF4DrUTux2ACKCYNrVRHqjw0c92+uZ1WaA5kFCPKmT8ykdVEVv7/rAnqx01iU4u60EUwxc9BfslClW+5hacXjA6kyHARgYvSdGNlELbhceE8CKDhRYKGq5NWrpWH68GcID+tiFo6bNDZRyLDQS7m6jEcSBw4U+gTvaaUsiz7a6lVGk7xA7uekI+3xfgFW+dNG5x/ugOP8OQoBwvQvgVmv6vRoLs2DZ7UL5uXctJSMzwAQNPySleXTh1KwpigsJeFWeCyQ/OyE+jnYPCyrNoPltNFNbqh6aPAr900TWvYSbyV6WqdWsaOnv2ae9GXAHr5mvVvkydPJYCLOb7NBggnjHtT5+n3AKLBkafZEyAAav7HU5SWjRf+Zy42cYWejtMOQ8qguNYtUtt7kD9udQTFgAqF4j4LpYOuko5OD8e9ymIs76gKhV1vNW3xrD1CDMl3gJMhCe+BtHS9SRbPY7QhyivQTvAvFQW8CfzPEL7g08KGFJb7a/2cvQwlXBpQN4XjVW5MAk6Cd+xKVOFCAWMCY6PdSg9sUx8VtLBQF0L+YMwLTRU6ZBNxEHc+0cHnPqmGq5LPps8xO1vppv4My9ApJk4ZwDRbBjInxFbj+Pu99o4Uyd3iLWAn0ER+U3zh4eAhrox+F2QWEtF0FV80FM8oWiMauuTCoydDYUu1uA04sqqFiTiJ3h/HQ2Ae0pTS5bPCrjbUCnJF9vGSZf98hWbyS77bMsWyd13xKsCe4NFE0RSnkFN6iGLpE9Q7I1/a0zpVAieBMyoiqR3aXFpj3waaBtROc4qFHJkHo1hIuI1Bw/pMRKrrDFaBRIn9tQT7A51FnmBGyRPQZRTz9Qe1ElfMwdgra5UHjutwSLJJm2dHs4o/VbbOr7Fjk7tcqlYS+eu1v/Z/WMvLOZonKwQ/QsrlMQAnjH50huFFD4xkTjxGMcLoDG5ha/JpZlTIdN6v+e1ONRfl+5TwYFFSb0rN+hA4SGWDZncn4RhcQ94Qpt8T1RjghU/+Y0S9ZumlxTBjXpz55AJhefEKuYXWf3HwxWq99CGVhS3+ghVYlGRPXcvIoSMsTWyPjTJS3KOXJJA3XSSROiF61wZT9579q9PAj6kgDfbGSGByP4EF+91K3xpKGHvDJxqahh06FEGvq0n2ZWiCwAALVr6o3TA== X-Microsoft-Antispam-Message-Info: 44JwvZWAGY9D6zueuMTeI6UP7Ekr6w3JV0jUR16zm5spi2GLhyMZtak0VtblYcWPhouKedT+5TJTnfojFCpWwfLLq0ReZ831loL9UpBgH6ZHpn2/uDDYeUWX2Y2lhIxlL3Cwlye6JYgblWHZedpxkjaMP6H0BxjZaXXlpvp+s58N0LNXrsBnuNsmlH4ByZBT X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 6:DfSZkUSaWLdkRMmxbaG+Sy/hpeVAhHRuwTcmqQstDfto8uI8Y7Oh9S9RWtjeaO3SyKJjk8uFUv3o2Xg7mZyXEDk8P6113ZZkr7aIYPgGfBZQSoVNVVgEcmUAvIVQmH4eyryS+OvWPEtAsKQhlJ+3Sc5n+vHGJBOBsTQMQHWkMdUHgxYPw/BCFwv3cpXGGrPBfXvj40kQMy7c5rTPI5MHzc3mwDuJufyDMv7H1N/tgjaAe+8hXfOAQ8aeBHJ+INT3WKQwKKjBxN7eMq7T/PfEZs1UUT2p6xaaGoIKmIbKO2YNUztaPQaYvpZUc0ylvtyKEnc2yhU9osSZ08e+wXSSpXN9nVajjjn3fxVgQrkSe1cmxD1KfcZOlGLCrvSx1bbcZRjJSAk/hJhjwvHDJNjYqAVHbL9KQhcWOv2pkkqp4JfXqrfHwpaybNb5cLv/O19KqICRaId4EURPVAPTbvqDUQ==; 5:2B0YMI8a8RNBBxOejxCRl+XZKiKOVp5igeHaBOHInBKY9ZNNvXOoysSIud7wVniT93ZG/pirfHcOd5MAs8YtD8/oGRdnXl0Nndl2ZptO8ON/wmoD3zPvdXhXk7imQPWHznXLo0yKeEe+fTyZorwNRKAernEKOIbn2IiaPxHyXRg=; 24:hGSVj7C9Q4Eshi56s08tifmPSc+w68dhxrvQZUEXObaJOPKutOCg1rh+ezWM+eDkr9NaqsBWt9VfRPvw4iEMKjmtFBYyV+SElI5+MwrsXBE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3670; 7:wZXF/hGj1lzBtu9+cd4h0aJ2h7JEt5mKeia9SsQW4MPDjAbpTyyKhoXMS976+rR4HG/hSsAuFJZReRue7caululEPXYLXfpfAtbDmaZ2oJnRAlZvxKMKCKA6pwufEBMNjUlkjDktk8Box/V8KBGRWGwVU8WjYZ16AmeFnjV68sYWe1druPWmy3SiZqZtVRjsO3pUdoFyRmxxSIeK+ojSYY6BpHvqvGvwUu4bYawvcPRKotNGzeYvAjaKr3bAXCIP X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2018 05:47:54.3099 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 363ec09d-96aa-4831-ab78-08d597941d8c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3670 Subject: [dpdk-dev] [PATCH 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 defult 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