From patchwork Mon Jul 24 10:10:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 27134 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 469E27CBB; Mon, 24 Jul 2017 12:10:28 +0200 (CEST) Received: from NAM01-BY2-obe.outbound.protection.outlook.com (mail-by2nam01on0047.outbound.protection.outlook.com [104.47.34.47]) by dpdk.org (Postfix) with ESMTP id 74B817CAC for ; Mon, 24 Jul 2017 12:10: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=robXkuQFr0pgBCTg1823IH8RqzlTi8ea5UjdZuYqJKY=; b=mCEe69pKfr8tEZGPjYRIsg2Q8N0OiLgbHoW8yOL0Mh+re1voYi5Q0vQQXAbVD52+4bJdrlxuvYNHY7KQdvC8+lAGHcWLw/UjNM9PlXkKn2hL2xWCDDmHc+XaWOtjaFMAZzBTFhRnlrNZwAZJQLvQc5JbWFCqdGOlm9k4QawPtVY= Received: from CO2PR07CA0061.namprd07.prod.outlook.com (10.174.192.29) by BY2PR07MB2438.namprd07.prod.outlook.com (10.166.115.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10; Mon, 24 Jul 2017 10:10:23 +0000 Received: from BY2FFO11FD014.protection.gbl (2a01:111:f400:7c0c::157) by CO2PR07CA0061.outlook.office365.com (2603:10b6:100::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10 via Frontend Transport; Mon, 24 Jul 2017 10:10:23 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; dpdk.org; dkim=none (message not signed) header.d=none; dpdk.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BY2FFO11FD014.mail.protection.outlook.com (10.1.14.76) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1240.9 via Frontend Transport; Mon, 24 Jul 2017 10:10:22 +0000 Received: from avsmtprelay01.qlc.com (10.1.112.194) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Mon, 24 Jul 2017 03:10:22 -0700 Received: from avluser05.qlc.com (avluser05.qlc.com [10.1.113.115]) by avsmtprelay01.qlc.com (Postfix) with ESMTP id 469F58BF705FD; Mon, 24 Jul 2017 03:10:22 -0700 (PDT) Received: (from rmody@localhost) by avluser05.qlc.com (8.14.4/8.14.4/Submit) id v6OAAMmc021669; Mon, 24 Jul 2017 03:10:22 -0700 X-Authentication-Warning: avluser05.qlc.com: rmody set sender to rasesh.mody@cavium.com using -f From: Rasesh Mody To: CC: Rasesh Mody , Date: Mon, 24 Jul 2017 03:10:09 -0700 Message-ID: <1500891015-21625-1-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(39840400002)(39400400002)(39850400002)(39450400003)(39410400002)(2980300002)(428002)(199003)(189002)(81166006)(6666003)(50466002)(4720700003)(69596002)(72206003)(54906002)(50226002)(5660300001)(6916009)(36756003)(87636003)(8936002)(2906002)(478600001)(4326008)(626005)(42186005)(48376002)(86362001)(8676002)(47776003)(106466001)(356003)(305945005)(101416001)(189998001)(105586002)(5003940100001)(107886003)(110136004)(81156014)(38730400002)(2351001)(33646002)(50986999)(217873001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR07MB2438; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD014; 1:nUydr2TZ73/E0oKxD/3jLYMOMR008x2v/obwLlZSjNLd9Zz7QIrKUXfJAkw56TBjKYur6wXKXV1/AIte1EROYr7BEKHtj6TdB27tjrc9C7pjXbJjBI+tKQ3/IEVDKLj2uR6BQh96iKoPMdM5thCF5QG/58+JmFTbzYZuLo+GQlEZP9WVtfys7dFHsFnDKZpIuwHWbjmFfeCwQYo3hiHQB7LeaucPHEZLeW6owaPg88cGhCcWl+uRXDKHKeVQcb85RJwrGwtprqDbF8mcY26+ur8XbA3Qb/XiHel3ex5r6Htk5MY3WmlnmLWlQof9MY1y1pbiFSC5Uh4944BmrSzcm+Cgr/jAVyHd2jCFqVFfGrxa8qJZBEiKmhtqbHTzgAjRypBzVfR2kdXwqYsUFZtS34E/EDdE/FI/SnPw0RgFV+4YTg2A3Qty3j+yhkXumkhIAOSCwuYIG4xRjeeR/KX5XOqlC/uoAmIUTmAWBQEqTWMOR0QA5VsUF/s1hsuoLJHxSHbwlQ+le1kBBZ5Jgm3/U+xvtdR/coNrsj2lbCyoR8p90MVCkeQBtgSwbX1yc19g/kr2IljPDNmkwWWijTHvZPMRUknojea6PcPRx8GU8ZRYMYNlVGH2dnWDmr4Wi7e0GdSrjcRpLXqq7jLiUup70zf77HD9x5wgdEbkRVcmfI8YSMig61j/QvHOopeM3neHjYV6YTorJny/THcy8ToIWcISZV1woCOULHnvu8jf4XnkeoFXViskuJ1hmWo+TCazFq1bCIVX+82ykfhZBGpCo3/425toVBKaJMK8QFY8L70pQ0ghL26nzx9EWPShs26A X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5bec86d6-e35e-4db4-46fe-08d4d27c3278 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254075)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:BY2PR07MB2438; X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 3:c7TDwytTKGRbHccHojkhyhrJev/6QMWBeP6f4b3Hmlh74+ix7WP92tOkmDiGV9FlOSu50ql9YR1DPzj89TwiSB6XbSIyuEcGSwG8VJzmOtTh4SfIL7jyzoEAtV5eGaUd4A6OeQ6FEpvCaNu5FA9+YAbWlwcIGqo/zxd5ubz/Xqe22aybtP0z5MG1hgW5RiKqCzOTt2mBqY7zVJQArx4v4swVNFGV2tclxLjQX5b/r+e2VrW7zsTvJUaMZeYNnEc2FRjsY6rT1sQxxahGZOS+gs+Tkgt66Me5oh/eX8klEVrf25HphimwBb5Qj1MdRzJZfmf092Giv9iozHHPF0xEci/HIrF82/KamsA3/ck+mPgN6dRx77OS0vWd/VV3KXkl9T1iV4PDrkFolBiDJGXIYtD/3zJOO2Tz8amEcCY0vx7vNUGSfIbVcG5zaoZGbIG9ef1vYLPM/Iv4Wh9jjvei9jAFVol2kOSUuOlMljbpRRfwwaTzOHneC0ZFKikxbCbOBCrRsUh+W1kyF1zCGOGxUiq+Rd4hZ/npY6ZTIFsdnlSwf45Zv7MyiwbS3x4jq2k2oTzz4oIrJ6uw1Xo+oQch9yGC6CJ/d64FRCdS5Z5pa5qMQ55k9Iea9/0iRsZJuwgJWA7Q42bASaJtcMbdz+llbmHtw2iRyt+psmHKuv8OMTf30hq+1ziA3KkNULCSluB8Q5H0uzc38xtKNtS6U3HUYDuMdpHpxhDQvj6geg+P2RUIAeEy9ENaSFNLk6ye45hTAMXOLJq2oJ+D+lmG+/yRmTdfzmDI8XtFKc6tMFudZEDQz++g69wTr2vipv6zpkXTQgF2fwGQU7YGyeQZtnWnmxELX1Bnxn7UCvXd534jdftHmESm3a7SnF/Al+6Z6/fKNgwERCPpgb1AkPZ0CnHuw7JSF3gvmqhNwD6I8rMA6qFb271Tc0oxIF38Ua+YW+9R X-MS-TrafficTypeDiagnostic: BY2PR07MB2438: X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 25:FYzQvQhfKASOTFkHDTWIRuC2plzblHOcXRkbZQop7N7A3H4PkQb/uxvbGXv52riYqXM7Maim32R3/cp6x22nf0qKMTZq5rbHghbov0CKp2fpLlFAIxAvYRPvmZhAdghLitmi7Vx1nntza5Ck07IXJ5VzTZE8O//cDYUDEqk4qQwbCQRiSGxdCNCsFFMzbCb0Q5JfjUkKWPbyXk7jF7sEa8WQS5rQy0T824LW7Sn2lCr2C5vv6lB4uZRnkhBpZF8+tNNmxUgulNuToBIGlOgIG4y00CaeCDL0yFGqz/IE/f/xNn3Nfklxf8MILq4y61Wspc/iz6mC9GU/k1YiDlXl1PgUkqPkw45qPn86bUIhddziAiH6xKx0g9QQsVxtZ6sKSv25MQZ+W1WFye334QrbgOFw/wdmLpYCTXm3RjbnWwFi3O0GdqiE81BDvrWy/Xunf8rCK9nm/pGVWe/1+0mmyQ1faO+nF7KiBP6QcptpC4rt3jKhkMSLTbpgQvjMsm/ZfeOapEIXGa3SaWGnsJ7ie8nAYtq0xo6rUudJscBseamEzvudbmKwgd+tV/FSvFFzs++8XgQcqm8cT1HKqXNpKlBT3avveVmto229GKgFQIlEAO68gBcl/vg3d0nUF5LUjm6/VJ7n2WyAKwHqiyMKuW+/cTh+8LA59XNc1+KXr+EkdLCwIKKZHmWHspUbV6mQXkRCICeBx8vKlp4i+d7Muo3IjdwXUpi9vTWU5d8TyWSY7ZPFfE58mg+o9rif87yrQJEY6Imxsg0PdSmdy3TWbKT+AiI8pCsrj2t4utYNtzrk9jOuFG2ptsHyYZAYsP3ST/198OEVSL3o49b5hNtOJPwf6rlty7ozuppiK8M0mUn4jxB7SbEaeh6c0lO9Oz9e7sMQmVZ2sN7WSgKyHAeVZJn+iR05bLgTVZeHUvmafyE= X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 31:Hj6RH8XO0cKDzhrAuR+ZEsAivG4c9qptG7VoWPjjTBqSf56vWUM4yVe3I+ECdyXPKWutcCgZWzXWgEF4ryKgEwvaSy/2CBL7wBb1GaTxb8DMZM8tuGOM2c5b4FOKavAdyLDIFL9LiolLZAwRXbGu7MmYjcKV24IyDlpAMLSAZjkvJWrM8PEjzy83TbgXdVZjE6tMGAktMVyunDwgCaqTIXAPEiQw3O/CH25zVB/pvUqYjp+d/E+tUIXb6Tu4zA7PhwHHeCYasvJmp+LvplAA/8TKclfMYrqAjZWuHeYAEGSjWQUdDdmAUDtY/aWG5Xvtx8R0/8wd9nHbiT0RnCL66ZxnItjI0P+d0dKLx5wngXxHO25IP6PmvEnABIIYa8VmQjw2Sk5Oca0ZzDM9yRjRMyACOMuMU1OTbJ5TNuO0ciyyo9Ro1cCoq8BWrrskBmAMZOiBh+WFOZtW1A7ThIGlrKGdySD1r7/G85I2iDvIG+6gvXJGJfVGt+uwavqp3JWsmOtM1uDfUbCQkF+lykFZx5AhSrIgXyPDIzzuiBLmKUJtNhqUBEzIVCQNOj2HqkykUhsvaAeqri4oaCoYVce7V1aO5sCMtyAI85eqS+gUjrhahC9P1GDYr2bTLLhZxvShB+KHW/cFHi6cJsB4jQPXFadaWy7ZWlivLI6ypNTXADCI+7L+RtNROdjDJbo9ISEBbOaKmwyGOFUJXWBO8qP48w== X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 20:HvhbgUPlFJFz5DItQ6xVqv6LvJj2pqjxsCj30k4e/mVmvWxsY5+jS7F/tN1NHwtTk/XBb2EBwcfPHfu76cyt1GPG2imSMynIZwAMyB4aTWlHjUmmI5kCAviyKbuTELNc26ynYuz11+oTLIbct5TXCLRG0CrS31ZcaMjQIAhJ8j3vymg/EofqkSPA7I754ly0qPTAzTp8WVEII49+9VoLhec55OefGTjmI3rI3EY/xq31UJ2EOmMLkpstukWlezv5gnS5rtxMqxDK3j7Q/bBFeL5Vca6APbh4SWHUm3YOvcCHgAKJ423B2zt8Vmf2w0Cm+i3OYXj8dBs3ctmOQzqhaV6UJE3C5uavNaFW0N7415t49DnEOT82SsjYQAdOZ4VH4FM+S7vuK8RJXPWGGxnNotXmeOduRK25jYe0KOmbMNeOAytqgNbiOP62ogjWv/daGGUU5FxLOT7vxvQ+qDONCScLuLXTnOPPbXoTLMwLpZx3AtttXVXjtrMltlHiUM+d X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(13016025)(5005006)(13018025)(8121501046)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(6041248)(20161123562025)(20161123558100)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:BY2PR07MB2438; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:BY2PR07MB2438; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR07MB2438; 4:4rons+1kB1bcvgnOXGo5bxK/wVkT3RP3t8vqsr+rXW?= JWDc3Ux6pqwpGariiuuxI1clcSeQk7pzTheqjnWBrNGPOX5sP786It2FKieY+DDKcrqf4lhvClrd7FXhy7TtGUqmU5Zr8MqBhmSlFHk54LfV49u8XHSPhALdBGa/BwqvAZrPFze7EzGS9oDKbFwAMWRXUIBnzapKL2R5KpnQ2ew4AMImMWj5NbZJdcGtfs/Zd70clVDgGDx3fshUWTjhho0/8uhLUanYQPDJaRNmYVjtvosYUYmavv5DGBBejLjA3eDdzx0UWTutufKXe0hhH+/K4Bqxu+f6xHVPzj6vogZZ4bW2jq0qIkTbxecX8D7iihrL8zkDYBr6fuUa5ZcsRDaUDlxuGhuyQM4gOG7cjejt42k2NMvTClrOi9EhOs8VJENBrmFylyF1tlx3UfqkrR9KcJ7UScnYAZcT4VHqbZH5Wt18KW3/qnhuCwrkrpKhr8gZAwx9lJM5Ry9UV5i7wA7tH8Zj/Fbw3XJ2OLzVJp+ltKCVkkNUiQf2ZvHZpOpVD7QfaPlpJtXDH/Uq7xNJsTpbxGWvrMbVnj3XqbAw3sRZA19u1uyKIl6mUuwziC/1haVKvNokSjF01BvDC/WnyibyZ4mQm9eZgvQMXg32H/sGuW1tyjI4CwUthFK+m/q9HdL/kp4C7WJsILSV+WB/MJF87I0XEMhPSIWbz7M3bW9t8HL2eHMYSiTTIsWIdTsIiF2HUaOwjR37GmUn/FVXdZAxdOufTpRUNjIfLBfJp42qwSAZ6W73zvN+c+kBAR4JerL/zeH1FpXjhErasPLhcASTjDILTRcTz57vgU+eYs6v+1I9t753J3TfKJOTDiqwHFEwy29x/IL33zjIIOZ4mCzMaEWjCls3qAMl2izSLrmMEDt4TSfFBfAHzkiUlbey8CPpluj4fUijmKkFuS0/Y1VAsfezP4M7jcWQCxDxn7dNUFwbfkA+jIwq1wUIKiaYM8p4+YT6mhc8GDSztOANV3LqJvDfcgzML1craGDXdGbIK65Zt6JxLVftiyOFBMfZ1rr97fyBAbOnqvRccd21WZH/gUb3/wJFjwpO/SfnUKT7gd//96LXEP+6+jBGdNS1P8TcHLTmHa+4uBp4dHDOJMdV5rHUjYQhh8FtkYrAoEjmEiSbr5mfhrtJcQR0UUfwsaSSdmRNF9qTvD+P8gWltGMUPyil3a656ezfl34ujQ7Q== X-Forefront-PRVS: 0378F1E47A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR07MB2438; 23:dT3mgBeBKmWnz2mzpGr7bLiPLolvwVBvFWLLVR+DB?= gKi1Qix1E53Lncv7WZaAfEljdlDsHf097YFPvMoAm7MB84r8jgPRQ5X5FYp3yErKeisLYfwxby7HrwNfNc1jW8wgvFAQNwP/eB6Nml4EQztMN1BziCBMIvcPASphO15oMFxDRL4KLi5aLhEm56f+HBToPa1/oKYBL+LfBLyzd0WkPf2RzT86rde4zkd9B8Q9uNbnkhAQbzf39cO2oyGnQU4Z1/LAIxH5v02OXKkCjQ/NbcIHngkHOC0B0VRSbbUMgEVOAhHrZ5MOxl9EKe0NuGnsArW5ixmwY/bfP85uUAy0aQA/F6fYIQhSm8AH8miaKfAKthHoLFuSlsiI1s+a3DFrCwjB9fj/k4rOmHkQwvN16CNXYog1jLtyn9QM3/u1WhKYpJr3cf1/uxaplviDjPdXZDdBh6W26Tj4NaW7yc+qmzpTwO3CX46c983aLz/kyqmTsVm8IhqZb7vgon9IDt6SCAiZGDU669ZrV84S91fHjvMC2tA6d2nyj5EEPlnjyXpbj5DBhAtO/CJSPvgK6lYy8aSxOE2c8LZ0ahqpzIqXSwy2Rfslk0+NhYR2IetOpsJRcDxsWnEgPrIs+LY00B5bEXR3To/g4xMTPaGFLsdmvlpr1gj5uhkqZzpl854Vhj+ZdRSyEpvPKUMwp3IZRxZ+QGbH72zSv2ZSn356tL9L+lmURFwyPsvizENS8ve0nS2BS15Y6IQBMZ+vNjD6s1LeFBjYGME3xnT57ZuqLfbuiIqqfSGsqhh+5LjWHbpUGTXlV+CUKZNPDOzb8i4WnM1+OXNP15xR7eJBvC8UT4G4Z8gjwFx8COGFFheIA9EGI6DW7L96sqlkEyhNPQBDKBAeBeIs+nh+etpX/gyrZE+FaouZV9do2mBYtPf5yU3XODQgDccVQ+YSVS2qo9zuUY9IIN6kDwkS0U1xQglb8IQDNWuZAIW+GueF61TlrTm3/1zoWyaU6+frFQvBppO6PlCeCCpHk/2RfnDV2rkFCNZw2Fm7vybqpYYz8AjXlLEblRsb2CWGmz7gyU3c77uUo1EEn81kMSJsSBAfQK6C9q9HFr31o7l5oJm/vNBA24Lw4bYDG1/kE5iOFKyKd+aIi3BeVfjr0q3d/UEcvcVlOUQQQ== X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR07MB2438; 6:Bz/yOfMCYIjJx7enQe4CVrgunZZVXuGGzJAFn65IVt?= k0yD/5/dx8nfKhQj1DL+NbOqhDwTpp0syvzKrvIKqdLfK4sEuDuAawiu/loWLvsKEketE3pEIcWEbQ8lYFPuYj//qNjHDq/TDyTYKMGh5Al7LWEmR0b5XpDUnENQgH+Mg3tIUFaGIt4Yc318VaW4uCCmHMceJr/g9fmv0FRH4G08GxSmlTXB6Y1ynqxhAxv7EM63wayyofLPNvj9IWqNFFi+UmkSIvJPhVg/QiA7wucwIjTkI7CKCgmDmEkw0OO54CHi9KIBiT8+qxcUAlGHQ02X3XmQt8+ttSVb4fVk1Px979zFQtTntsTH+1jdrHpUe/OQ2NDPY59gCrC38z8ACoyPUVXmdsTIA2Nt1jDuEBbfPl/1qnI8lPvmOamj0xR0+Hj5RiLJ/4Tx0xKAnYRaZirQF7gM4PW5+xAyUxBUEkbPgh3ESJcVxU0IMUeLnNqHyYwnOBMq3UaxbTR6sWgcMviMkHxHmMpe+ySqwEz3woyGtsQ/XUfN4Osgl7B3SwfHrq5Ak+QVvnytlpKKzjpDL7tubhkUcTGXPiEfeclDfgyEGK18MJkHTIsqYrBfzP88OBQTTFw45xvydfIr8Ch+oMd6BSv4InSkeUvBy/Vbc7glT/i75z1L8OGQtP9wkRT+FaiU6Gu97iTVXMtLQl27NG8Fm12SUbx6g+E1fDMT15MszYY+UeYpW/kawoG+wg6mQiyQO4rtz66trcJqKDVzyguaYQweXO5zZQwRpi/VNOmrU9NiH1FTYwCD59W7niKUXTXV3lYf7smkGcFyGIhV4Ye+vcEUPQIpw5LDArGIILDLHHQMQfuxDt40Jpj4ofPt9UIiJ016qZ/mBU0nqu93SgG00yGMP7MI4WAhYOM79JaWtLBY/2XU5a71/GQ0BS7xx8Q/gWCIEDhNft1lrkuBqBKy3By4C0IFEhDd5SX1qTvGKybrYcr022ipfqZw4wf4o= X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 5:NeKgnlYbawVIocfUPrqoO5lAvYCOksIuC5cB4T10bB0rWA0n6nFU1rif+Noj8P4dFPcdiHIRYTpLMZIzM0ifu8dFERU/15YHe54TkMiisTyJjumPu6Lr2H1fE2U5VhV7NZE7UmZt6HJHwbkj6vjcOiuNCn34QiLuQxYdA293HPqH6S28lmokK0p3R/yY8J0hhoH8RkcVvOSuIMDlOEeReZm0sECBPxlRa+86j8zlWgoj/N2RSwCMiLS44jCjXwSbOztVD2Zawo+0v/tJ1HTuP24+x4XB0dFqHGl+rql/A2Jjde1IHkf9SQ5bYxakg47ROdqgcXzqSxUKazZ7yrSFoeEqwh/yTlRUTWpv006rcSUJJva7rFfRx6a9mg7pF9scNNzGnR6ib6wbheAPxK3AbBaZB61NCFYu4ljo7dxfZwXxX3zwWOdbFdmvveXLP9LdwlLOG4wAI63v1WfXYBDlCUTUh+f3EK/nlTYymr95mufcnlGCW3AElyXszvVFWRgC; 24:h5YRV8aVaHywhe8eqDMvWDk0rpCHBqIXS0CDHdiHUPzVdeb1Fi3UsxJ/j/cTuZ6GUVAdeFRKtCPTi6oUbUpCiCZ5CsWddsxIEU/X2i8DnuQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR07MB2438; 7:0MJF/9e1Jb9C1uhY6G/J25tYl36zQ/8aIggio2l1ik8kyJYh0Yiz/2Q9m2+vLH/HCTriFHCiOubckS/mUrgdnYaWa5To0/ie7G5YJm3QY9U3xxx1VMSDzj/r9R3k6LklcBLizxVkHa/omS2XX6963HWuYg0vYw9LMvdrcPQK9w821Fpc/zskZOwwzOeUGF+ClHKThOqF5Qwc7zvgmPZ2Hjuflbw2pdWhBpzb+IuAkO7iEpeGbo/RuCrFcnVAj9gis1NEt8n9rB7hWd1b/014UAWWx5RAlg2+Lb8P+pVJrkA0T3YRpQOH+8rxgd7ydEVB0SRaGE/uV9vgozpEmNBGmp5tvw28Vj5md2Sei8/fpEntztAgoakB1xqArxUtZny/7TiYcKzZ8+F34YuejIze7qe8V0yFfG3WPntfutH/C+MPmU/WPo7J6vWsvU8gB0ZaYM05EE7IJVUMY1I6UAfsYpVQr4zegFLNhkLpUaCbsSX2qCn3TKamkxu0pXRrUEbrRCU0tvy0+DZ6t89ltoqoo44SRfj9IsX7g+RrQC5vjSqRXEWfX8+Urf4jlN9SyBXxf4eu2zDeD4jfCBIb6wljLp0ZW0WBa2lW6spkBzd+f3MBU/nfudgTTFGoLeHeJywKRAIAJ950X0L6djKiQPG/pI0XbfMjJ1wgaFJyVNlZCBqpE2Mc4NfBLeb3pcAhVPET9YFNsag4SMF65Y9G5t1DdFQ/0IZjAPUXLRtgd6f1J94STATXMARgaV27aEsGWxvj4jH04t0ONU9xe9HnMAl56MJq6lzr7Kl1dQLqbkFZBKw= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2017 10:10:22.8419 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR07MB2438 Subject: [dpdk-dev] [INTERNAL REVIEW 1/7] net/qede/base: fix recovery from previous ungraceful exit 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" This patch modifies the recovery flow to allow ongoing PCIe transactions to be completed. To achieve this, the load sequence is changed such that the "final_cleanup" notification is sent while the FID_enable is cleared. This change ensures that the chip cleanup actions takes place from previous driver instance if needed. Fixes: ec94dbc57362 ("qede: add base driver") Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_dev.c | 121 +++++++++++++++------------ drivers/net/qede/base/ecore_dev_api.h | 12 +++ drivers/net/qede/base/ecore_int.c | 144 ++++++++++++++++----------------- drivers/net/qede/base/ecore_int.h | 3 + drivers/net/qede/base/ecore_mcp.c | 45 +++++++++++ drivers/net/qede/base/ecore_mcp.h | 11 +++ drivers/net/qede/base/ecore_mcp_api.h | 11 +++ 7 files changed, 224 insertions(+), 123 deletions(-) diff --git a/drivers/net/qede/base/ecore_dev.c b/drivers/net/qede/base/ecore_dev.c index 4cfa668..65b89b8 100644 --- a/drivers/net/qede/base/ecore_dev.c +++ b/drivers/net/qede/base/ecore_dev.c @@ -1080,7 +1080,7 @@ enum _ecore_status_t ecore_final_cleanup(struct ecore_hwfn *p_hwfn, } DP_VERBOSE(p_hwfn, ECORE_MSG_IOV, - "Sending final cleanup for PFVF[%d] [Command %08x\n]", + "Sending final cleanup for PFVF[%d] [Command %08x]\n", id, command); ecore_wr(p_hwfn, p_ptt, XSDM_REG_OPERATION_GEN, command); @@ -1776,13 +1776,6 @@ static enum _ecore_status_t ecore_hw_init_port(struct ecore_hwfn *p_hwfn, /* perform debug configuration when chip is out of reset */ OSAL_BEFORE_PF_START((void *)p_hwfn->p_dev, p_hwfn->my_id); - /* Cleanup chip from previous driver if such remains exist */ - rc = ecore_final_cleanup(p_hwfn, p_ptt, rel_pf_id, false); - if (rc != ECORE_SUCCESS) { - ecore_hw_err_notify(p_hwfn, ECORE_HW_ERR_RAMROD_FAIL); - return rc; - } - /* PF Init sequence */ rc = ecore_init_run(p_hwfn, p_ptt, PHASE_PF, rel_pf_id, hw_mode); if (rc) @@ -1866,17 +1859,17 @@ static enum _ecore_status_t ecore_hw_init_port(struct ecore_hwfn *p_hwfn, return rc; } -static enum _ecore_status_t -ecore_change_pci_hwfn(struct ecore_hwfn *p_hwfn, - struct ecore_ptt *p_ptt, u8 enable) +enum _ecore_status_t ecore_pglueb_set_pfid_enable(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + bool b_enable) { - u32 delay_idx = 0, val, set_val = enable ? 1 : 0; + u32 delay_idx = 0, val, set_val = b_enable ? 1 : 0; - /* Change PF in PXP */ + /* Configure the PF's internal FID_enable for master transactions */ ecore_wr(p_hwfn, p_ptt, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, set_val); - /* wait until value is set - try for 1 second every 50us */ + /* Wait until value is set - try for 1 second every 50us */ for (delay_idx = 0; delay_idx < 20000; delay_idx++) { val = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER); @@ -1918,14 +1911,21 @@ enum _ecore_status_t ecore_vf_start(struct ecore_hwfn *p_hwfn, return ECORE_SUCCESS; } +static void ecore_pglueb_clear_err(struct ecore_hwfn *p_hwfn, + 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); +} + enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, struct ecore_hw_init_params *p_params) { struct ecore_load_req_params load_req_params; - u32 load_code, param, drv_mb_param; + u32 load_code, resp, param, drv_mb_param; bool b_default_mtu = true; struct ecore_hwfn *p_hwfn; - enum _ecore_status_t rc = ECORE_SUCCESS, mfw_rc; + enum _ecore_status_t rc = ECORE_SUCCESS; int i; if ((p_params->int_mode == ECORE_INT_MODE_MSI) && @@ -1942,7 +1942,7 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, } for_each_hwfn(p_dev, i) { - struct ecore_hwfn *p_hwfn = &p_dev->hwfns[i]; + p_hwfn = &p_dev->hwfns[i]; /* If management didn't provide a default, set one of our own */ if (!p_hwfn->hw_info.mtu) { @@ -1955,11 +1955,6 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, continue; } - /* Enable DMAE in PXP */ - rc = ecore_change_pci_hwfn(p_hwfn, p_hwfn->p_main_ptt, true); - if (rc != ECORE_SUCCESS) - return rc; - rc = ecore_calc_hw_mode(p_hwfn); if (rc != ECORE_SUCCESS) return rc; @@ -2009,6 +2004,30 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, qm_lock_init = true; } + /* Clean up chip from previous driver if such remains exist. + * This is not needed when the PF is the first one on the + * engine, since afterwards we are going to init the FW. + */ + if (load_code != FW_MSG_CODE_DRV_LOAD_ENGINE) { + rc = ecore_final_cleanup(p_hwfn, p_hwfn->p_main_ptt, + p_hwfn->rel_pf_id, false); + if (rc != ECORE_SUCCESS) { + ecore_hw_err_notify(p_hwfn, + ECORE_HW_ERR_RAMROD_FAIL); + goto load_err; + } + } + + /* Log and clean previous pglue_b errors if such exist */ + ecore_pglueb_rbc_attn_handler(p_hwfn, p_hwfn->p_main_ptt); + ecore_pglueb_clear_err(p_hwfn, p_hwfn->p_main_ptt); + + /* Enable the PF's internal FID_enable in the PXP */ + rc = ecore_pglueb_set_pfid_enable(p_hwfn, p_hwfn->p_main_ptt, + true); + if (rc != ECORE_SUCCESS) + goto load_err; + switch (load_code) { case FW_MSG_CODE_DRV_LOAD_ENGINE: rc = ecore_hw_init_common(p_hwfn, p_hwfn->p_main_ptt, @@ -2037,35 +2056,28 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, break; } - if (rc != ECORE_SUCCESS) + if (rc != ECORE_SUCCESS) { DP_NOTICE(p_hwfn, true, "init phase failed for loadcode 0x%x (rc %d)\n", load_code, rc); + goto load_err; + } - /* ACK mfw regardless of success or failure of initialization */ - mfw_rc = ecore_mcp_cmd(p_hwfn, p_hwfn->p_main_ptt, - DRV_MSG_CODE_LOAD_DONE, - 0, &load_code, ¶m); + rc = ecore_mcp_load_done(p_hwfn, p_hwfn->p_main_ptt); if (rc != ECORE_SUCCESS) return rc; - if (mfw_rc != ECORE_SUCCESS) { - DP_NOTICE(p_hwfn, true, - "Failed sending a LOAD_DONE command\n"); - return mfw_rc; - } - /* send DCBX attention request command */ DP_VERBOSE(p_hwfn, ECORE_MSG_DCB, "sending phony dcbx set command to trigger DCBx attention handling\n"); - mfw_rc = ecore_mcp_cmd(p_hwfn, p_hwfn->p_main_ptt, - DRV_MSG_CODE_SET_DCBX, - 1 << DRV_MB_PARAM_DCBX_NOTIFY_SHIFT, - &load_code, ¶m); - if (mfw_rc != ECORE_SUCCESS) { + rc = ecore_mcp_cmd(p_hwfn, p_hwfn->p_main_ptt, + DRV_MSG_CODE_SET_DCBX, + 1 << DRV_MB_PARAM_DCBX_NOTIFY_SHIFT, &resp, + ¶m); + if (rc != ECORE_SUCCESS) { DP_NOTICE(p_hwfn, true, "Failed to send DCBX attention request\n"); - return mfw_rc; + return rc; } p_hwfn->hw_init_done = true; @@ -2076,7 +2088,7 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, drv_mb_param = STORM_FW_VERSION; rc = ecore_mcp_cmd(p_hwfn, p_hwfn->p_main_ptt, DRV_MSG_CODE_OV_UPDATE_STORM_FW_VER, - drv_mb_param, &load_code, ¶m); + drv_mb_param, &resp, ¶m); if (rc != ECORE_SUCCESS) DP_INFO(p_hwfn, "Failed to update firmware version\n"); @@ -2094,6 +2106,14 @@ enum _ecore_status_t ecore_hw_init(struct ecore_dev *p_dev, } return rc; + +load_err: + /* The MFW load lock should be released regardless of success or failure + * of initialization. + * TODO: replace this with an attempt to send cancel_load. + */ + ecore_mcp_load_done(p_hwfn, p_hwfn->p_main_ptt); + return rc; } #define ECORE_HW_STOP_RETRY_LIMIT (10) @@ -2261,18 +2281,20 @@ enum _ecore_status_t ecore_hw_stop(struct ecore_dev *p_dev) } } /* hwfn loop */ - if (IS_PF(p_dev)) { + if (IS_PF(p_dev) && !p_dev->recov_in_prog) { p_hwfn = ECORE_LEADING_HWFN(p_dev); p_ptt = ECORE_LEADING_HWFN(p_dev)->p_main_ptt; - /* Disable DMAE in PXP - in CMT, this should only be done for - * first hw-function, and only after all transactions have - * stopped for all active hw-functions. - */ - rc = ecore_change_pci_hwfn(p_hwfn, p_ptt, false); + /* Clear the PF's internal FID_enable in the PXP. + * In CMT this should only be done for first hw-function, and + * only after all transactions have stopped for all active + * hw-functions. + */ + rc = ecore_pglueb_set_pfid_enable(p_hwfn, p_hwfn->p_main_ptt, + false); if (rc != ECORE_SUCCESS) { DP_NOTICE(p_hwfn, true, - "ecore_change_pci_hwfn failed. rc = %d.\n", + "ecore_pglueb_set_pfid_enable() failed. rc = %d.\n", rc); rc2 = ECORE_UNKNOWN_ERROR; } @@ -2370,9 +2392,8 @@ static void ecore_hw_hwfn_prepare(struct ecore_hwfn *p_hwfn) PGLUE_B_REG_PGL_ADDR_94_F0_BB, 0); } - /* Clean Previous errors if such exist */ - ecore_wr(p_hwfn, p_hwfn->p_main_ptt, - PGLUE_B_REG_WAS_ERROR_PF_31_0_CLR, 1 << p_hwfn->abs_pf_id); + /* Clean previous pglue_b errors if such exist */ + ecore_pglueb_clear_err(p_hwfn, p_hwfn->p_main_ptt); /* enable internal target-read */ ecore_wr(p_hwfn, p_hwfn->p_main_ptt, diff --git a/drivers/net/qede/base/ecore_dev_api.h b/drivers/net/qede/base/ecore_dev_api.h index 886407b..eea22e0 100644 --- a/drivers/net/qede/base/ecore_dev_api.h +++ b/drivers/net/qede/base/ecore_dev_api.h @@ -584,4 +584,16 @@ enum _ecore_status_t ecore_set_queue_coalesce(struct ecore_hwfn *p_hwfn, u16 rx_coal, u16 tx_coal, void *p_handle); +/** + * @brief ecore_pglueb_set_pfid_enable - Enable or disable PCI BUS MASTER + * + * @param p_hwfn + * @param p_ptt + * @param b_enable - true/false + * + * @return enum _ecore_status_t + */ +enum _ecore_status_t ecore_pglueb_set_pfid_enable(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt, + bool b_enable); #endif diff --git a/drivers/net/qede/base/ecore_int.c b/drivers/net/qede/base/ecore_int.c index 2afca29..b57c510 100644 --- a/drivers/net/qede/base/ecore_int.c +++ b/drivers/net/qede/base/ecore_int.c @@ -284,122 +284,119 @@ static enum _ecore_status_t ecore_grc_attn_cb(struct ecore_hwfn *p_hwfn) #define ECORE_PGLUE_ATTENTION_ICPL_VALID (1 << 23) #define ECORE_PGLUE_ATTENTION_ZLR_VALID (1 << 25) #define ECORE_PGLUE_ATTENTION_ILT_VALID (1 << 23) -static enum _ecore_status_t ecore_pglub_rbc_attn_cb(struct ecore_hwfn *p_hwfn) + +enum _ecore_status_t ecore_pglueb_rbc_attn_handler(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt) { u32 tmp; - tmp = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, - PGLUE_B_REG_TX_ERR_WR_DETAILS2); + tmp = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_WR_DETAILS2); if (tmp & ECORE_PGLUE_ATTENTION_VALID) { u32 addr_lo, addr_hi, details; - addr_lo = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_lo = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_WR_ADD_31_0); - addr_hi = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_hi = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_WR_ADD_63_32); - details = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + details = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_WR_DETAILS); - DP_INFO(p_hwfn, - "Illegal write by chip to [%08x:%08x] blocked." - "Details: %08x [PFID %02x, VFID %02x, VF_VALID %02x]" - " Details2 %08x [Was_error %02x BME deassert %02x" - " FID_enable deassert %02x]\n", - addr_hi, addr_lo, details, - (u8)((details & - ECORE_PGLUE_ATTENTION_DETAILS_PFID_MASK) >> - ECORE_PGLUE_ATTENTION_DETAILS_PFID_SHIFT), - (u8)((details & - ECORE_PGLUE_ATTENTION_DETAILS_VFID_MASK) >> - ECORE_PGLUE_ATTENTION_DETAILS_VFID_SHIFT), - (u8)((details & ECORE_PGLUE_ATTENTION_DETAILS_VF_VALID) - ? 1 : 0), tmp, - (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_WAS_ERR) ? 1 - : 0), - (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_BME) ? 1 : - 0), - (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_FID_EN) ? 1 - : 0)); + DP_NOTICE(p_hwfn, false, + "Illegal write by chip to [%08x:%08x] blocked. Details: %08x [PFID %02x, VFID %02x, VF_VALID %02x] Details2 %08x [Was_error %02x BME deassert %02x FID_enable deassert %02x]\n", + addr_hi, addr_lo, details, + (u8)((details & + ECORE_PGLUE_ATTENTION_DETAILS_PFID_MASK) >> + ECORE_PGLUE_ATTENTION_DETAILS_PFID_SHIFT), + (u8)((details & + ECORE_PGLUE_ATTENTION_DETAILS_VFID_MASK) >> + ECORE_PGLUE_ATTENTION_DETAILS_VFID_SHIFT), + (u8)((details & + ECORE_PGLUE_ATTENTION_DETAILS_VF_VALID) ? 1 : 0), + tmp, + (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_WAS_ERR) ? + 1 : 0), + (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_BME) ? + 1 : 0), + (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_FID_EN) ? + 1 : 0)); } - tmp = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, - PGLUE_B_REG_TX_ERR_RD_DETAILS2); + tmp = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_RD_DETAILS2); if (tmp & ECORE_PGLUE_ATTENTION_RD_VALID) { u32 addr_lo, addr_hi, details; - addr_lo = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_lo = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_RD_ADD_31_0); - addr_hi = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_hi = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_RD_ADD_63_32); - details = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + details = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_RD_DETAILS); - DP_INFO(p_hwfn, - "Illegal read by chip from [%08x:%08x] blocked." - " Details: %08x [PFID %02x, VFID %02x, VF_VALID %02x]" - " Details2 %08x [Was_error %02x BME deassert %02x" - " FID_enable deassert %02x]\n", - addr_hi, addr_lo, details, - (u8)((details & - ECORE_PGLUE_ATTENTION_DETAILS_PFID_MASK) >> - ECORE_PGLUE_ATTENTION_DETAILS_PFID_SHIFT), - (u8)((details & - ECORE_PGLUE_ATTENTION_DETAILS_VFID_MASK) >> - ECORE_PGLUE_ATTENTION_DETAILS_VFID_SHIFT), - (u8)((details & ECORE_PGLUE_ATTENTION_DETAILS_VF_VALID) - ? 1 : 0), tmp, - (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_WAS_ERR) ? 1 - : 0), - (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_BME) ? 1 : - 0), - (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_FID_EN) ? 1 - : 0)); + DP_NOTICE(p_hwfn, false, + "Illegal read by chip from [%08x:%08x] blocked. Details: %08x [PFID %02x, VFID %02x, VF_VALID %02x] Details2 %08x [Was_error %02x BME deassert %02x FID_enable deassert %02x]\n", + addr_hi, addr_lo, details, + (u8)((details & + ECORE_PGLUE_ATTENTION_DETAILS_PFID_MASK) >> + ECORE_PGLUE_ATTENTION_DETAILS_PFID_SHIFT), + (u8)((details & + ECORE_PGLUE_ATTENTION_DETAILS_VFID_MASK) >> + ECORE_PGLUE_ATTENTION_DETAILS_VFID_SHIFT), + (u8)((details & + ECORE_PGLUE_ATTENTION_DETAILS_VF_VALID) ? 1 : 0), + tmp, + (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_WAS_ERR) ? + 1 : 0), + (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_BME) ? + 1 : 0), + (u8)((tmp & ECORE_PGLUE_ATTENTION_DETAILS2_FID_EN) ? + 1 : 0)); } - tmp = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, - PGLUE_B_REG_TX_ERR_WR_DETAILS_ICPL); + tmp = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_TX_ERR_WR_DETAILS_ICPL); if (tmp & ECORE_PGLUE_ATTENTION_ICPL_VALID) - DP_INFO(p_hwfn, "ICPL error - %08x\n", tmp); + DP_NOTICE(p_hwfn, false, "ICPL erorr - %08x\n", tmp); - tmp = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, - PGLUE_B_REG_MASTER_ZLR_ERR_DETAILS); + tmp = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_MASTER_ZLR_ERR_DETAILS); if (tmp & ECORE_PGLUE_ATTENTION_ZLR_VALID) { u32 addr_hi, addr_lo; - addr_lo = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_lo = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_MASTER_ZLR_ERR_ADD_31_0); - addr_hi = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_hi = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_MASTER_ZLR_ERR_ADD_63_32); - DP_INFO(p_hwfn, "ICPL error - %08x [Address %08x:%08x]\n", - tmp, addr_hi, addr_lo); + DP_NOTICE(p_hwfn, false, + "ICPL erorr - %08x [Address %08x:%08x]\n", + tmp, addr_hi, addr_lo); } - tmp = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, - PGLUE_B_REG_VF_ILT_ERR_DETAILS2); + tmp = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_VF_ILT_ERR_DETAILS2); if (tmp & ECORE_PGLUE_ATTENTION_ILT_VALID) { u32 addr_hi, addr_lo, details; - addr_lo = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_lo = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_VF_ILT_ERR_ADD_31_0); - addr_hi = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + addr_hi = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_VF_ILT_ERR_ADD_63_32); - details = ecore_rd(p_hwfn, p_hwfn->p_dpc_ptt, + details = ecore_rd(p_hwfn, p_ptt, PGLUE_B_REG_VF_ILT_ERR_DETAILS); - DP_INFO(p_hwfn, - "ILT error - Details %08x Details2 %08x" - " [Address %08x:%08x]\n", - details, tmp, addr_hi, addr_lo); + DP_NOTICE(p_hwfn, false, + "ILT error - Details %08x Details2 %08x [Address %08x:%08x]\n", + details, tmp, addr_hi, addr_lo); } /* Clear the indications */ - ecore_wr(p_hwfn, p_hwfn->p_dpc_ptt, - PGLUE_B_REG_LATCHED_ERRORS_CLR, (1 << 2)); + ecore_wr(p_hwfn, p_ptt, PGLUE_B_REG_LATCHED_ERRORS_CLR, (1 << 2)); return ECORE_SUCCESS; } +static enum _ecore_status_t ecore_pglueb_rbc_attn_cb(struct ecore_hwfn *p_hwfn) +{ + return ecore_pglueb_rbc_attn_handler(p_hwfn, p_hwfn->p_dpc_ptt); +} + static enum _ecore_status_t ecore_fw_assertion(struct ecore_hwfn *p_hwfn) { DP_NOTICE(p_hwfn, false, "FW assertion!\n"); @@ -505,7 +502,7 @@ enum aeu_invert_reg_special_type { { /* After Invert 2 */ {"PGLUE config_space", ATTENTION_SINGLE, OSAL_NULL, MAX_BLOCK_ID}, {"PGLUE misc_flr", ATTENTION_SINGLE, OSAL_NULL, MAX_BLOCK_ID}, - {"PGLUE B RBC", ATTENTION_PAR_INT, ecore_pglub_rbc_attn_cb, + {"PGLUE B RBC", ATTENTION_PAR_INT, ecore_pglueb_rbc_attn_cb, BLOCK_PGLUE_B}, {"PGLUE misc_mctp", ATTENTION_SINGLE, OSAL_NULL, MAX_BLOCK_ID}, {"Flash event", ATTENTION_SINGLE, OSAL_NULL, MAX_BLOCK_ID}, @@ -827,8 +824,9 @@ static void ecore_int_attn_print(struct ecore_hwfn *p_hwfn, ATTN_TYPE_INTERRUPT, !b_fatal); } + /* @DPDK */ /* Reach assertion if attention is fatal */ - if (b_fatal) { + if (b_fatal || (strcmp(p_bit_name, "PGLUE B RBC") == 0)) { DP_NOTICE(p_hwfn, true, "`%s': Fatal attention\n", p_bit_name); diff --git a/drivers/net/qede/base/ecore_int.h b/drivers/net/qede/base/ecore_int.h index 0c8929e..067ed60 100644 --- a/drivers/net/qede/base/ecore_int.h +++ b/drivers/net/qede/base/ecore_int.h @@ -208,4 +208,7 @@ enum _ecore_status_t ecore_int_set_timer_res(struct ecore_hwfn *p_hwfn, #define ECORE_MAPPING_MEMORY_SIZE(dev) NUM_OF_SBS(dev) #endif +enum _ecore_status_t ecore_pglueb_rbc_attn_handler(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt); + #endif /* __ECORE_INT_H__ */ diff --git a/drivers/net/qede/base/ecore_mcp.c b/drivers/net/qede/base/ecore_mcp.c index 03cc901..88c5ceb 100644 --- a/drivers/net/qede/base/ecore_mcp.c +++ b/drivers/net/qede/base/ecore_mcp.c @@ -893,6 +893,30 @@ enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, return ECORE_SUCCESS; } +enum _ecore_status_t ecore_mcp_load_done(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt) +{ + u32 resp = 0, param = 0; + enum _ecore_status_t rc; + + rc = ecore_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_LOAD_DONE, 0, &resp, + ¶m); + if (rc != ECORE_SUCCESS) { + DP_NOTICE(p_hwfn, false, + "Failed to send a LOAD_DONE command, rc = %d\n", rc); + return rc; + } + +#define FW_MB_PARAM_LOAD_DONE_DID_EFUSE_ERROR (1 << 0) + + /* Check if there is a DID mismatch between nvm-cfg/efuse */ + if (param & FW_MB_PARAM_LOAD_DONE_DID_EFUSE_ERROR) + DP_NOTICE(p_hwfn, false, + "warning: device configuration is not supported on this board type. The device may not function as expected.\n"); + + return ECORE_SUCCESS; +} + enum _ecore_status_t ecore_mcp_unload_req(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt) { @@ -2893,6 +2917,27 @@ struct ecore_resc_alloc_out_params { u32 flags; }; +#define ECORE_RECOVERY_PROLOG_SLEEP_MS 100 + +enum _ecore_status_t ecore_recovery_prolog(struct ecore_dev *p_dev) +{ + struct ecore_hwfn *p_hwfn = ECORE_LEADING_HWFN(p_dev); + struct ecore_ptt *p_ptt = p_hwfn->p_main_ptt; + enum _ecore_status_t rc; + + /* Allow ongoing PCIe transactions to complete */ + OSAL_MSLEEP(ECORE_RECOVERY_PROLOG_SLEEP_MS); + + /* Clear the PF's internal FID_enable in the PXP */ + rc = ecore_pglueb_set_pfid_enable(p_hwfn, p_ptt, false); + if (rc != ECORE_SUCCESS) + DP_NOTICE(p_hwfn, false, + "ecore_pglueb_set_pfid_enable() failed. rc = %d.\n", + rc); + + return rc; +} + static enum _ecore_status_t ecore_mcp_resc_allocation_msg(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt, diff --git a/drivers/net/qede/base/ecore_mcp.h b/drivers/net/qede/base/ecore_mcp.h index 37d1835..77fb5a3 100644 --- a/drivers/net/qede/base/ecore_mcp.h +++ b/drivers/net/qede/base/ecore_mcp.h @@ -171,6 +171,17 @@ enum _ecore_status_t ecore_mcp_load_req(struct ecore_hwfn *p_hwfn, struct ecore_load_req_params *p_params); /** + * @brief Sends a LOAD_DONE message to the MFW + * + * @param p_hwfn + * @param p_ptt + * + * @return enum _ecore_status_t - ECORE_SUCCESS - Operation was successful. + */ +enum _ecore_status_t ecore_mcp_load_done(struct ecore_hwfn *p_hwfn, + struct ecore_ptt *p_ptt); + +/** * @brief Sends a UNLOAD_REQ message to the MFW * * @param p_hwfn diff --git a/drivers/net/qede/base/ecore_mcp_api.h b/drivers/net/qede/base/ecore_mcp_api.h index 190c135..abc190c 100644 --- a/drivers/net/qede/base/ecore_mcp_api.h +++ b/drivers/net/qede/base/ecore_mcp_api.h @@ -736,6 +736,17 @@ enum _ecore_status_t ecore_start_recovery_process(struct ecore_hwfn *p_hwfn, struct ecore_ptt *p_ptt); /** + * @brief A recovery handler must call this function as its first step. + * It is assumed that the handler is not run from an interrupt context. + * + * @param p_dev + * @param p_ptt + * + * @return enum _ecore_status_t + */ +enum _ecore_status_t ecore_recovery_prolog(struct ecore_dev *p_dev); + +/** * @brief Notify MFW about the change in base device properties * * @param p_hwfn