From patchwork Tue Sep 19 01:29:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 28889 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 36EFB1B1EF; Tue, 19 Sep 2017 03:31:33 +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 8A81E1AEEB for ; Tue, 19 Sep 2017 03:31:19 +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=so7iZYevLc297S5tSMBPfwVvlo3JtV4NQEEVdFtQE8Q=; b=NTp73m1odFJXFqcveowjZTaa0DhVYw8l8xMRUGK/xlaRM9EMYMbJUNojGI6iEEzFrp4SnsNdDBVfyC3MVKC97cCvGtDCTNc7VfCqULWN/T/nxCW9OuDP3CSOfgV12n80GSqmqYJI38Od0E4TcbJR3n+tRI6Y7lOBSVOop+oFRao= 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:16 +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:54 -0700 Message-Id: <1505784633-1171-15-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: 2e45c39e-991a-4bfd-e182-08d4fefe1f58 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:vRCOMJbMPJKqSCwCaBjHzvYMWzH9ovkcEkRM4t61LGGcwSdFJSZ3gVXbRKgmEndoL55+HSsXvddMvLPAsEz2NLVQlzwPuxPThyOO3QtIcgwlAc9OydpmU4sSs3XiggGB9scL5MskR+WBMUUcudvmLv6fO0LWhKcuOcJ9uARvwx878sefia1IISWWIkB9ZJXJIu+MrtRo0gHeZM0XP/BicJvSzFCZss+qyBQfFnqgmAGCq4d934GyK2G2lfmzNUmt; 25:teFYBOgCLXWvGzGWMHIPzbdJhT9X0G5X9Xeq9k8PPrrDgMRg42H6T9v0K+a2n0/HPYVsBzX4cl/DkUoYBU229TzNmWJACRzBKgcRltD384AuQ82lnSI/b3iKSZF6qulPd9kzlJx2dBe2qbdNkXsrpSx8udmEKaRVQEwiytRkJ9lnfhFPQ7kkLpqLRrATLZCpUDDWnCH6dYQM5boYAGDVZAJ3dDxiuV7tTiFHM+LhqdSkUTIDp+JwiTq2ECWBzW1OIeRxxx2nFwCjcMyNL6JcOZnwRhsDbxKCQ50iNUo/7n/n5tYod67djgBzA4PXrsWEikZgdJExboyYgkV+I81Lfw==; 31:eJVsU0k1vyvZjTvl2X6Hs3cMgzoH23QaBTNYYWD18N0EWQvS1jY+0EV1+rzjgPoo9G41wHU29lr60CretTbwjzGMR6Cq8u1Bsm6gM07E+0/1t61TeR4ZtAWEM7wHGBJhsS3+J3hMXROx4vgMV7tOKtbgtyLxd+JerIXyMyTvSRzvHI61nRKvWZFpILHeixKMwghZBVfb30aLLu2VxxV4bIM7qpRH6QI1lSyYbasqExc= X-MS-TrafficTypeDiagnostic: SN4PR0701MB3838: X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 20:dzoLkBbpMwP+htEPjYbr59xCy7xjVgb8kIvZOhUcxnfwFae6bMwxsE7Z/GGzDXeEHCEfKEbqTraWMOd+TL4ILXjVeDHXiHz2vTcon4rESF4m95xdYHFVIycXhsGGzIjZbcHZPtvddvAT+wdaatssktrWUEpegBRd3BmNcuyj0dDqdG9HuVcGWbesV5omiHkXoOS9vz1KqVA991kzFH6BaguupLPRh57QO8+xDELC3DTlTBE7RHBPf3FCvdS6vuZq9/DAt2I/l9qMy4IyDAJcNPtzQazjhxuYGVMozLarzIGVfI3tpeSIViBPOKtHpttUmwulvknMVpPyCygerWxnWqt3E9/KNf+O2+LazQkJMSEfFjgbq0mkE9t6eyOxc1JbNFKG0/EB7xg12czsRyyI7ao+QuFwsDZvV5BaK/fS9UNhCbw2Fs1LCGH2dPTQ/mXgeBAQsU5jcQuelbcZAm+mV5d/OuKCH0v+cw7T9K7d6w2mWldqBcjK83/IiKpmGWJd; 4:qqDsYLMBv/Kznuv2sr/NkhoHUGgcybjoNjP/7jS3cWFjirvtbJ3KFYm/r5Ls7/Q5cYB+Pp3CZmDYWDO/oui/VPeT6Z+KxMTFTYu/RS8tWHHqxwVty64sY3ePaxedgMJXW3E/UZm9jPB5pFAbMoopWLgU9DLn8J/klqeoYzulfAKgJ4MEZ3dhTVF6VnR0lSJyGdazAtG0MDS9WPsJXd6CVNWiOV62w9vJeRvtHLSrUKkyrHOkTkTnmWY/ynb8AtOW 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)(575784001)(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:QN9rSt2quDwwdImwCdaqjWQDUGxvMuMSTGp9Mw3?= Y9UeFTLCQijZopreQLnT7++6d7lEBhPgidCtkEt4Kyp8rKAWh94tk8dccPR11mIZRTsQd1ZPQOa9d2fXeZOI0WfB4r/BmDKkh/vOitNxz8XtjDT/LtR9H1Tci4pijB7ePbnQ2l1DaAL2bTw09K0idLKibhUMv0YyU4XQOq0UDi/MSE4VpMjs+AVO0wOIycozdCxBnuJ2EeVkqP8+jebLyZ91/s27JKcoNOr6Kej6Aj6Vq/sm8FHALXTAJdhm8tbly8//nvasfGkEvUdPzRLjQ3Z61IChjacWtDwkLdBCRCTrk5M8t+aqEVoHlkH6iByb79WwTZjVC3epeOyhUnI0Oz6NmuQI8q7m5gMSmX/IzshyIt+zUS8X1D3vjVzfFVf0veThYNxORA3xmL93qk6WZAxmx0n0CCzxuFiVT1KTEduT8G7slrL7Va3qvr4MuXuHXpMjSe39aCAGmEaENHnUaiFuV02gPt2+OwUe35LyuoaZ5gkpAXzr/cWJCAG9lyKjplIvZtrkhZ+uQXVtoa/lxBGGSh3/bwgP13UyuBRwXmjCbAhV1eBN88tDOgj5ywxp9ks+gzMm67kpsXp8QcHAlfdpiQX9l05PFcTwL3vf0ZBeaFrFcFxAFo3Xl1qnzmTNFilGPhj6ACSJov9thyLbiRLCPgRQWst1dbaWkt0AfO3FsGBlLVsVjjhY9Cy7MFArbKxTYl0icZQgMgmiFkwEiBJr+UcSUQKLamZLthKmOgxHT2SZAo0VepzmnlM8zxEU8GxxMWOHrvv13mEeZiDg0XP8iRhGIoDQ0nJAPcwMZfWY/2XbOHPTdGJgYwVyOOonocD+yr9gRA7Twnma2PTR2eq0YU3VdbufROsY4BqRqn7Hh069VqnDX8lqG0sfkuXUdj5inx1z+4GiD4m94K4t6BrSxbtsW8AihKQb4Vcoo24GtKDWtaQ5l28/49HnMTmABsIky2CHwUu5tyTv5mf9aZ06uuAu50OjmZkwl6cLJHlSd6KoBnbvkQnyAwlNGIBr1FySy/mpblvnb7deSI9hfj1TxVAEUy8a5u4gEAXppuzcwSv6ceJ+Yb9pm7+68nirPrwZWPOaloQFp2xH8V6e/Pz2m X-Microsoft-Exchange-Diagnostics: 1; SN4PR0701MB3838; 6:4nXeykfM3LVdv9alTJsrCA9W5lGYAJKrMrT8ZUhuPtRvZQEHGAuhfERKOePyjGgw/kBaYmG1QiAqaM9PJEyKf6p0LgrlOnUdZ0FxLKpSHsxIxLXgszM26QraQWoToB80mEmEILR0fLbYDlMBnWwp4fGGbQRGv21uHKcuU0B7z+pXkYibf1IWeW+c/xvwO0DW9Pe0m00rQBV29qnTmqQ4LVg+LLWWDbpuMTlSDYOFTpAh5Y9jvlAbzMiddxLewvZwfoY+P//MOfRuPEw3Wi//rDC8nrVBQOkLb5Qfn0nFSuxltGDPH6OEpavfQg2y4aNJLjIb2SGH7UzwnoI+xKSSvQ==; 5:rHnOzGlbw0pTHxO02AquNq48DLSJwCP36219hTu4MCAQkr+dsyUntgU49uHiBzIHKQITJB8vdYNKPFqPWt+FZzGiEROlnmZ4u7uo3HfBPYNsO0GSHx7wbsrBCaY58OJa0d08uef5+b9EUHHy9eql8w==; 24:2nxGgfjxaxxI4xcOFw7W+r5kcHLUmimp+r7OfyadWj86igYWaytIAGP6xgS5GRMV+ps81KSa/t8k7lqcXMcbxa8EE8WBsZEZuPZizqxA/xQ=; 7:I8qJwmAr9JzneuEWfuTjxnJg7H5KCSL3EmmTYaiCU6j8EOpSjv2lUW6PkO7fJVXBi429+l471x/aOj8b+yITLeSYzDAVf2uZZFvgdhVGRbrkEz6Lsw8GtWaJSFVgBjUqZixuHS4LTzhnVv2Ugvshq6fh+jlHY+kBcqSff4YYRVdwTB3qNpTZlbIYaaWLnTYtzWodJkSmQvkH7wIKAfs6cFxFryAsOUdDLD0hwAR1gK0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2017 01:31:16.4336 (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 14/53] net/qede/base: add mdump sub-commands 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 support to retain/clear data for crash dump by introducing the mdump GET_RETAIN/CLR_RETAIN sub commands, new APIs ecore_mcp_mdump_get_retain() and ecore_mcp_mdump_clr_retain() - Avoid checking for mdump logs and data in case of an emulator - Fix "deadbeaf" returned value in case of pcie status command read fails (prevent false detection) Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_dev.c | 24 +++++++-- drivers/net/qede/base/ecore_mcp.c | 87 +++++++++++++++++++++++++++------ drivers/net/qede/base/ecore_mcp.h | 21 ++++++++ drivers/net/qede/base/ecore_mcp_api.h | 11 +++++ drivers/net/qede/base/mcp_public.h | 10 ++++ 5 files changed, 132 insertions(+), 21 deletions(-) diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c index 938834b..93c2306 100644 --- a/drivers/net/qede/base/ecore_dev.c +++ b/drivers/net/qede/base/ecore_dev.c @@ -3564,6 +3564,7 @@ void ecore_prepare_hibernate(struct ecore_dev *p_dev) void OSAL_IOMEM * p_doorbells, struct ecore_hw_prepare_params *p_params) { + struct ecore_mdump_retain_data mdump_retain; struct ecore_dev *p_dev = p_hwfn->p_dev; struct ecore_mdump_info mdump_info; enum _ecore_status_t rc = ECORE_SUCCESS; @@ -3631,24 +3632,37 @@ void ecore_prepare_hibernate(struct ecore_dev *p_dev) /* Sending a mailbox to the MFW should be after ecore_get_hw_info() is * called, since among others it sets the ports number in an engine. */ - if (p_params->initiate_pf_flr && p_hwfn == ECORE_LEADING_HWFN(p_dev) && + if (p_params->initiate_pf_flr && IS_LEAD_HWFN(p_hwfn) && !p_dev->recov_in_prog) { rc = ecore_mcp_initiate_pf_flr(p_hwfn, p_hwfn->p_main_ptt); if (rc != ECORE_SUCCESS) DP_NOTICE(p_hwfn, false, "Failed to initiate PF FLR\n"); } - /* Check if mdump logs are present and update the epoch value */ - if (p_hwfn == ECORE_LEADING_HWFN(p_hwfn->p_dev)) { + /* Check if mdump logs/data are present and update the epoch value */ + if (IS_LEAD_HWFN(p_hwfn)) { +#ifndef ASIC_ONLY + if (!CHIP_REV_IS_EMUL(p_dev)) { +#endif rc = ecore_mcp_mdump_get_info(p_hwfn, p_hwfn->p_main_ptt, &mdump_info); - if (rc == ECORE_SUCCESS && mdump_info.num_of_logs > 0) { + if (rc == ECORE_SUCCESS && mdump_info.num_of_logs) DP_NOTICE(p_hwfn, false, "* * * IMPORTANT - HW ERROR register dump captured by device * * *\n"); - } + + rc = ecore_mcp_mdump_get_retain(p_hwfn, p_hwfn->p_main_ptt, + &mdump_retain); + if (rc == ECORE_SUCCESS && mdump_retain.valid) + DP_NOTICE(p_hwfn, false, + "mdump retained data: epoch 0x%08x, pf 0x%x, status 0x%08x\n", + mdump_retain.epoch, mdump_retain.pf, + mdump_retain.status); ecore_mcp_mdump_set_values(p_hwfn, p_hwfn->p_main_ptt, p_params->epoch); +#ifndef ASIC_ONLY + } +#endif } /* Allocate the init RT array and initialize the init-ops engine */ diff --git a/drivers/net/qede/base/ecore_mcp.c b/drivers/net/qede/base/ecore_mcp.c index 868b075..462fcc9 100644 --- a/drivers/net/qede/base/ecore_mcp.c +++ b/drivers/net/qede/base/ecore_mcp.c @@ -1434,11 +1434,16 @@ struct ecore_mdump_cmd_params { return rc; p_mdump_cmd_params->mcp_resp = mb_params.mcp_resp; + if (p_mdump_cmd_params->mcp_resp == FW_MSG_CODE_MDUMP_INVALID_CMD) { - DP_NOTICE(p_hwfn, false, - "MFW claims that the mdump command is illegal [mdump_cmd 0x%x]\n", - p_mdump_cmd_params->cmd); - rc = ECORE_INVAL; + DP_INFO(p_hwfn, + "The mdump sub command is unsupported by the MFW [mdump_cmd 0x%x]\n", + p_mdump_cmd_params->cmd); + rc = ECORE_NOTIMPL; + } else if (p_mdump_cmd_params->mcp_resp == FW_MSG_CODE_UNSUPPORTED) { + DP_INFO(p_hwfn, + "The mdump command is not supported by the MFW\n"); + rc = ECORE_NOTIMPL; } return rc; @@ -1496,16 +1501,10 @@ enum _ecore_status_t ecore_mcp_mdump_trigger(struct ecore_hwfn *p_hwfn, if (rc != ECORE_SUCCESS) return rc; - if (mdump_cmd_params.mcp_resp == FW_MSG_CODE_UNSUPPORTED) { - DP_INFO(p_hwfn, - "The mdump command is not supported by the MFW\n"); - return ECORE_NOTIMPL; - } - if (mdump_cmd_params.mcp_resp != FW_MSG_CODE_OK) { - DP_NOTICE(p_hwfn, false, - "Failed to get the mdump configuration and logs info [mcp_resp 0x%x]\n", - mdump_cmd_params.mcp_resp); + DP_INFO(p_hwfn, + "Failed to get the mdump configuration and logs info [mcp_resp 0x%x]\n", + mdump_cmd_params.mcp_resp); rc = ECORE_UNKNOWN_ERROR; } @@ -1566,17 +1565,71 @@ enum _ecore_status_t ecore_mcp_mdump_clear_logs(struct ecore_hwfn *p_hwfn, return ecore_mcp_mdump_cmd(p_hwfn, p_ptt, &mdump_cmd_params); } +enum _ecore_status_t +ecore_mcp_mdump_get_retain(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, + struct ecore_mdump_retain_data *p_mdump_retain) +{ + struct ecore_mdump_cmd_params mdump_cmd_params; + struct mdump_retain_data_stc mfw_mdump_retain; + enum _ecore_status_t rc; + + OSAL_MEM_ZERO(&mdump_cmd_params, sizeof(mdump_cmd_params)); + mdump_cmd_params.cmd = DRV_MSG_CODE_MDUMP_GET_RETAIN; + mdump_cmd_params.p_data_dst = &mfw_mdump_retain; + mdump_cmd_params.data_dst_size = sizeof(mfw_mdump_retain); + + rc = ecore_mcp_mdump_cmd(p_hwfn, p_ptt, &mdump_cmd_params); + if (rc != ECORE_SUCCESS) + return rc; + + if (mdump_cmd_params.mcp_resp != FW_MSG_CODE_OK) { + DP_INFO(p_hwfn, + "Failed to get the mdump retained data [mcp_resp 0x%x]\n", + mdump_cmd_params.mcp_resp); + return ECORE_UNKNOWN_ERROR; + } + + p_mdump_retain->valid = mfw_mdump_retain.valid; + p_mdump_retain->epoch = mfw_mdump_retain.epoch; + p_mdump_retain->pf = mfw_mdump_retain.pf; + p_mdump_retain->status = mfw_mdump_retain.status; + + return ECORE_SUCCESS; +} + +enum _ecore_status_t ecore_mcp_mdump_clr_retain(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt) +{ + struct ecore_mdump_cmd_params mdump_cmd_params; + + OSAL_MEM_ZERO(&mdump_cmd_params, sizeof(mdump_cmd_params)); + mdump_cmd_params.cmd = DRV_MSG_CODE_MDUMP_CLR_RETAIN; + + return ecore_mcp_mdump_cmd(p_hwfn, p_ptt, &mdump_cmd_params); +} + static void ecore_mcp_handle_critical_error(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt) { + struct ecore_mdump_retain_data mdump_retain; + enum _ecore_status_t rc; + /* In CMT mode - no need for more than a single acknowledgment to the * MFW, and no more than a single notification to the upper driver. */ if (p_hwfn != ECORE_LEADING_HWFN(p_hwfn->p_dev)) return; - DP_NOTICE(p_hwfn, false, - "Received a critical error notification from the MFW!\n"); + rc = ecore_mcp_mdump_get_retain(p_hwfn, p_ptt, &mdump_retain); + if (rc == ECORE_SUCCESS && mdump_retain.valid) { + DP_NOTICE(p_hwfn, false, + "The MFW notified that a critical error occurred in the device [epoch 0x%08x, pf 0x%x, status 0x%08x]\n", + mdump_retain.epoch, mdump_retain.pf, + mdump_retain.status); + } else { + DP_NOTICE(p_hwfn, false, + "The MFW notified that a critical error occurred in the device\n"); + } if (p_hwfn->p_dev->allow_mdump) { DP_NOTICE(p_hwfn, false, @@ -1584,6 +1637,8 @@ static void ecore_mcp_handle_critical_error(struct ecore_hwfn *p_hwfn, return; } + DP_NOTICE(p_hwfn, false, + "Acknowledging the notification to not allow the MFW crash dump [driver debug data collection is preferable]\n"); ecore_mcp_mdump_ack(p_hwfn, p_ptt); ecore_hw_err_notify(p_hwfn, ECORE_HW_ERR_HW_ATTN); } @@ -2245,8 +2300,8 @@ enum _ecore_status_t ecore_mcp_mask_parities(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, u32 mask_parities) { - enum _ecore_status_t rc; u32 resp = 0, param = 0; + enum _ecore_status_t rc; rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_MASK_PARITIES, mask_parities, &resp, ¶m); diff --git a/drivers/net/qede/base/ecore_mcp.h b/drivers/net/qede/base/ecore_mcp.h index 9b6a9b4..b84f0d1 100644 --- a/drivers/net/qede/base/ecore_mcp.h +++ b/drivers/net/qede/base/ecore_mcp.h @@ -376,12 +376,33 @@ enum _ecore_status_t ecore_mcp_mdump_set_values(struct ecore_hwfn *p_hwfn, * * @param p_hwfn * @param p_ptt + * @param epoch * * @param return ECORE_SUCCESS upon success. */ enum _ecore_status_t ecore_mcp_mdump_trigger(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt); +struct ecore_mdump_retain_data { + u32 valid; + u32 epoch; + u32 pf; + u32 status; +}; + +/** + * @brief - Gets the mdump retained data from the MFW. + * + * @param p_hwfn + * @param p_ptt + * @param p_mdump_retain + * + * @param return ECORE_SUCCESS upon success. + */ +enum _ecore_status_t +ecore_mcp_mdump_get_retain(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, + struct ecore_mdump_retain_data *p_mdump_retain); + /** * @brief - Sets the MFW's max value for the given resource * diff --git a/drivers/net/qede/base/ecore_mcp_api.h b/drivers/net/qede/base/ecore_mcp_api.h index 86fa0cb..059b55e 100644 --- a/drivers/net/qede/base/ecore_mcp_api.h +++ b/drivers/net/qede/base/ecore_mcp_api.h @@ -1123,6 +1123,17 @@ enum _ecore_status_t ecore_mcp_mdump_clear_logs(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt); /** + * @brief - Clear the mdump retained data. + * + * @param p_hwfn + * @param p_ptt + * + * @param return ECORE_SUCCESS upon success. + */ +enum _ecore_status_t ecore_mcp_mdump_clr_retain(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt); + +/** * @brief - Processes the TLV request from MFW i.e., get the required TLV info * from the ecore client and send it to the MFW. * diff --git a/drivers/net/qede/base/mcp_public.h b/drivers/net/qede/base/mcp_public.h index 41711cc..f934c17 100644 --- a/drivers/net/qede/base/mcp_public.h +++ b/drivers/net/qede/base/mcp_public.h @@ -1108,6 +1108,13 @@ struct load_rsp_stc { #define LOAD_RSP_FLAGS0_DRV_EXISTS (0x1 << 0) }; +struct mdump_retain_data_stc { + u32 valid; + u32 epoch; + u32 pf; + u32 status; +}; + union drv_union_data { struct mcp_mac wol_mac; /* UNLOAD_DONE */ @@ -1138,6 +1145,7 @@ struct load_rsp_stc { struct load_req_stc load_req; struct load_rsp_stc load_rsp; + struct mdump_retain_data_stc mdump_retain; /* ... */ }; @@ -1350,6 +1358,8 @@ struct public_drv_mb { #define DRV_MSG_CODE_MDUMP_SET_ENABLE 0x05 /* Clear all logs */ #define DRV_MSG_CODE_MDUMP_CLEAR_LOGS 0x06 +#define DRV_MSG_CODE_MDUMP_GET_RETAIN 0x07 /* Get retained data */ +#define DRV_MSG_CODE_MDUMP_CLR_RETAIN 0x08 /* Clear retain data */ #define DRV_MSG_CODE_MEM_ECC_EVENTS 0x00260000 /* Param: None */ /* Param: [0:15] - gpio number */ #define DRV_MSG_CODE_GPIO_INFO 0x00270000