From patchwork Tue Sep 19 01:30:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 28901 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 B4E281B24F; Tue, 19 Sep 2017 03:31:45 +0200 (CEST) Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0055.outbound.protection.outlook.com [104.47.37.55]) by dpdk.org (Postfix) with ESMTP id E28101B1B6 for ; Tue, 19 Sep 2017 03:31:26 +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=zlxLSQZeIbxBtc5hOVkxbn3BxD2YUEa8dF2Y+XBYTUU=; b=VYvJwz517x12xifPLvU5WZ2Qp2UMiO/GuV/sH+9YEMdJCPvyr2PrWgm2prrm3Zv/E0rzR/ZfT9tF4bn6nTuDsV+LuQnlhRmcoMtnUC/G7mW43Tqsr85ywHOMFotFDyFyATn18U5+SrVxre9J9GiCbIsBTBp7EgOpRz161xFCLQM= 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:23 +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:30:06 -0700 Message-Id: <1505784633-1171-27-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: 74027814-1aad-45ac-b19e-08d4fefe23b4 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:WNusAj8kvHMgYY1SMaH6ZuwFljCICFgAGO/ErY7nTEpJeDu7wZv3VXsMJ/iYYE5aCpGJ+JMeT+c8hv8utVmKxstrdsyEGx2AYVcbiUuuhW2TjwKxy1gP/4L+CBu41i0tPPGlusdF4IGIEdOUEJWCAWEjkc/H0VnCT+aNrsiGghtt+hcNUhXDnHpG37mpsuLa4F68FWxS4V4edyr0MRMLsOGSvRU5A9rQ+LujFmHyogw6wNXP9BxScHE7eluvuWFr; 25:WmKxRjt06qEuJ9lhOne6ozr7wSdGdx2d95DQfnOrntWOsBwUaDQAPTqy+rsk4LpFeX3EHeBykLeHyKhMzukxfS3UQZRzYstiZMzt18UmirExluPvCFVSIAXzkSocTzUsf6NLwVAMUDsNkXYpOgrAMbqiLm1le/kmBlOdJFEqsJMp0aYMA7UdEvfFKubQ+JI0DOhXOPK+q5VPiu6xuHjQ+J7A1wUF9RFgnnEToBrbH4RsrbGtyFAGnwbPshwH/vESQVNyKCMsCQP+klH2LQwWHdEe7Vaa3uAGDGdcFQCCT47r6KquHWfJRQHgYamBX+eryJ3Adw7gzEBtkZddSWySpQ==; 31:voN5rmXynLl9xdsUDtCBEkRfem0PbSYvmlP39pSc0Mc8pUPZxV6gPkpSoGw77pT5ootVV48NuLxX3Q6my6yT9of7nZimxEopmPtGE4f5tXL79IHUOSVPqVqjNWInp4kA8oLkdbgcnMthkmjGicmG5MpDukJUWCRqB7lHdA+01nJWCWh3Ui0+4evFbp8YKTAqIv711Jzh85TDW+T9RnzxU2YtJVSV3SzQz60hPQiOst4= X-MS-TrafficTypeDiagnostic: SN4PR0701MB3838: X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 20:1oVL7acDFH6bU8afYhJNQmmOOPbGyOGFw4T8yfKrW3XkzxUkaUDmkNcAM48nZIALX1d4jYMiIvaHCX94E26ekNPUnh1mY0hta02RZne3C5NoP/G/8gNqlhbYVogVDU4PytdTPqiFha8nzshDe3VzGKIoCjpcaog++X9Ahg1tqzvW9qK1F6Sln3Lhog0IcEwBaFoYlj6AojqpJVNLQF1oz/+GqNiFwMb/NwY75yoCUZ9ulmu/4TOKjI7kox9jtHxiAP3Wni4GCubZae715TSiU7f9nMnXTw4AfIgCi+KWq6BcHWUih82HihZ5Met/B+mE903xltayO1V/w+rGxzhuHQFCwr2QeMIs7j73kRQJBGsZVfvXftSFH9FM++bEMpYUVvliJ/LBA4UXD4vZKj5PHEmBM5URBxvALO0UE3Q5+8z3pK8raxxgjKlS8Fv7R79ASE6URk86GwchfDXSOlsc9D9YE/OzjE7e+usNNp4l/kLnwG/N+UZdrhKjrUJV+MxA; 4:5j16bPzjvXN5tu0bCZmwVIed1psGb+47Ez9Y/CeXwJTVRQmadEXO3s/ICgVKNcntUFA6wiWQltnJNa8JLg3bY7mgPs/tQXHgR6ZsBNhVDpH84t1RlxhW3C5LtDdoDIE46Bz7HG+/S3WUYoFgIy75+lWRa5Znbnqpz01FuqF8gRz/xAmPf4rjev2aeSsYSrWPm7IXTJl+4r7lj9CnX6ZsQaFA33UWAIayCs/srLP7wBmTgRaZPSjdQ3BbzdHPlSPn 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:eM7flZdu8o4Z2dKEPLFJwfBVvq3GgVUG8gwbD+x?= Blks7T4ejE+uiN2W/5uPWijlSqhzImexpkNECDwsdvzDG62ozbtLSTclr7R8375R6AHI9XP7kBtoCigmyV1gJNuwNiOcdFdTBGOBnius14vmojtP4hW1cyTDzzmF6qrEuYMsk11tsUgDEYZ6DhZ/yGuUx+n/IlkHMu9/NMmfYpl3FwRruMyJdUVCqPiyUOtXxTTOb6/Fwv7j87rXF9tn/z42ebMU+xrw51ecj4wiqlP2FqftDah/9tDIOilhXleDltpurO5uH/F6YmEyJOhK0EG0rx9o++LiMq/mF4g6rkbFkWYi7G9A++9O+Lp8HfVqvHA1ub4EjBl9zPdlvsxyrVX1YbMqfI7OLbHcQKgyLK6zZLKt+qeOmfebNbYBLbbhEzAM4z+HeAmlT4J7wwKqmi4wsELuA7M0fL6DBSXd/aQE8/HAlkv3XBuCNlikuAPO/9Ycb3BIYkWtlbNlbcWsxEDIC255PItD2eOV3bDw7xFnMyKbaDNi6YCq1C/blOMVRq9qRhWgx7IfALzSaAWYz5YNXREQF5kgpCsjPPw1tfNmBX5HV5r8hRX23zjTXnOzek1CYr8U8/EmOFHKOXr7hdXrGFHnmrl+yfoh2+j6AZavHx8r024jPLhZ0c2oGmv40KHyhutWLjmocVSNUY0L95gSCf6NoD4Fk0KyBQnJjIX5iT28r3zf/Ubf+3sGIpmWyt1b2/JHx0Bkllakq65uJGN9oTEUXb2C/VHorG2d6uegbOwDOLeir4S5aiJ5j7jdJ/91JAQooTALiaC1ot/XIKwWX6KSyGblUbE2w8f3Tucsjp7+jde2hmM38DWTNzxVAVoeidvQz94e5s7lPZDuNf7SGWd1YIRl/H4SrrfpD1ajd8iq5tTj5+kcjtJ5CSICSNIQuwpDe14JYYTFULqhX+6qVH4wSDL1mcKYigpH9dhB1TyDEa0xtmeVbfZUYAXBjCXZc817hOflUQJ1zGNwvDPQClZ4rIZ54Kb6ru95k0own4e7m8/Vx9etutHnMTD3VUYahGaPLPO9/qD2GmmSHCK/1ybYtFqP4iGbcfqGdwrJiI3uYqiEkE97kb109rEomDBQ= X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 6:oS+ZhEUw87ONuigQogxdvujf6m0M8ynjdBpKQ8GpNKW+jgiy/HNYYgwuXy3MfjnDFJ4cTiejdVmp9ZcAiJQfPd9S+aV3khaPLFRy7aMGvLki27xirPLTxFhQ0rGpYF+fnUc8mELtfTwmgEJI7mFbsirgb4QVzL8CFEWsRQrgma6ClxY8s8gBP/yRci8Z+b7QFCpHaszgpiMvg0Bm8zDl66DM+eML1bBAiXkBaf3A5BV8sgZPQimpUTC+A+XmuTPVQzBxrf9/wJ8JzJHmyZKAcfezQ8sZr/fvMxkJRPvvd6OYDHG5hb+IoTJYaGcEOpCXexlU6Sy/td0qW7J363OZCw==; 5:xQaNmt1Bn1OIUq1DVV60OIHU0XVHkQ1EV2dCx4wGtW/OR7eX9sYhBmXsxvIPvaZQxQQwAhCeMcVoXdYrDYFzO1987r/D3MhMOJDSHEhngH/1RvpdoXwnZcRDl+kb+7epOsq7kz6URKC5YP5zOpkNWA==; 24:SDozAU8+jodjEqem9clnOsGuFI1i/l4QEQwWbtv85CkR28efewLtlRzT9fN9gl2FLbBB4yhsYMtFbziAliXYOPe/wwoOV9KW+xWqlrU+0t8=; 7:xaBZoAttiEuYNWqI1N8jgD9EiQemTlGjXGLwsTkHQAOvo/qQvLwt6l/nn6adIDaA8AQCRcM8QQ32i/idxwRIo3z0IPcNuQSNIOPiT3UScsMs7Tbb1rDLmD8EB2dEga0O803Aabz8JgKcz9fFfGg0NaRbnK0ri52OQBOIpR72u4iurpQ6Rvr1lmmW8zDMwS3bgYSmty7BUHwAUFSPssChh6D2tDMuTgCWHM17Zmz5GCc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2017 01:31:23.7619 (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 26/53] net/qede/base: block mbox command to unresponsive MFW 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" Block sending of mailbox command to the management FW if it is not responsive. Use MCP_REG_CPU_STATE_SOFT_HALTED register to verify the MCP is actually halted after sending the halt command and before proceeding further. Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_mcp.c | 74 +++++++++++++++++++++++++++++++++---- drivers/net/qede/base/ecore_mcp.h | 3 ++ drivers/net/qede/base/reg_addr.h | 2 + 3 files changed, 71 insertions(+), 8 deletions(-) diff --git a/drivers/net/qede/base/ecore_mcp.c b/drivers/net/qede/base/ecore_mcp.c index 21eea49..f1010ee 100644 --- a/drivers/net/qede/base/ecore_mcp.c +++ b/drivers/net/qede/base/ecore_mcp.c @@ -304,6 +304,12 @@ enum _ecore_status_t ecore_mcp_reset(struct ecore_hwfn *p_hwfn, delay = EMUL_MCP_RESP_ITER_US; #endif + if (p_hwfn->mcp_info->b_block_cmd) { + DP_NOTICE(p_hwfn, false, + "The MFW is not responsive. Avoid sending MCP_RESET mailbox command.\n"); + return ECORE_ABORTED; + } + /* Ensure that only a single thread is accessing the mailbox */ OSAL_SPIN_LOCK(&p_hwfn->mcp_info->cmd_lock); @@ -431,6 +437,15 @@ static void __ecore_mcp_cmd_and_union(struct ecore_hwfn *p_hwfn, (p_mb_params->cmd | seq_num), p_mb_params->param); } +static void ecore_mcp_cmd_set_blocking(struct ecore_hwfn *p_hwfn, + bool block_cmd) +{ + p_hwfn->mcp_info->b_block_cmd = block_cmd; + + DP_INFO(p_hwfn, "%s sending of mailbox commands to the MFW\n", + block_cmd ? "Block" : "Unblock"); +} + static enum _ecore_status_t _ecore_mcp_cmd_and_union(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, struct ecore_mcp_mb_params *p_mb_params, @@ -513,6 +528,7 @@ static void __ecore_mcp_cmd_and_union(struct ecore_hwfn *p_hwfn, ecore_mcp_cmd_del_elem(p_hwfn, p_cmd_elem); OSAL_SPIN_UNLOCK(&p_hwfn->mcp_info->cmd_lock); + ecore_mcp_cmd_set_blocking(p_hwfn, true); ecore_hw_err_notify(p_hwfn, ECORE_HW_ERR_MFW_RESP_FAIL); return ECORE_AGAIN; } @@ -567,6 +583,13 @@ static void __ecore_mcp_cmd_and_union(struct ecore_hwfn *p_hwfn, return ECORE_INVAL; } + if (p_hwfn->mcp_info->b_block_cmd) { + DP_NOTICE(p_hwfn, false, + "The MFW is not responsive. Avoid sending mailbox command 0x%08x [param 0x%08x].\n", + p_mb_params->cmd, p_mb_params->param); + return ECORE_ABORTED; + } + return _ecore_mcp_cmd_and_union(p_hwfn, p_ptt, p_mb_params, max_retries, delay); } @@ -2354,33 +2377,68 @@ enum _ecore_status_t return rc; } +/* A maximal 100 msec waiting time for the MCP to halt */ +#define ECORE_MCP_HALT_SLEEP_MS 10 +#define ECORE_MCP_HALT_MAX_RETRIES 10 + enum _ecore_status_t ecore_mcp_halt(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt) { + u32 resp = 0, param = 0, cpu_state, cnt = 0; enum _ecore_status_t rc; - u32 resp = 0, param = 0; rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_MCP_HALT, 0, &resp, ¶m); - if (rc != ECORE_SUCCESS) + if (rc != ECORE_SUCCESS) { DP_ERR(p_hwfn, "MCP response failure, aborting\n"); + return rc; + } - return rc; + do { + OSAL_MSLEEP(ECORE_MCP_HALT_SLEEP_MS); + cpu_state = ecore_rd(p_hwfn, p_ptt, MCP_REG_CPU_STATE); + if (cpu_state & MCP_REG_CPU_STATE_SOFT_HALTED) + break; + } while (++cnt < ECORE_MCP_HALT_MAX_RETRIES); + + if (cnt == ECORE_MCP_HALT_MAX_RETRIES) { + DP_NOTICE(p_hwfn, false, + "Failed to halt the MCP [CPU_MODE = 0x%08x, CPU_STATE = 0x%08x]\n", + ecore_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE), cpu_state); + return ECORE_BUSY; + } + + ecore_mcp_cmd_set_blocking(p_hwfn, true); + + return ECORE_SUCCESS; } +#define ECORE_MCP_RESUME_SLEEP_MS 10 + enum _ecore_status_t ecore_mcp_resume(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt) { - u32 value, cpu_mode; + u32 cpu_mode, cpu_state; ecore_wr(p_hwfn, p_ptt, MCP_REG_CPU_STATE, 0xffffffff); - value = ecore_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE); - value &= ~MCP_REG_CPU_MODE_SOFT_HALT; - ecore_wr(p_hwfn, p_ptt, MCP_REG_CPU_MODE, value); cpu_mode = ecore_rd(p_hwfn, p_ptt, MCP_REG_CPU_MODE); + cpu_mode &= ~MCP_REG_CPU_MODE_SOFT_HALT; + ecore_wr(p_hwfn, p_ptt, MCP_REG_CPU_MODE, cpu_mode); + + OSAL_MSLEEP(ECORE_MCP_RESUME_SLEEP_MS); + cpu_state = ecore_rd(p_hwfn, p_ptt, MCP_REG_CPU_STATE); + + if (cpu_state & MCP_REG_CPU_STATE_SOFT_HALTED) { + DP_NOTICE(p_hwfn, false, + "Failed to resume the MCP [CPU_MODE = 0x%08x, CPU_STATE = 0x%08x]\n", + cpu_mode, cpu_state); + return ECORE_BUSY; + } - return (cpu_mode & MCP_REG_CPU_MODE_SOFT_HALT) ? -1 : 0; + ecore_mcp_cmd_set_blocking(p_hwfn, false); + + return ECORE_SUCCESS; } enum _ecore_status_t diff --git a/drivers/net/qede/base/ecore_mcp.h b/drivers/net/qede/base/ecore_mcp.h index df80e11..f69b425 100644 --- a/drivers/net/qede/base/ecore_mcp.h +++ b/drivers/net/qede/base/ecore_mcp.h @@ -40,6 +40,9 @@ struct ecore_mcp_info { */ osal_spinlock_t cmd_lock; + /* Flag to indicate whether sending a MFW mailbox command is blocked */ + bool b_block_cmd; + /* Spinlock used for syncing SW link-changes and link-changes * originating from attention context. */ diff --git a/drivers/net/qede/base/reg_addr.h b/drivers/net/qede/base/reg_addr.h index 9048581..299efbc 100644 --- a/drivers/net/qede/base/reg_addr.h +++ b/drivers/net/qede/base/reg_addr.h @@ -1218,3 +1218,5 @@ #define DORQ_REG_DB_DROP_DETAILS_REL 0x100a28UL #define DORQ_REG_INT_STS_WR 0x100188UL #define DORQ_REG_DB_DROP_DETAILS_REASON 0x100a20UL +#define MCP_REG_CPU_PROGRAM_COUNTER 0xe0501cUL + #define MCP_REG_CPU_STATE_SOFT_HALTED (0x1 << 10)