From patchwork Mon Jul 24 10:19:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 27141 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 [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 3C39A7CB5; Mon, 24 Jul 2017 12:19:43 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0054.outbound.protection.outlook.com [104.47.36.54]) by dpdk.org (Postfix) with ESMTP id 642E25905 for ; Mon, 24 Jul 2017 12:19:41 +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=JH0qxryl9sAw1LOnrAzfpu+kWLEPDOvO37I1MGKhzgkKd4EHvlJU5uf6ROdXWMFpf6v6z7qmjwork/Sw3W1n9SkT9PO/zTeft3435UeFzhcfnaZpX5nEzrMAH6GGCPCOuMRIAPOay0fL5tOnYCpCcnP6sj5FEjygt/wskP7eJDc= Received: from CY1PR07CA0005.namprd07.prod.outlook.com (10.166.202.15) by CO2PR07MB2502.namprd07.prod.outlook.com (10.166.200.148) 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:19:39 +0000 Received: from BY2FFO11FD007.protection.gbl (2a01:111:f400:7c0c::155) by CY1PR07CA0005.outlook.office365.com (2a01:111:e400:c60a::15) 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:19:39 +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 BY2FFO11FD007.mail.protection.outlook.com (10.1.14.128) 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:19:38 +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:19:38 -0700 Received: from avluser05.qlc.com (avluser05.qlc.com [10.1.113.115]) by avsmtprelay01.qlc.com (Postfix) with ESMTP id 1FBB08BF705FD; Mon, 24 Jul 2017 03:19:38 -0700 (PDT) Received: (from rmody@localhost) by avluser05.qlc.com (8.14.4/8.14.4/Submit) id v6OAJc0l021943; Mon, 24 Jul 2017 03:19:38 -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:19:02 -0700 Message-ID: <1500891548-21896-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)(39410400002)(39450400003)(39400400002)(39840400002)(39850400002)(2980300002)(428002)(199003)(189002)(81166006)(54906002)(42186005)(8676002)(107886003)(305945005)(356003)(4326008)(6916009)(626005)(38730400002)(101416001)(4720700003)(6666003)(50986999)(110136004)(8936002)(81156014)(69596002)(50226002)(47776003)(2906002)(5003940100001)(105586002)(189998001)(2351001)(478600001)(36756003)(48376002)(33646002)(106466001)(72206003)(86362001)(87636003)(50466002)(5660300001); DIR:OUT; SFP:1101; SCL:1; SRVR:CO2PR07MB2502; 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; BY2FFO11FD007; 1:uatkuXnqEPV/BDrJX9vEscKMi4CiCOOlBgRySU6jkCy348x+WFldUCdTH0wITgdarQRidss5xnaUBKf2ta9KZTTxH2eIlb4MeuBnnOuRWEcLPv8NYF895jaJW2etdi50KrtV55xTlBmipZeZ2ceO0PhNXxJFzxJsoFkp3Js2mS4Ah7vh1CdSL9FfuqIaLYPHyqAYxULLJ297VCHx8FWDjVyDq+hIqKALxg+rO0B0qTb36ZfBlaBsPUAcpqFJCpFtUVZ/KzjT4ltHz94BKscgbeECCBIesd3npfXcuBsEEukJrBV0U7IPsLJKua9G+PstUupGBqCKQ1xTAxI85LUH7etMNAY819AZCubGoymI+cz70oMMq/vCcWfbtlNYebTMwEq+brgs0A8IbWb/9kUuYoT4tQNBfKTVfdM1twVyUWdvKAEg/unmDivBckqYCW5nx2GVGllVF1ORMC/rE5mG5OrkJQFqKJ7vhKqb/Y1XAldCqMc4KtfHBVPMNf7mYKotdFLEcx2Yt8GpwQ16KAiKardRwXptlT1iMn0zBtX3VhaQIy8RDfo1D0JN2rb0hT2VDhJIWa1T4Z1F/ctNTe6X09k463S9IyTOQ2H3ViLgFSsxRmcLm3Rv1i4HgruESZixFOjP3Fk+3QoKXEzqhIgT29hhAwiK8RfMu1GRznKlkoYiZkSHP9G7+RRbrXiuG1BrFGZcotP8ZweJmQIIrviySfD+9hLlMAmnmoaNjWC1Hko4GM5+GSSgEupUakKE6BR7k+4ZKrP6b4dkhYBN+v+XhK2T/i14i2itrfn5Q7bQ1XcSFazKmAkaGabmxGVKGKDB X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c97a4764-440c-44b8-35a5-08d4d27d7da5 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:CO2PR07MB2502; X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2502; 3:PwLYou97aL6SzIn1+P1zkXMLL1JMe93k5QZhLiLVB+dB6rZCKu/7xhMniRlF8g7OVDpav9v3l25R6AcvuJ9qvEhW3QOudYWfpxmvJGJhUzyz/EMTHz8PKBILR8C975sD9DfR2QO9g/+hR9066xIYaKMJmcE10pjNTnhZKrIbDY2Zvp+/9yjucxiDJk9gdnHl5VVKtOeexAs6X+4++3HCn9Gv+GLbEiHhwhcdby2yWjlpI7vAu0HS6T9Isi+kMrjlHJqFWIadbNIUaGyO9CNeIoOIAfgphWgbzGkCpw0Gk3sbljL5f6AZZOvib463qVdyJuthlsz1hhlwdoIHSWcez2zvRrC2gCFU4HGFtDQ7rIAVPvyA24CK0auNfCQMLVLQViIYlJXdpxL0sFerFpmXZ3F/hdRmJwvPH2N+63cYUODYUd7jFyg9TW6gwa0Q7rzVzoYMGoKELw3I5Mf/6TXswZ5tDO+8NrAYrymggCaIvjuS7R/9aEaZ9SCIW2tbhzc3WGwU47K2o/hw3sr1ejgvD/Bd1Mk74xyCDI3toD33svTWs+/ZQofeyET9L8i0L6jVobNDwUZtFAiD45YkmKVy+jMpnDBzIQJKGdbjwCAI9kWip78k0mbp6fk1dE2neiaUPIZHRz6yMAtq76iYW0q1y5Dh21zYqnDY31AOe3YVL2RPHntBbB5BqdG4j6BLu/UablhQaeawbpuIQ6eQsRohTujiLqYAaLnJ35ZUpKDiAJ1VwLryYy3twuWuod2kQOoZv65eQVGnjtBQNIxqgZ0OBmLRuTgfOoiDrxcXNqvGqLktGozD0wYpIfKEE8BtJTVHn0faVeYMh7GFJ7ZoNH5mmka3zV/l45ox6+C767CQxF7zhVx5y8/R0p8bklgSs7YwxsJ+2hjHpF4H9VVgUbybqSiVs6JSEYq5gK2nGrmYfQWwhW8CwMo6LOv3sICLePMM X-MS-TrafficTypeDiagnostic: CO2PR07MB2502: X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2502; 25:2Gimszp6KL7JFpnMQdJ+TqZtceavqPtewkiREUURy3MQDWx9m+73+9mVO2C8xvwNLfc0whBZWUdRdl1L7jlkJSpTl+wB7KiIn+8kI4W6XlxW6XAtUs49p0SWXAKQNRKX0fEievnxdIh9xYgv26UbUjE+np1VkM5YB0qXkooXZEoltNHxOP/MWR1JcbU+r2SkcUD7tcFH5bt65nsiFXS7+UKgW4zg235ZXSeMBkThZjo01MQU0S3OCTrYbYMRI0loiFgYQuE+FSL5gojFuL0SYr1YADjT7d5nTtF51+szBP5AwhezzAe+xa31E07+S4L8eV6nSuebgfwqmj3O7ekwcMr3CaQcat9lW1IoUndbSWt9yFuwDbkGBQHIAMhvamxn7tlqeGVlO+vqwktbhH3Dh/gk3RIOUmzxPMIY2UDOQi7a1Jzo279SHr4mdsuuJ4eLJM3WvtiypZZZy431Tkqmltry1ttJFwOv+5CNWB+bs5jNwTgCKheVfEAB8yd4WvqEBmt08SQ85Bp7KRgqNFOOIyhWyeRkJrenjT9dIPgZDpGxpHUcIolaH2lUbpJjmEnuN8lPJQ1Ak936ajpLuxYbBgKDg8I48x8YJt5mOUcfwqlIHyKx6VywcdFzM9M8plwCamQSH6+Zn8DAnXbA5aTs3lCNaMsmA3r8rOV7CSTddxGLMqZiYZfxq9zsTT1YIDPgYlc8JDL0df3qygxvsmUnPACe4vEP2Qv5F8FdcqFnXZ1+3QTTr7GvjiVVgL5o+uay7J//D7ruIBtzUFKAK7384N79RFjWmsFOfmg7pTbZHgEDHXdZqscO4L7cHEmsfAcFtu/vjDYObezlD53DDKQKE4SRkrFTDD6egvmenO5EUAhAqnZQmDJuKDh5HyE6TwohrlBn/qlI6nkT31o10B94UoNcmtVAjKl7BcSsbBd28Is= X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2502; 31:PVF/yhV5IMEyDKe46QHwmMdcHjWIHdYM9eI8clHNoz+bj/2HfKggIgAvDSbMTqjacZutLvnxv5BB7s4qpfkI/IzEVwGDJyl3whPJIBeFX45EoYCf+B5CS7c/3h6O64ItLz67iUNhS2nzMSW3Dpfblj01HISh+Bgkpz9rAVLNOFDb+ZRuA8riytI7Hdqs+20W68ld+SHTZWGm3Vmpej+boe4l/y+Fi/BUSatcaK7DZqGyNJ8acbar2+J7DBs/KZgUwc+ylPXdu1NDCaXvZiZZs9iK1flNRQz9Gr/Tv8WTC49epjsvUjoQ86+MPY9nKBHUdJ4Hvsb3NJI5iVg6Xs4dRB+B+NtbyetCBPfCoVVVacrkr+gpkbfRFWi67efQcGswt+/cM4oOxhSqDzQ0s3bGh5tb1lRBOwMKix5KV7fUW78AhT8/2NtgpT2xXvYxl679O7xksCUd7ibYRH+ScehHbrkdfJNN87uLmY7PRCvmwDF2lFMEUVS46fvoTulZNFt+BPoYcDUHru4GFQmLg2Yu20yFnOGjI0iJdrdUPOQL3XW8PGPFWRtUX/zG3tIm2p94VBohYf5lbk9JvDu4N2kMoXmxS4vd5i9yziz6CG1W4I8O/zkqTnR2WI1OxDxm8VCmY0JblZZlvVfNfVlFT8SxAmUSSSua7qXYxUJmmNtXWyYfPK5JRkdPXOf4wsT+ImyR3LNQPXaxNnbt3GA9RkFt2Q== X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2502; 20:VUhgRN3Psz7x0nl66vjXIqBNfkZBA+KpsmwPhPqnc5v2k+Q5eBYmNhUCmj0UwnO9fcmHZOWYwhhUfiVuK9FJfT4o701+4HLAu6rpiC1SaC2f3LYxaE96ZL/ue3Sm0zo/svmfOEXr9qrwAIz9in5NsfXVGZmETvhCDtSL3WksX/49DIJUEIwtxj2x/SDlz/YUWtryoy8QNle4E2vdw44GGoHXKKFlXitQq2epHuhR48/PC3JQg+QsOpdcyLcvt+zUODFXweJOPbprgnvvr4zUzq6RFLI3O0EjHpRH9qyNalPF4XTfuUSAa7gSmvGtWAEoSsFdmjfZeR+2RWPXr1vKUjDjqUVu56jpQ4kFdKLKUXqyvFLrGc3D3K7F4RYWA/cgV3Znvca+X0kMUP5jj0M3Kt+NytT4P92VmcOvMyPbAjUiH0pSNIpGHflCAiK9NouTyPl2Z+1JbVCRqcNzPmjrOOW57YonW6Q4Zz0d5HI4OiarR/rwvYXaK5jE0VHYiWIf 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:CO2PR07MB2502; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CO2PR07MB2502; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO2PR07MB2502; 4:J3la8jBoih33V8z5unSpL12uN5ohyxs9IaMu2dwekX?= 3StWBvK/xti0xIIcwikjEvOPISbNse0cGQ5GldE5hD01YjIbOhxfVu47X4j0h36awub9wECjw0NKod78P86H05KqVacvveE8cNfltA+pkdSIAub3gos1cNhV3++fM7R7j4hVIvBbAgT2S4ZlWSQb1bhrXWLzhZEvX8TQ5lV8wrJfE62AAcYIq8nkcMeXeMEObOOt2fAg2OFaXrkrC00dX06ePqayowfT5Wqc5X3DTgmO93A1qqruxJehdue/jNfHzIS6p67SuYmzwIdNZ0qr0o6UjpeLGFZS510upL8ldsyUgtL8TWNxYG6bDqP4w+wK674VayfAMA+19bJ2nWwgcpfzUsYQ2X/Stqvhvdic0yOtm39+EHj8JzKn08zB1D0kr0Lz/Migli8V3QXmFsp2W+KwuDeCVnS5b1hhsRl2h4U5w9B6RBhcadgkITWHn3ABTQJGybPCSx1ZyCfDLwk3pqopQlVdJDcbV3fi5GYyFk5DCZhcrza29MTmH94msJLME2sfa5qGpk+CakLuOTM2ABleormF4byCxGukz4pD6PFZl/JxOJKX+pVRV3yWxkut7uf8RYkS5gQHLOzXb7EkLQboJU3gs24uBXDDIjEYRyIQgMRHGbWFFeOJD8myQbagWLp+RxmDPZagOWPFTSh6YVNMp+zcpaHc9NtcJAY24nuQoiB3cSF2mb3tncA5Z6lgWunJzkRrMIsTjQAyTyV7tcw1+nsyFJfseO4eqguwW6Q0Br5hd7OGAYPmxG4sl+JAvODlpK9fUOnogowjYnJMA8CtT04Ex/5jLJBWtN2t0qETyGaeKq/SA4boaG0rIPCUCglYR8KyQ5X95VBbLAfNqo9/knG30fvk5pbLamO+jEU/eUkDc52YqRsKHL0maCdemLiKbz02MaKmue0MQ5VSrZYNf+MbcO0WXWOAVgeC5ZpjxM9BpZ064Ni8nVwnB1Uw+MQNGNfZUznuXYj1T5KlMxQtw0bgXga+NXcD73oWNprkOGQOwI6M+pH1OTeAuvJb5XX+PfW7zwtoa08+N/PUSQnCeil9cMDS47NCX2JMMmEclJ2+qL3un9BmGhuJWREFYHD0VYFM5+H8/gRfrZzOk+6nkG+t6Mw5N/IjJm1h/C/0KXH1WgmK8el4NcykipO/n0WA9tw4WJ+FLpgWB+ljHqP176bZT2XCAT0uq1YkTSow== X-Forefront-PRVS: 0378F1E47A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO2PR07MB2502; 23:PUPXfoA1D5JYUaZVvH1nbK3Xh1lTl/ruocam4v8H4?= tJIuN9kGR9Q/SsQMd11u0PiSVtuUPK14kLyypX7q7WckSvgyE9CsNDTQBmlTO6wS4rQX31T0IxMg13dEPaqi1f2CwoE/fFT9TcbRgR0n4BzObfJb3wKeds+bmysGMzoGlSWus2+B7c0cjfx7AotQL6GST/x4Igzv1SZOnrHkT3OLQIK8aRo5qBTpA/DOSh9teuAIzXd7yd8S38z8o75wnucjoiHX3pHxhkHaSwGdl0c+S8cZ//zADcFotCXH9UMwlOaYiDbAxcPGHgxG67CZQZZbuzeHuPuKiXq+j3QNrG3WA0bFd1GOACDlk8wBgNTnPecLRTtrsxqGQ5jSnjR6OVfRf5yR/5mhpTCptPbOEyE+GBdkZOF/YKZ7jsIM5yWh+zIo+lfTPHOWWS3yIM2C01UWQIkzwxT0oKLSE4pwiMYOz0GTdnIVTBtYfWmuu98B6dPLLk+KMrQgX6S2pXi4nqyAiHmo4pWSMGLPCFzmWK8OVhVmeg1ZqHPme9mgJRW+m/H0HMArFSi9DBS9nASPS+7iZ9uRd6FzGqmyvf6pBUfkh/WU+OPyNoGAklYBJmnCjhQoYxvtSc1EV96Phms6TSnWqEwrRKKg4LUgl/Lt92nXsaEz8Sxudt6KYrbgoR0/2Ca+tLCcfBlTX2vQghMjsWqdrd/T7wbwIKRk4JVuO+Rb31c+BF7YKNR2ugGVNJ/N2AlXJ4okjz1zG9qemMywPlspIay/fSWq+AOB2GqsIL43/W5dHNJhrCIeHH1ZerGuGvOL2ZQnP9/ZBnDZVhgsVzN/9aUgVSBOXibVjYom9kPl0kBuREE7jmfWKtUSYXxvrXtC/d7WIPJNFF1DijRmZDUjRsIZVVI9M6vQMvq+WaSxjF9UAolqDYLPjFx+uWxTWklun2nFC4u+r7ZN31RyycHzBIPY2Ub/kP+4VIa0KFcUaQetbSrERdVd9SIFi+qSHLffW6h8PYJjEozySjnRnArL5Uu2mXibbALq6KvBPSbkq3ZsN1v9gelABrGNrRpYd+j1jnzd9zwY4pqRdwlCXyDCo4OwD/Fyw/hjo6ahwme6v86O0M2Nf8nUoXAxFDlI87931fYZrxS9uBVwPIphSHb X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO2PR07MB2502; 6:Eo4eQlQjcYT4Aw4AMJvs0zf8yvLSkY0LMmw4v0U/KA?= TLEnWjDrsO1crNyv2kJr+W3tirAunxDO/FhWdtyiW1Q5Q5f+upQhGn33GVUBJf2vysdVGqeGfeHW33Fp75VOuKBpkjVYjS+J2fE6k8SZUuTZb62y0itZfPbqdv4vF+IlIr/HPHX7JOH5Bhmfb2G9UxCYzJb2w+MwbDTXw1e2c2yXcRhKEM+hmrP4JBreSsuSuSUom5KLSFu1/N4WjvtQAImMm4aexZ8NCIPlOOJGxPDjEE2hSWKJqiJiUv8cy2pm7AX03pyglHjOdKtI2cXSkbOS2AHEFyh1xcw/ELxq5KItmi769+7+V1Qp5WPk6VuCaxgJOquq5VkED5a/2+tJ2KKz1BcOxHj41S+gAeiNqyOMHe9v/ZUC48/FrgrfKRB6hFW+Z0Qpr4niEXOVjbm6oo2YfF8pWPtau/FcNevFO+fGfdNey0NxVtIlVapZPBpWecnknE0hosI/n5Vl8gl4US+53Kpr6LztVoxAkSA6wl6JbSp+9uZEIZk+ObswGqBacxi4DL/lhb6j7Y52oDajpOFAGSJT4nRJQGSlGmHQoDy2dLhS1VkmAISYpRPekpCpggIlyHhnhMVKYFIXRpASlS/urajIWPS5411H9hyAxLGGXrtBJy2y0bCBVpxr3+N4W1lmUf90EpW1+IXnm4jSzkHxSF+ZVTbQYZ5PPlPkiPfO6PC0p83Mt2Gp98UvGVxMasBeQ1fGB5kkTLN3xLuhCpjpBi+NWVszHzwH9eAHVEDAPzB+o4wO0DfixPV6wQZx7ziSjF0cZqTQ4osT+ObhEH1Y5H8FoErQ/nRfYauv6y3CJiNKjsndxCiN2NNUBN1trIUJLV0zcdVcB286b0TxhCRh2u+IfDjqBeKE51qbEzDwIc+o4Bb4tM7X2VisdcGABmZFVFtN0byobK29++CB3VntCW13mf6Lmglp44gkPDuNi6KVupks9epUdZQK+wwzs= X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2502; 5:+IyGWkJ1/UlzU6P7sELo9XdPmkRoQCqIBpuesY44/BJrUA4vs8ytV4odbrdqIy5E5ruPZaS78vyKRsQdfUAiCvzb/29TIBUTLRMWCIoFz4AlppvWZAUxklKwSNt9L4sthqf91+CqfwNKXdjUiOJQ4kfcd9SL9mwXo3M9t8s9/luPZeCMb7aySo+HxbK5aUibB25IN9g0GDoG9XH1OAyu6SrUiRjtfJaqBBnLM/V/c9tYfy99Iz4Npvwv+JjuukG611Qt2f21CeRfozCHHz7ysgac5W7XA7Uk9dwCJQv1Y3E699/dCng5Jm0gkImwBDQESfE2A1hM0FiBkOusteSIRSutG4cN8M+1n91oPqNGX1gkjj/1Pt9BZp+U3Ylyjzi+l74shKBrk5beyaCF28DJxfxrmdyGvLmQ1JWux9t6WhFpWI+k5HhuTHD9ACXOkCWu6JNkG6cSMKfCzgrEWgg0MGUCJa6+xh3RjSI5Z4RVFWbtd93ihtUccbL0NXhke0is; 24:7NnbbfM8rPD8iSiI8eiSwK/+ehG3fg2Hkqmu4yABPZsFDNbMjFeo198BBpAaj2R+x10CszehMyVIs3q02ynEWV/5+Bw+yKH57Ky9c0dSyCQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO2PR07MB2502; 7:qTG+//CnnRI9q6SFxHXZd5LQRvgAshJIKN61lwSf9gQulAsrGi+rdtfMolSWqPTC7lTMw4pppS37YFM6LeryO2moEBQWhsCMHAj5H2NM2+jvBK/7c7HGIfZrS3hkLGmTAJh3jzS0vcUFiIhqt4BlGzZ18Fb+II1s0ARqsEWfiDkCmyMoxN4ms0+e3m5Td6YtoxdZPzSKCSQNsCUOJQ7EcHflIg5GoNFa/uxbFXlsgXiAQR4zTsw2NvfPhDalJfoTTBqN6u8zQIL79xagHaMltggIVcawaL6I/q2yna9SfCrIvd8HUmO5EKMD4vflPRGA6ABlOwfqlHLktXda1CllGWUbDtpa7d38Xa79koYVvbCvrHqkiXfarl0eP3lkyQ7pNgpF3jwvLdKi4LCTuCQ5LxqkzWBcU9i/7d/SYQAMLsScRvDN3+avyOpgfDoYKPJUNacBfEPirxDAg4HsOdtZ9sGv3XKm07OjV+0OmRF5sId1gdtkvleg2l/tzdknd/t1zQkATLHUFZmc06lPeRSs6CqHIqkvs3VpVf9h6PI5hL805965cc1KyPQEY/yjtNHNfZwhtABha2koV+ZWeKDToZa9G5PfI+9JHjMlpek6mdNQaFoueQDAM5uRuVKWqndDByajyU6vK4CEDjMtAppuji64nen+Z+nGGb/f4RcniTnxcLJ8tVDtyVR7ISt3DnIrgNhiotm/TIhOj7iXsbHwvdfaSL1MiUiQXxrt2U+MX0wwDOjnGYu1FPD58nFHKy/9lFkMz+C8jXHVdQm++DLGBp3cRFyB5HNz2BOAKE3KGw8= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jul 2017 10:19:38.4622 (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: CO2PR07MB2502 Subject: [dpdk-dev] [PATCH 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