From patchwork Wed Mar 28 12:14:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudarsana Reddy Kalluru X-Patchwork-Id: 892106 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="lcvnVchl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40B6JG6wQ1z9s0y for ; Wed, 28 Mar 2018 23:14:38 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752090AbeC1MOf (ORCPT ); Wed, 28 Mar 2018 08:14:35 -0400 Received: from mail-bn3nam01on0047.outbound.protection.outlook.com ([104.47.33.47]:59104 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751072AbeC1MOd (ORCPT ); Wed, 28 Mar 2018 08:14:33 -0400 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=NLD5ngtduOTpwgyB3tZa51pRPRnH1cjh2wjIut/l4Ac=; b=lcvnVchlIUjG+RfdnSIA6Jv797VxvWMc3Nllv7cGc4N98eEf7xsba+KvqvorfbaT97DZy048tavLhnF0vhzWE+yc4d5BwOR88T9Qo5suKiN3BCJ7WamAgBtFL1JhhLVv+ZRT40Y3Mt4ZlBqzkUAHwJbAo6qm4op7kVrEAkL+q9o= Received: from CO2PR07CA0057.namprd07.prod.outlook.com (2603:10b6:100::25) by BYAPR07MB4213.namprd07.prod.outlook.com (2603:10b6:a02:be::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10; Wed, 28 Mar 2018 12:14:30 +0000 Received: from BN1AFFO11FD007.protection.gbl (2a01:111:f400:7c10::147) by CO2PR07CA0057.outlook.office365.com (2603:10b6:100::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.609.10 via Frontend Transport; Wed, 28 Mar 2018 12:14:29 +0000 Received-SPF: Fail (protection.outlook.com: domain of cavium.com does not designate 50.232.66.26 as permitted sender) receiver=protection.outlook.com; client-ip=50.232.66.26; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1AFFO11FD007.mail.protection.outlook.com (10.58.52.67) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.527.18 via Frontend Transport; Wed, 28 Mar 2018 12:14:29 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Wed, 28 Mar 2018 05:14:26 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id w2SCEQ68007759; Wed, 28 Mar 2018 05:14:26 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id w2SCEQN9007758; Wed, 28 Mar 2018 05:14:26 -0700 From: Sudarsana Reddy Kalluru To: CC: , , Subject: [PATCH net-next v3 1/5] qed: Populate nvm image attribute shadow. Date: Wed, 28 Mar 2018 05:14:19 -0700 Message-ID: <20180328121423.7718-2-sudarsana.kalluru@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> References: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> 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)(39380400002)(396003)(376002)(346002)(39860400002)(2980300002)(1110001)(1109001)(339900001)(189003)(199004)(478600001)(69596002)(1076002)(81166006)(106466001)(50226002)(2351001)(81156014)(87636003)(6666003)(356003)(8936002)(6916009)(54906003)(476003)(126002)(8676002)(305945005)(86362001)(186003)(80596001)(26005)(36756003)(59450400001)(336012)(446003)(42186006)(2616005)(48376002)(6346003)(11346002)(16586007)(105606002)(51416003)(76176011)(50466002)(316002)(2906002)(4326008)(486005)(5660300001)(47776003)(72206003)(486005); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB4213; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Fail; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD007; 1:wHUBdlennlUoL4fxEfcirCfsTvynauaxFyA3D6G+e0/PW+KfXKibw2h7mBMoCcvvDgsEPMYbdHTQMiRuwtPilnboRae9LTpeNg2aVYvQ82XRbdxKR7S22TFszf1AK4mK X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1198e94a-7e45-4eb7-63eb-08d594a57504 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BYAPR07MB4213; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 3:DhS856MipGyTC0h2ujssgX75tkqduv3wJniIxW4H30GEmqNYVRgnNIpL++a4O7bZOfMk1DKToo6BA1KrU5XCx+yDE2S2ED19HU/ecgFBQrUmaC00hGbxE+w6pRDZB+qx3QUA1Xo2nIya281zJtjyrGRnhSwqUW7rTJf2IXBxBto+SsHcsVcO9JclYyuQko4Qj7XZTp7lgdVcD1+DiJSV6lTJne9gL7oaXKeZwoUPApU4PIlwc/ZolcppmvgoBrGLE05MNv61+h+ztsHuTa+/spvmGoayzPmXUuNNZBQ6SYYspbXLvX+AlqX/QFBG1Hmhv2jTtXKXftGjXbSRK5mkO9dq9T0mEOBKy55JHF5Ehes=; 25:YdtXExmxb4Z0YcJh4hppziy2CJXlphrvUUo2OhnFwQzKeKShxG2rdw4LXgKSGjgEVq0YNjqacPGf3dHVNaPt769CQSDSJ9ONekPzBFh9HIQq5ecaeQRiM0xRLnlA73SmhPY17tRAo4z28jICVsmoPOOuQHeHGvUATvkOGwgQVYMLzxuJLn1dB3M45WPaIKIxzl392Zjxqcn1qXWDl6a08XfSuFeRd+phLidOL1XRr2C2GFZS7Rkibt2dkCaUjwo4q3shgqltLncExXlMhbwZhq7hflvXGT/6bbpe9Ab7KNSCIZs1Y2vK7IPOWrV63feD+Hyth1QlrNlSpSqeZlymLw== X-MS-TrafficTypeDiagnostic: BYAPR07MB4213: X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 31:FIpFMfZrDLJfVdA2nvnWIzBHyLPP88rJMlIxihes9yCGrUmsL9V0d4fWZ2D0HtGH9IF1u8aqtnU6S18GzTQfpxSIwn2xtSMv07OaYOukOCfTmAbjc0UJTIM+O2Htk7DmLNKIPEVWQWneurGk/6IJr5hhA94sc9cuyLH6TpmL4/sZYQr3e1+TnXG1TMy5M+tRBNzVmdacGpIOmqM8MOghU4j3o7OpYDmDB274Gf09mFk=; 20:ot1brZUFo9UKuiqS95hPMPEW8at4VMZu8Y/+VGYBoYIx1uBleWPWTTgGozJMXZcka9rKDK3gP5vrqs/9VsjaY8J8XqkhHnR4qNEgi39X3p+cejffxXtTdVeXNzY15Hjpnc04QYAtRjO4aUJjpah/UAAJFcWAjX6WAyWAwo7eyfv054hk4Zg8iEwnw6QDQULYyaL1Dm5d75cGRaMJYo/sbXxRaSXDFobDqUSE3p2k9FrRJ80McAGzblE5hmnLKFCbI5A+Y5EIihbuPPk212P73g2eloMDNfr8wACOdAe8KVnhu244Hlzm9WmYRVySsY+7ishzDNQtNkIDTHiyuuDShDnMz1w240yBvyfFe5O/FoHBRMzUBw+7x8JQcNNA/GPdrHpqHfyCuYxuNc4eEpZaJN0gFlPhqekHVfuXzYh1h0tL0aQOvPSVXjIjldrqTJVnJkLj4lDrhvAE1Z9K86tiMuhgeufgsWK6kkSwCwrPR20dvaZnJeKGRYEwxQZCmCIU X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(10201501046)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123564045)(6072148)(201708071742011); SRVR:BYAPR07MB4213; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB4213; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 4:zKTYetANfTXJwl2eARIpItkmy1J87UZd/SujUyaEV8v4Jc8On7CRZMx2ghvautbuwEzUTkttri+xXbhbXkpOI4X9zPqsJDsjtFyhMRrcxNg9ms2KePCJeV041LPYs2M8jgqlp+a15zsrVAMpQecGiI1FoiMhwf2qgLoOGMKEtgPj1pDU2E8oz65NAL1T/+TzLNelFhwdVVvr4K/fe8w2G1ZmyWR6uXygRJcdt5BLMdgewrqaUCRhDXyTg44bMqNCQnIAtkyH8CFGLJn82YeRkA== X-Forefront-PRVS: 06259BA5A2 X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 23:pGYHlAaDVok2a3onQQe53b4qD9UsoSQ0mtRkF24obKs68e8VKu6rKRzkvZIkV5ThfP2mkWhi4A98nlWXur7CdU0CQoHyK/LxDFmM6W4ragNaQ3Rztalng7Qy17cnXj2AkeWF0YlKC0SscbfEPjLzVDg9Mj7pS1LvuWYjfeLOGTviqPqGI6hwnaaHJP3jpWMlxlUxK1XZSOzTHO5/rNJQdrf6gr0X9tHgXJOlpB1SULBPPORzBkEex66EAIAkMRUifUg8sI2eF+gcbNIBrXdIFPU6bBVZAI53FuRrqw6Yy9Q0IU4k5psgslNnsAPJwc1FhZNRqtIdQyGXxvUqiYluQg234JLI3EXFibY/IdLJhXOfYuOHeyjlTYNDON3Amho0vRNeLa5/9/3idqHHMi9ZN0zvtW0g4VIpvFAWSs8yRqZddHqBXx+sCz1YqAhqMf07NQQwD9ea4zern8EtrkxDawfMBE8XHCmrtqAy0sVDxbX+LjnUVRZB1GMpSFvJ81UAcCYNOiD22nzMTEW1aABvyBzkhuNbf2FjNvIuLIfnwofB2R5bMoNmEttpFunCtbOiZh2p48S2MeQnpcmjtXDZvoeicpZNWK6ZUqjzdzWFSZcBz9VlPdHWDfZQSdxXt6/npl8feFfL8IzPydSPy3V7TiG6RFxdRaPM6SW+CqjeypbdeAhVZIKgsUR7pnBobFwzJC3zY6qaCo5cSLC/TTGbConvBPlHikv1vsfqVR+mqNreJM1wc+C6C/XgiTCvIcgENSW7sul0NL17EGdlEuHAlufI2LJ+GGNgv4BsQx2Q5uFCK82LQqZxYlNnv/sVZtg8TXdkQvIK5Y9OZRzQbGeJN5ADLaun6RLk8gEMupjN4NuLUgtJiWYyt5lauVymONMa0Atg76cfKgWJC0I84+R7nynTCEpXh0OurCeTvfZNiGNFXEHZfBFAbVnVuP/XSdRXtN8Qe/eysIBsp9uoZqU+V/KoQ3QpbI5KJXwkYMMaXPYcaVJ+bn1nj0dSM7Ut7gMZg0A+FJvZcUtKBv4k0TJt8nbg0LY2HuzxGtrf5PrJARnnhb2DJjo03jlWrKIancTiXcq6rnvIk5K8rSObkkBnk22NDC2bzF+wHugCjyhdhAJpgZpKMxb9f8IS7zUq7x8UazLmVuhtiOpwIY0HH+BQa7/MITnCQEdOC86gBvmhORncA+y6tIDMHDtYe+pcIM3+0YDNxGOp301rOyEzJBzUVA== X-Microsoft-Antispam-Message-Info: 3aGAbI5o3DN7mJZJwJUZJ2FTJGsucFSygTM2fdL3Dv2JayqWbREyjgX05HHSXZXZrkFpPNuAJBinEGe7jCOssWvKrvVumDNN4eJ7ZswL8weoH/qWzr2SGRJlLRjLdPbmW9+h+oGwKPqcOVHhR1Dp3mm/cw8SIWqPpROaGWoZDqJjNLRsaIGtCGKUo467UoKV X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 6:lnf32COEXLKgnEPxvf+Uk7oNnfbQNV9YVBfzGVXUAcgYCoF/Ocv2t76qSnEz+1sYafLxjvkMIMmAr0A/UXZ/Ji6AS/e2gz9VKbIWiBpQRaO9vrRGFmk14TlVBL8rZtWtrrlECQsuCe/jOlbFiegFlj+HkvO9OsV+XOWZicmR4X3GhfkSMPaob4JZoEntB+np39MOydlQ/H1KcLSohxd8HEX/w7QXiTx1SKNn5zlSLgjK5khLOc/vhGEgrqP1FmnWwFU4hox4Oo51G/Zr2xTNSKCoW13VVZDxOpFsBw6/ftsQQvq80u8whJKiHCAwZrbpSVXjEy+3Z106t1Iwql1gyradFspiFJIIfuNI+gOE0FMrWUMoGljPqX0POTabIPUnfAwoG3v1Y5BejQjR+9bdmNZJGyYFaYNF84QkDLUM7n82LvnqZuho+XQ7noabPW48UuBuTYhsg8JpM+j8sLNMfA==; 5:a6RyyXE6DFGNbDb2x0RTzUfwWCpPVcOJArTenesmZlLK4XPPAGWFeKfHubMRuY9f0TPlHRzMxv4eDVKXORvV7+/CMHlLL48r1AuvWj8crSfuDAY+VJa5Xg0tB+BJrdCchObyUOh1xM6r9jU4qK1q+whqFndnU0fBk58IoTSWmlo=; 24:b5GUksXeHR8VrjNFfjnJ1QqldDvH2VIPtCDoO3Nf4OFjVy5+sAlrqVitMVH7ommHYHd2/7B/8TinTpid10H+9E/BFXq0x9OBvqO3hPtS1HQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 7:B38yOnWXarD/Mn8TcFQkkwQGFaAI7sQwNflIHVsz1zUI9GvAzELH35TrENHPVDQiJceF5/VFP0CKtDPn3HQYzbX/F34tuJeP5rGGv7i/3Q3JyCRCwNIafxdm3QRTcE7/E/B5sIl7c8pIEP//PuoLbFe0hM7Pnjh25bHSyNTA24YszYZ4X96rcwm7Jgna0g56kcqqzMuB3iuhfhGKbrmeUd1c55jMD7vcYphG0MasTEhoGUFPFtqoKdc5wkyo2CxX X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2018 12:14:29.3097 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 1198e94a-7e45-4eb7-63eb-08d594a57504 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: BYAPR07MB4213 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds support for populating the flash image attributes. Signed-off-by: Sudarsana Reddy Kalluru Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed.h | 8 +++ drivers/net/ethernet/qlogic/qed/qed_dev.c | 24 ++++++- drivers/net/ethernet/qlogic/qed/qed_mcp.c | 98 +++++++++++++++++++------- drivers/net/ethernet/qlogic/qed/qed_mcp.h | 22 ++++-- drivers/net/ethernet/qlogic/qed/qed_selftest.c | 6 +- 5 files changed, 120 insertions(+), 38 deletions(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/qlogic/qed/qed.h index 6948855..b409499 100644 --- a/drivers/net/ethernet/qlogic/qed/qed.h +++ b/drivers/net/ethernet/qlogic/qed/qed.h @@ -437,6 +437,11 @@ enum BAR_ID { BAR_ID_1 /* Used for doorbells */ }; +struct qed_nvm_image_info { + u32 num_images; + struct bist_nvm_image_att *image_att; +}; + #define DRV_MODULE_VERSION \ __stringify(QED_MAJOR_VERSION) "." \ __stringify(QED_MINOR_VERSION) "." \ @@ -561,6 +566,9 @@ struct qed_hwfn { /* L2-related */ struct qed_l2_info *p_l2_info; + /* Nvm images number and attributes */ + struct qed_nvm_image_info nvm_info; + struct qed_ptt *p_arfs_ptt; struct qed_simd_fp_handler simd_proto_handler[64]; diff --git a/drivers/net/ethernet/qlogic/qed/qed_dev.c b/drivers/net/ethernet/qlogic/qed/qed_dev.c index 553a6d1..7ddec55 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c @@ -2930,6 +2930,12 @@ static int qed_get_dev_info(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) return 0; } +static void qed_nvm_info_free(struct qed_hwfn *p_hwfn) +{ + kfree(p_hwfn->nvm_info.image_att); + p_hwfn->nvm_info.image_att = NULL; +} + static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn, void __iomem *p_regview, void __iomem *p_doorbells, @@ -2993,12 +2999,25 @@ static int qed_hw_prepare_single(struct qed_hwfn *p_hwfn, DP_NOTICE(p_hwfn, "Failed to initiate PF FLR\n"); } + /* NVRAM info initialization and population */ + if (IS_LEAD_HWFN(p_hwfn)) { + rc = qed_mcp_nvm_info_populate(p_hwfn); + if (rc) { + DP_NOTICE(p_hwfn, + "Failed to populate nvm info shadow\n"); + goto err2; + } + } + /* Allocate the init RT array and initialize the init-ops engine */ rc = qed_init_alloc(p_hwfn); if (rc) - goto err2; + goto err3; return rc; +err3: + if (IS_LEAD_HWFN(p_hwfn)) + qed_nvm_info_free(p_hwfn); err2: if (IS_LEAD_HWFN(p_hwfn)) qed_iov_free_hw_info(p_hwfn->cdev); @@ -3054,6 +3073,7 @@ int qed_hw_prepare(struct qed_dev *cdev, if (rc) { if (IS_PF(cdev)) { qed_init_free(p_hwfn); + qed_nvm_info_free(p_hwfn); qed_mcp_free(p_hwfn); qed_hw_hwfn_free(p_hwfn); } @@ -3086,6 +3106,8 @@ void qed_hw_remove(struct qed_dev *cdev) } qed_iov_free_hw_info(cdev); + + qed_nvm_info_free(p_hwfn); } static void qed_chain_free_next_ptr(struct qed_dev *cdev, diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c index 6f46cb1..2519e71 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c @@ -2303,9 +2303,9 @@ int qed_mcp_bist_clock_test(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) return rc; } -int qed_mcp_bist_nvm_test_get_num_images(struct qed_hwfn *p_hwfn, - struct qed_ptt *p_ptt, - u32 *num_images) +int qed_mcp_bist_nvm_get_num_images(struct qed_hwfn *p_hwfn, + struct qed_ptt *p_ptt, + u32 *num_images) { u32 drv_mb_param = 0, rsp; int rc = 0; @@ -2324,10 +2324,10 @@ int qed_mcp_bist_nvm_test_get_num_images(struct qed_hwfn *p_hwfn, return rc; } -int qed_mcp_bist_nvm_test_get_image_att(struct qed_hwfn *p_hwfn, - struct qed_ptt *p_ptt, - struct bist_nvm_image_att *p_image_att, - u32 image_index) +int qed_mcp_bist_nvm_get_image_att(struct qed_hwfn *p_hwfn, + struct qed_ptt *p_ptt, + struct bist_nvm_image_att *p_image_att, + u32 image_index) { u32 buf_size = 0, param, resp = 0, resp_param = 0; int rc; @@ -2351,16 +2351,71 @@ int qed_mcp_bist_nvm_test_get_image_att(struct qed_hwfn *p_hwfn, return rc; } +int qed_mcp_nvm_info_populate(struct qed_hwfn *p_hwfn) +{ + struct qed_nvm_image_info *nvm_info = &p_hwfn->nvm_info; + struct qed_ptt *p_ptt; + int rc; + u32 i; + + p_ptt = qed_ptt_acquire(p_hwfn); + if (!p_ptt) { + DP_ERR(p_hwfn, "failed to acquire ptt\n"); + return -EBUSY; + } + + /* Acquire from MFW the amount of available images */ + nvm_info->num_images = 0; + rc = qed_mcp_bist_nvm_get_num_images(p_hwfn, + p_ptt, &nvm_info->num_images); + if (rc == -EOPNOTSUPP) { + DP_INFO(p_hwfn, "DRV_MSG_CODE_BIST_TEST is not supported\n"); + goto out; + } else if (rc || !nvm_info->num_images) { + DP_ERR(p_hwfn, "Failed getting number of images\n"); + goto err0; + } + + nvm_info->image_att = kmalloc(nvm_info->num_images * + sizeof(struct bist_nvm_image_att), + GFP_KERNEL); + if (!nvm_info->image_att) { + rc = -ENOMEM; + goto err0; + } + + /* Iterate over images and get their attributes */ + for (i = 0; i < nvm_info->num_images; i++) { + rc = qed_mcp_bist_nvm_get_image_att(p_hwfn, p_ptt, + &nvm_info->image_att[i], i); + if (rc) { + DP_ERR(p_hwfn, + "Failed getting image index %d attributes\n", i); + goto err1; + } + + DP_VERBOSE(p_hwfn, QED_MSG_SP, "image index %d, size %x\n", i, + nvm_info->image_att[i].len); + } +out: + qed_ptt_release(p_hwfn, p_ptt); + return 0; + +err1: + kfree(nvm_info->image_att); +err0: + qed_ptt_release(p_hwfn, p_ptt); + return rc; +} + static int qed_mcp_get_nvm_image_att(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, enum qed_nvm_images image_id, struct qed_nvm_image_att *p_image_att) { - struct bist_nvm_image_att mfw_image_att; enum nvm_image_type type; - u32 num_images, i; - int rc; + u32 i; /* Translate image_id into MFW definitions */ switch (image_id) { @@ -2376,29 +2431,18 @@ int qed_mcp_bist_nvm_test_get_image_att(struct qed_hwfn *p_hwfn, return -EINVAL; } - /* Learn number of images, then traverse and see if one fits */ - rc = qed_mcp_bist_nvm_test_get_num_images(p_hwfn, p_ptt, &num_images); - if (rc || !num_images) - return -EINVAL; - - for (i = 0; i < num_images; i++) { - rc = qed_mcp_bist_nvm_test_get_image_att(p_hwfn, p_ptt, - &mfw_image_att, i); - if (rc) - return rc; - - if (type == mfw_image_att.image_type) + for (i = 0; i < p_hwfn->nvm_info.num_images; i++) + if (type == p_hwfn->nvm_info.image_att[i].image_type) break; - } - if (i == num_images) { + if (i == p_hwfn->nvm_info.num_images) { DP_VERBOSE(p_hwfn, QED_MSG_STORAGE, "Failed to find nvram image of type %08x\n", image_id); - return -EINVAL; + return -ENOENT; } - p_image_att->start_addr = mfw_image_att.nvm_start_addr; - p_image_att->length = mfw_image_att.len; + p_image_att->start_addr = p_hwfn->nvm_info.image_att[i].nvm_start_addr; + p_image_att->length = p_hwfn->nvm_info.image_att[i].len; return 0; } diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.h b/drivers/net/ethernet/qlogic/qed/qed_mcp.h index c7ec239..7d33354 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.h @@ -496,9 +496,9 @@ int qed_mcp_bist_clock_test(struct qed_hwfn *p_hwfn, * * @return int - 0 - operation was successful. */ -int qed_mcp_bist_nvm_test_get_num_images(struct qed_hwfn *p_hwfn, - struct qed_ptt *p_ptt, - u32 *num_images); +int qed_mcp_bist_nvm_get_num_images(struct qed_hwfn *p_hwfn, + struct qed_ptt *p_ptt, + u32 *num_images); /** * @brief Bist nvm test - get image attributes by index @@ -510,10 +510,10 @@ int qed_mcp_bist_nvm_test_get_num_images(struct qed_hwfn *p_hwfn, * * @return int - 0 - operation was successful. */ -int qed_mcp_bist_nvm_test_get_image_att(struct qed_hwfn *p_hwfn, - struct qed_ptt *p_ptt, - struct bist_nvm_image_att *p_image_att, - u32 image_index); +int qed_mcp_bist_nvm_get_image_att(struct qed_hwfn *p_hwfn, + struct qed_ptt *p_ptt, + struct bist_nvm_image_att *p_image_att, + u32 image_index); /* Using hwfn number (and not pf_num) is required since in CMT mode, * same pf_num may be used by two different hwfn @@ -957,4 +957,12 @@ void qed_mcp_resc_lock_default_init(struct qed_resc_lock_params *p_lock, * @param p_ptt */ int qed_mcp_set_capabilities(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt); + +/** + * @brief Populate the nvm info shadow in the given hardware function + * + * @param p_hwfn + */ +int qed_mcp_nvm_info_populate(struct qed_hwfn *p_hwfn); + #endif diff --git a/drivers/net/ethernet/qlogic/qed/qed_selftest.c b/drivers/net/ethernet/qlogic/qed/qed_selftest.c index 1bafc05..b88082f 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_selftest.c +++ b/drivers/net/ethernet/qlogic/qed/qed_selftest.c @@ -125,7 +125,7 @@ int qed_selftest_nvram(struct qed_dev *cdev) } /* Acquire from MFW the amount of available images */ - rc = qed_mcp_bist_nvm_test_get_num_images(p_hwfn, p_ptt, &num_images); + rc = qed_mcp_bist_nvm_get_num_images(p_hwfn, p_ptt, &num_images); if (rc || !num_images) { DP_ERR(p_hwfn, "Failed getting number of images\n"); return -EINVAL; @@ -136,8 +136,8 @@ int qed_selftest_nvram(struct qed_dev *cdev) /* This mailbox returns information about the image required for * reading it. */ - rc = qed_mcp_bist_nvm_test_get_image_att(p_hwfn, p_ptt, - &image_att, i); + rc = qed_mcp_bist_nvm_get_image_att(p_hwfn, p_ptt, + &image_att, i); if (rc) { DP_ERR(p_hwfn, "Failed getting image index %d attributes\n", From patchwork Wed Mar 28 12:14:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudarsana Reddy Kalluru X-Patchwork-Id: 892111 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="WW4nqEu7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40B6Jd5yQVz9s12 for ; Wed, 28 Mar 2018 23:14:57 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752560AbeC1MOz (ORCPT ); Wed, 28 Mar 2018 08:14:55 -0400 Received: from mail-sn1nam02on0064.outbound.protection.outlook.com ([104.47.36.64]:9518 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751072AbeC1MOh (ORCPT ); Wed, 28 Mar 2018 08:14:37 -0400 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=m93DETHRcjZAFpVCbsv0Qupwy0bQhRvmGY+3x10u/oY=; b=WW4nqEu7QB3JehRPPlARCflh0apW3fgt9dzF9YMsiffX+edFFp+vokQxl1oQ9+JDIfDbNs+9ptohGc3xCv0HZXw3VvCXUaz5XOCnAI1k3to2gXYYuiujNgNZhAB3AJ/NzsJ7f+082xJ3N59157575aA5u4rp03rERWXT7/47NEg= Received: from CO2PR07CA0079.namprd07.prod.outlook.com (2603:10b6:100::47) by BYAPR07MB4214.namprd07.prod.outlook.com (2603:10b6:a02:be::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10; Wed, 28 Mar 2018 12:14:35 +0000 Received: from BN1AFFO11FD007.protection.gbl (2a01:111:f400:7c10::130) by CO2PR07CA0079.outlook.office365.com (2603:10b6:100::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.631.10 via Frontend Transport; Wed, 28 Mar 2018 12:14:34 +0000 Authentication-Results: spf=fail (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; mellanox.com; dkim=none (message not signed) header.d=none; mellanox.com; dmarc=none action=none header.from=cavium.com; Received-SPF: Fail (protection.outlook.com: domain of cavium.com does not designate 50.232.66.26 as permitted sender) receiver=protection.outlook.com; client-ip=50.232.66.26; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1AFFO11FD007.mail.protection.outlook.com (10.58.52.67) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.527.18 via Frontend Transport; Wed, 28 Mar 2018 12:14:34 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Wed, 28 Mar 2018 05:14:27 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id w2SCERXw007763; Wed, 28 Mar 2018 05:14:27 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id w2SCEQgY007762; Wed, 28 Mar 2018 05:14:26 -0700 From: Sudarsana Reddy Kalluru To: CC: , , Subject: [PATCH net-next v3 2/5] qed: Fix PTT entry leak in the selftest error flow. Date: Wed, 28 Mar 2018 05:14:20 -0700 Message-ID: <20180328121423.7718-3-sudarsana.kalluru@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> References: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> 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)(346002)(376002)(39860400002)(396003)(39380400002)(2980300002)(1110001)(1109001)(339900001)(199004)(189003)(446003)(1076002)(486005)(8676002)(106466001)(42186006)(59450400001)(76176011)(316002)(85426001)(486005)(2616005)(16586007)(54906003)(356003)(51416003)(86362001)(336012)(26005)(50466002)(72206003)(69596002)(81156014)(80596001)(50226002)(81166006)(305945005)(11346002)(87636003)(5660300001)(105606002)(186003)(47776003)(2906002)(6916009)(2351001)(8936002)(476003)(6666003)(4326008)(48376002)(36756003)(126002)(478600001); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB4214; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Fail; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD007; 1:67DBXvX3iN9RfN129Yj2uTy4FsOV0xLwrs2FPFRQN9UAndaiguxOT/BrZxG3HdnKQusOZpR/6P47QARbpk6NjqViZ0/gH70FqVA4Wzc0MpWqsfM46LSuRLieX8s7wpPo X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 428c3e5b-c5b0-4fda-8c9f-08d594a577e1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BYAPR07MB4214; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 3:PBB3hHgqSbKfcjK0UHCegQ5MNWxmpBrgqoDciEqmoAcQR6S9IrbBYLpE+7wpRuOhLi70otgOzt8QQOk3ZHd+WLC/1LfKIe4Xf10hKtwBC+N0kK6zjHK4pqpYbhItwHzZtVcKxkZZi6cTrRNTUP8BxPjzQy9on6ZCi0DhNf3N1ukH5cVIwPiv4fy8+R/dtPQrG3p/eTN0P+ZqKSCMfaCrHbh4Db9zK8a3Baaf1DJSOo+t5Z2FrwYo33lBCMprUUv56uKDDkAZYHiSTreJc7OLyX5kDLZOPyN+KR0zRMRWO6x/h+KyVE92QgjwBMKvZpnEutHTo251UyOdeNNQU2IuCRwvIJ+41If5bsgT7GDFIJM=; 25:U0JoCq2Tk/aFoWnxZvMLoIJ9pxOlLHyAszfPsY6MKiNLYhwOLzQRkkm/816e7zc1zr7D+TOTsn/nKl8h1IVTetNbqFB2NtNNNuJ0Vo1wK/evk8KVtuIqncqROrC/EKzzK4Yl8Cpz0C1TE352yOVw39i14Z+EI6RUox+gQI3xleez02zawDRDaUv5IhdQq7uZ8rsIU2DKwW6Jj8k9HOWBmuIaiavLDpaeE3UnNnpIoew34+/DWvivoOHgCg9tlNZm1tOozjtcyW1VVe5grsZJFdzhQ3sRAwTvBvEh4kmGGydLNgAZ13G6tpOk1nao+t5+vWYqNOGZ9w4o1QAT/Re6ow== X-MS-TrafficTypeDiagnostic: BYAPR07MB4214: X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 31:lE6JEnoiDZ8Lf1vopKaXyY9DoGtStlMK89mhSFDXXiAGVPg/hCYXMCkeaNYCfbAN3EhZ7adzB8I+P1HHPZuRVFoQ1+DeLc2Ug7gWX50qd5IFk0Z8rem+rxosj1IjqEUcjfJoTv8C/XlGRsviYTC3tZ1ylD927huJDY3W1DY3wXxRgiwY+NurAuehYvPcV7AIFBujFqCg1IYVqhjvc6LPiUqMNEx1WByVrZgJDudRKlg=; 20:RNgfuu7XZbUVXqJO4amsUX8zK5Gd0tw4iGUI0GRWDAygw7+Cgj/0t4IOvE0F3WaR/ceDbkZvlYMTNHFBW7CYuBryFQeFCFQE2IRHzyv2qex0nbN3IlxtuDRD1fq+yTZNYxBPJrMUfyJnknPOVkuoV2ZDaZv9N8EOX51yFcnzBwVNbst1r5IQ/bhiLr9weykrdkBYTKEx3LWfadCW6rwE3ycobQhnKGiKH+cgM0e68Eks7v3GQR1ONT9cHfpXZQO2Ws1R/fv/fWBwPRIqaldgAqKWN48Ab96z2HIZF1mohvNQS+KzmAGJBdhZEANNAcBbw95kNXb+jTIW1hAQoFuyRWaB8Wngu6qiQno59xEToJlWHNP/YqZo2W5yUcz7QYmTNvl2A2s9KlNLFTH1yRv5SSrjZXuUvNYtACc8big+xkflGkmnnru5EtKkKQVKiv9hIN2s8gkpd1H/p4VjixG2jtWpWKs4+wKoPfzKWSiGr8o0Ke1mnBCoCol2s84GTDQm X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(10201501046)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123564045)(6072148)(201708071742011); SRVR:BYAPR07MB4214; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB4214; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 4:7hhMBLNpdExTY7AM13uBmZRhKOSHOn44A3U3kHeJpijPNH17JIe81CkN19++YQq72Qgh9rr0wmaaEseCzXB2Yu2Q4WBK+ymdEUThy7t8W5vfJTQGSVYLUX7rqTP96dNAakgehEZNwi6AI63Iv5eQgT2da6oCefCIF+UBkXNlPWjVImgndKI4L22LBx3VCA7qkXoIntS/kO0aRKAKFkb1M8JnS/knkODpKEh/0IxzOYJcyomxaqTSIYnnh3t2JjY+ODH8mO7sxvpnksr0+QS5tQ== X-Forefront-PRVS: 06259BA5A2 X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 23:bEjVkeDvZRiDzhzVk9/ZDNcHIS9dgEStQ/9P+VuS6MFvFIULIBdmHzG20o3eIYZCAH1jpXzwsaOQ9i/wRWE5fH4U4sGu0maCjP5srpfHoAT8IbQi3jmeDxHPlw0tSRWzxtuMaUTPP9ABM+K7jvr6LHdxCFTn+33LoMC9suhWkWyl+S/nTHIk60VaqwJB1Y91NQE6pYnEp4Si2/d7xWTSd6hguOLzXfR0uBzzBbwubYEx5Jb4NtSqDT+3gXbptpwNoP6LO+qUlgqtL5S+v7Jtt8TWZz3jmKVwvmqEHd7VVWnS6P37ExwM+O4XAL01Z60bD2U6e/kYTGqk9MxTDKVWikXcSHlN28+SFhGe+vDlNYg2CH/uPatLOyYJdXdlMH2ZiYDeYyHJ5EeMdaelCrxKqfP4KUXZ61Gehs+ekAnCGAB9y9eFSqZvnsUZFF8VyuevQdk9W8d8bvoxm5CIicH3z4V7TSkELPZGwOs2wbgbyBDCxjjhvSTar7efhsDDXOXjONaiRnx6MSTWEJgixpP41FXYDTE88PlASO8spEH55dCVXYqYoheJDAPnJhI/XuMf6OJL81uFvpimUmOMs+Pz148Xkl8cr+9Xp41gNIXL3ynEmYg39U93z4AygAfBcntYiRaY2MxO+kYvHSAMiv7zzj3pOgVHYIDOEGjPI9PUWHgk57UlJWL94g0BMU7BMqw7PMCH0Fw0x9nhTwBgihHRw6rB92L/2Zah9pnhWifHPJS7wuV/C3/KbcKcS1iPS3PDd6UD74SrRCbH0O7UPccKp7lVE4mi8ou+N+kGr4y7Pzl2R6XD8VW+kVQ3nAlHDgaxjwC5Maa0qlaQX0QZZo54LlGwIWuhFCzIQ7HECIGb8KoPqr8ie5+QiD1wJF8ae2olIt9eUHpzIBBnRdFqICcruiZFd65KdvPtcYnJUvZLjyhE+tJ8GSp8oj0CPmaBmRtsmYyRM12ANQH+Q8K88VK9vwFzobhfhOUY1p5hfc4SqkQn1xHGOO5gEElwHEv6LjUCWbphaJzVCgU0uvUP6tNHRv5Z0E9uvmD286mV8gN5T074fhFW32rFXcbf0cxX7X2YcMt3k44gJstyOQ3EzlvVTal+fiR7oWsk7Hl0e2Y0uLjtSSTsTLOegWTlR1B6N+IMk7+JroVmon2wEJ1Ay25BFDMKJMam6WLTCHBBwF+3K+UV5Diy8WcqJXUbJBNEcWn3DcHyResPfEN7tyqfXFCJ6Q== X-Microsoft-Antispam-Message-Info: NsnOs1P6kvyeQKz0WVvpOsBIT7C/TkbgmIHq5EXwDkKb01mqsPQS4n3m5A2GGLCkpXXu6twencH/gb882HrCD8i873F8UYeMJoMGEefmbo2BD23Gjb+P5u/dxuPZ3FWLeciWho6XPjf5aclVIcpmgRCNrf9PCGDpeLFGceoCEIjZZQISRoKs8CsRM0fYFU0O X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 6:EMvcbjfHR4m1niWr4IZcdmU/U/v2LZNsh+ut0zuLmtb4y80vLUrToSgf0dgt0qV6GtYE/93AUzp6R3ZsK3G/ZgWo79/FjQbI9yF5LT+6Abgp9Jt+b9ja1kmuGxDcxPfTiFrzsDsuGnSoGy6gUvHeIFuvC6RlmE+5WLrVstHu8f9jpDw/Kh0RDCgjx/B70NFAjuCwIlFr5qN7mcJDoouTG/CfYSnqq7APt5dgGdsL4sCQ+MAxm6QCNupxRgFCuPl0Dh17xNDelru6agKYJOprbMPHOeipz0DPrMBiDFS1/h6BEwmGuP5hWjXQrUEg8zcSUcEWsfgWYoY9+K0mj44i1mj+szvZHrt7raFQ0yJ/caYf864GgG+Ai01X0khSRgZaM2FMUm991lbNsXL5W2NWZgoFuqNksArl/kh+IdGSG0g2YXZdJXKHsXGzvdkrEhLn+zghr/dQ7QzDkIF0dhV/Ew==; 5:47PmBLtv5/l9eC++r2Ij4Q28MvI22HAlMxjhqyKSFwwSErv5w6sZ4gHnmD59U96ZSChTh7UUTvbJxkbhw7QMnyc2Gkez0yTq3DszV+F3z5C8psRaKtq4klee6qisM1UnJmXjDdUa0aCRKRHStlHLM9RU7rBxu0vZz/kDeGZzHrM=; 24:2O+NqHq/IfmvLRsiG7IOvvugPN9YAfc/Lv2jSFr9DtTQVcWl6ZbTpA9uQfxrLJhZHwHat2sx2ZfyKhSS11tHV5KMcPMTxop9UDPzPjQ7/h4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 7:nqMfcHdsS1kzN/qdWIO9i73Uo4+kN2dhmjQ2jnUUSV6ORSTqGtBEoRGbkiIsvoxx8xH3fTI/jQ54YeDCTZZYx/JYLo2IntL0OE8R2dXett9LUsh26Aa97EFt7TuUCl9q4RkmTkmJAtunbSh6+Mt1aag7N3qD2YJaheK+Wbz3RK++PHWj2UsQqBcRj1u5tPjve5uGieSVjzoFSUgk3skI3ukkn9wUHGRCNW/ZOM979gTitXJkLuX+siXxbiIyjidr X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2018 12:14:34.1146 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 428c3e5b-c5b0-4fda-8c9f-08d594a577e1 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: BYAPR07MB4214 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Signed-off-by: Sudarsana Reddy Kalluru Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_selftest.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed_selftest.c b/drivers/net/ethernet/qlogic/qed/qed_selftest.c index b88082f..cf1d447 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_selftest.c +++ b/drivers/net/ethernet/qlogic/qed/qed_selftest.c @@ -128,7 +128,8 @@ int qed_selftest_nvram(struct qed_dev *cdev) rc = qed_mcp_bist_nvm_get_num_images(p_hwfn, p_ptt, &num_images); if (rc || !num_images) { DP_ERR(p_hwfn, "Failed getting number of images\n"); - return -EINVAL; + rc = -EINVAL; + goto err0; } /* Iterate over images and validate CRC */ From patchwork Wed Mar 28 12:14:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudarsana Reddy Kalluru X-Patchwork-Id: 892108 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="DLzU7K9w"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40B6JQ0WLKz9s0y for ; Wed, 28 Mar 2018 23:14:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752290AbeC1MOn (ORCPT ); Wed, 28 Mar 2018 08:14:43 -0400 Received: from mail-by2nam03on0076.outbound.protection.outlook.com ([104.47.42.76]:64128 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751981AbeC1MOj (ORCPT ); Wed, 28 Mar 2018 08:14:39 -0400 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=7AsBAZP8UFK/16IT15GDiX6gpR+ZtuJglzzJROmPL98=; b=DLzU7K9w7BF6QYL2t2YGqWDOE+yHbb0ZuKHnp9aebVbfSOfHVCALdCyeGNnQdHnDY29KR3jrit8S+QL94Knm4EIzw7P2Tq3SvqhdXPanonH4p5FwSJiiL3c4Cd1p7gAHvlX8rq13C1VWFlLhWlbCdRaGlG4Y697aalg56vIVsxI= Received: from CO2PR07CA0068.namprd07.prod.outlook.com (2603:10b6:100::36) by DM6PR07MB4218.namprd07.prod.outlook.com (2603:10b6:5:bd::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10; Wed, 28 Mar 2018 12:14:37 +0000 Received: from BN1AFFO11FD007.protection.gbl (2a01:111:f400:7c10::134) by CO2PR07CA0068.outlook.office365.com (2603:10b6:100::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.631.10 via Frontend Transport; Wed, 28 Mar 2018 12:14:37 +0000 Received-SPF: Fail (protection.outlook.com: domain of cavium.com does not designate 50.232.66.26 as permitted sender) receiver=protection.outlook.com; client-ip=50.232.66.26; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1AFFO11FD007.mail.protection.outlook.com (10.58.52.67) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.527.18 via Frontend Transport; Wed, 28 Mar 2018 12:14:36 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Wed, 28 Mar 2018 05:14:27 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id w2SCERcc007767; Wed, 28 Mar 2018 05:14:27 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id w2SCERD8007766; Wed, 28 Mar 2018 05:14:27 -0700 From: Sudarsana Reddy Kalluru To: CC: , , Subject: [PATCH net-next v3 3/5] qed: Add APIs for flash access. Date: Wed, 28 Mar 2018 05:14:21 -0700 Message-ID: <20180328121423.7718-4-sudarsana.kalluru@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> References: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> 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)(39380400002)(376002)(346002)(39850400004)(396003)(2980300002)(1110001)(1109001)(339900001)(199004)(189003)(5660300001)(305945005)(87636003)(72206003)(59450400001)(6666003)(478600001)(80596001)(86362001)(316002)(8936002)(106466001)(575784001)(6916009)(2906002)(446003)(2616005)(36756003)(476003)(42186006)(51416003)(11346002)(76176011)(2351001)(48376002)(50466002)(105606002)(50226002)(4326008)(336012)(1076002)(16586007)(6346003)(81156014)(69596002)(81166006)(186003)(26005)(486005)(486005)(47776003)(8676002)(54906003)(126002)(356003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM6PR07MB4218; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Fail; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD007; 1:2AdXDJCaLx96yJ6srNbVtHSqBXJIMvs9tT2HA5RjQTinK8zm14k3Ua3ed1QuaVN6CG8xausomZS4PZzCy+Djp2joYyfDK7gC3gYoOorv5h3Yra3dqEEANqnIJhjkCzXv X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 93fd609c-5b5f-479e-d5a8-08d594a57973 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:DM6PR07MB4218; X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4218; 3:ijR48IHB4SlXhahu/3lewmt4G2PR39TQLesq91h4Sq6AAvut57J1ynidgOwbaZAkBm6MqgpDvdkm9aicPlaBpbi+wZ7kOwX4cZoKGKfeCau8B/TL2kwuVZXdjms7J554LWc470rXnNq68RbkxfYrmPFyKEv7v5owy0gFs6zx/zQjxdBF6YDJT6CZHls4dEou0qI/UP8XiXpoGCMgzhcWpVjHXNOO2J4N7jYslLcC9pRL2WcoRBMfBLKevNvv5SBl9Cg8lDUL0HlzSnvhcFK+DTI+4JLhOkJBZutH+SiEwhoksZjQ2RdTIg8IeOBX20Df65sXF7RXf7d6519c6fwMjQM7Jn29uz0OE9XA9YUdJc0=; 25:cnK+kD12XVlUdBO1SHKHptLGdRV/mf9uu+NP4l5CuHKr2YzflcSK6py0LpZ6UwoMw98O2w0BARVbXqff/OLRc4UWKwPefGn771Vqm+MnxgVK+LIUwNgil8jflDS1u+vsNDe/W85dPL2pnh9GCme4vR4S363skMiw+fU8C5fvmYgFxt4HQTlDAgNvet0xfvz3tqzjTh/ok8uOen7jAGmRRTswAE16K6n/ZfA68wOnGMRJf4aOltq6XG58xWiplbIOlDm8za8601y6k4bGLkI29UjCn3wBPUgGlJ0DgeTH9IgpRhsigMg9gbir+UYZXLodPBcxkKTtIBkZFSbjz6QJng== X-MS-TrafficTypeDiagnostic: DM6PR07MB4218: X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4218; 31:maifP4BPvWw5FiMcwtIKPLrU/0RlPhlx73NSn+9WxVvCWmJ6yMac/WwObZ0mZKvAu00SSBzFVlvDusX0fchKIDExOCJzxBb+I5OcpvSeASquzSm0WUr3S4+9HP1Q+7JHxPeXcbIGrLVKTt8h5DYG2vWnFuuzCGLVZ7SOJ8XSP8/3z7SwIzop72v5BqiN41o5ZWm8iwkOq2PlkEH8B6073TtBtX0AMrgvhEk3AXQGNvA=; 20:OfKuHPGe6UYmQAOWxED3roHwqYW/jabPsj/9zPlD3dMEkCUxfJ2VdoKE+OM7MS4gStdOoIxalRNVS2B8ymDHUxy9jvuvYBmmjixU0sKPMBREolXgppcQ3G/noR4IODDy8a0TP+p6rrQ/UNINvhUFDA3g3zLlJqI8YEbI9Ddt18uDF2CiDnQes7j5itMOlLYSaZuTiB8lqwHkKBFClDk2wcIb+8aZkURa/wQFdbeR9DGFryiItrkn0d63yNmZdtOP6+8IJEP9tJPDFWvMNs8xFFRYm6GXc2KKXSRuePjpXSekQbNGuIPDnY16QVh0ymSIlrjaDDf5jXl/gAERJjOQ9dwVCrn5LVUa1PPuDCf+wqk/nQFx1xCaxOMIGq+XNll5IxUnjZ6eynP3raNU4SCZO4MStG15Qk5hYH8SknQNAjNdLUvu/Y6RFzsHq9983ThNXG6ussZ1XmU3gVOY40IZ5sta1zZfrg+sXTemR0wJTY2HIKXs08KHYcRc96URInDr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231221)(944501327)(52105095)(93006095)(93001095)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123560045)(6072148)(201708071742011); SRVR:DM6PR07MB4218; BCL:0; PCL:0; RULEID:; SRVR:DM6PR07MB4218; X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4218; 4:GgrSjKewzwmRdo4M5zFsoVthHw1gBl/RnrvILt/5qUUupFptH2NTeLW6KXDZSxEOeGNu6oI+VpL/tJAbVLwxqCMQStD+8lfQ0ZRo/E86iIb4ZrEjSMdmus0DyQtwST0dDV/vS1d93KmK3BtwNnRX0MabNrKtZNyeBvUIXrOp83DtdElseGq97D/z9xhAd0iKcZY5V/tlUA6HmbZbEiq4wQIXHmQa0UYJdEdTiyqQF7Eg0LbOlVlx2e+s07yn3h2zBNXmfUUeaJ6JD1vUW600fw== X-Forefront-PRVS: 06259BA5A2 X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4218; 23:ALwXUU/PokMlKNp6N4+OooLN9NJA9HsoQr0R/CfFTmdMpr2tzVmfxIZhYO9rDXi6PhBE/FTe6oaxT76sqheYfqH9Om7jOCP5P7iKz140qVqqw6WkBjJ5QErsAjFKRb6sJ4o0LTSmrwbJhG3A/Zo/3MPJUtkexJIBYI5XstO7APHe/Ych+EqtxpbTC91/OOzTysPtObJxpPpOkYRkQ87VrQYhtcd62PDF3jdeT4QXPid7te3rnmi/67odF4J1xLHpUoIb1+vZOZYvWB/EaKLbCyDoLkWMyJeSrnx2hOFfFIBk7sQvGmBVbw5VKKKsQfLtBfgM7Er+G632QtUsGxfInbzCa+oQql+ubF2yn1kR81f2JZ0WYVjSklcg4SGVTBD4PwBpbrZtYQPjStBd2sYRuSSICyFlQ8zkn4hFQgvb4OagxSwCPKeKegaWK7YcTweuVt27FrkWW/1ctKs5j3y0fcFOYoRrsmMZe3p1KNTU2iSQLC0rcfT/Ztgz9GTuRC4Nf/2T7GAf4stpTKOQefy39YJMdmSZVCEk3R9UMJoOsNptQL4x2XYOZ3vvq74mVnvrFGWWaI4REBrk3znfrTQpmmC6uszts2yC9NTAy0Rs/dDpanxjodm0gPMxm+qdCtSdG3oU5Mb5FwyfuxSPlEvZuHmZPPEFUl8Vj3TJeIMVoaCPeH9D2Hr7obipAOk59/ykzek810/sIbqK1w1EdHocKDH/UuF/K0h8vQpztGXhcVE5SvX9G/+7zZ6fwWD6OrH2ea2dEdvH4yajbgMyIPxUUZNlCfrUUrsbRKpZ0DlqbC/fGKoqVuYRntda1XtBtfmLJieraAmnQj9dDVNpsqxSN6TXg4DcK3IbOw6fJjrg7EuFUoST9ZIbKajAbI4i0M24OXN55Y+TxrfSOfpKS1P3aXyDArVQo3HOcMn7WE+HuFBMSxLO2N41H0VMQmS8jtgX+fyzagwd5crAU8w0Rh4Tnkl2EZGJVj/J3LskOrIiq4gOozGlyz+jxrwp1zTnisGyaRHW91vuDC9zCSdW+aER4bXLeG2HGN8D9Df8pihlRHgJun5mB1I2mGgDDaVlNQt0rSJsLOK+pTGz+mq2+FUOx0E3o4OVEJDi0IFYTSK3+jNTktojEztzE2ywXTzRqo+M1YDd+xHpUVRtnkvjO57qHbIY4uK/c06vWXxmgIeIX0MI7IUWeon5hpQkGD4pNjYWSyJomtNvPScI/Tf2v7lAZ7hov44nj+agamDIWRgli+I= X-Microsoft-Antispam-Message-Info: SmvDzLfkQoCSQ/zoEXBUex/nIR6V6H2OiQmz1eOu+elmHvzFjlpvDJ1ZyyVZVPHzhCbiJabIUWYi8ZC9ixLX7qRgmkndx4ns9Aii3Km6WOfteII/HqE7I+ZZE2lhmRD8g7U8hVvS5pO0iwhnl9b1NciPwvGUhNuqxXyN2QTrCDufI3oyKasJ9N6k+nYGBcIr X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4218; 6:AsdxBqOErmmUSmjemeU2fZINryTO+pAd8mKgphGrJjT/uwqsuN6Ho8QYYeM2pW6sDMdAL69eR51hrdgleEjUfpPuWXixdzIWms9lJIeiACkb4hFsWibx3MnwdJTy3lpcnA/GtqzKwhZ9wKvAf0vuCAahedmmOq4SCt358cXv/AetasktgLsuD19lAOXofhD0+jmQPiuLCbOclfajsUmMMy8EvQ1zlHO+q5GaoXQf37rlrWGod++evycybkQfH37gpUXSlNvDbftBqcqvX9bO+ZLJsHLM9yvfeo/wZc5Fzxn/XePKGp8e9j/ewsc8V8/YPOn/FyGTFkxSyJwXPCEwsI6CXZA+ZJ0o73z7FCa/3nQeQ72DySbQe93fEkSWbCHhLE3C0l6wazeRDd644fUmYrb3rr7modxneXb/rCnJGcL8IfiKtuoYunhCSh4wOQOyBtdXCzRtBJ84uIXonPI6yg==; 5:CY4ToZZRP9Rh4mRExAqclxmVuvBU1wf+AnfeCpKi/YQqXifULL55C6enZO9Jn/JICTvRLMo88SnRHVxPnO82FG23xFvffomLDUy8u1xh/EECupfx9F721xfHd+Wz49aq0hmUWtJpEbLSBcOrEQQaVWBi6eRYiUfg/vHpUyt15QQ=; 24:0JcIXsy5lak4YawNfVUOk72I45+v8f6P9DgAZm6aJZ/ICuNFWY3tJskvnULw8ev3LdH8w2LZFMVakqPqDh0m3UKgnP9KFgfh3qu3Oz1OKF4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM6PR07MB4218; 7:hOJIeQoNVFwRArnx0mcR6/m3OuTEMK1YHIg/1A2FOrl9Vc+idQsv71bN4pJUwHfhZnqfT04cd2Du3PoDYP9hM/GpWjunIH8hbbCx3uNSgEtZ1UwSbN0UW9Q5uJZmvcH3ZZJBfi4S/duJx1dLcYt8nTaG7/ed1Xyn6CywJRRwt+MNH1EWqW93Tf0vVZR0bvreWMI8KpTRsWfMJtob4vUfGfqsh5qPQxt4Llx1RPjjTdtmGQBduPJm2cmunu+dbG8U X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2018 12:14:36.7510 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 93fd609c-5b5f-479e-d5a8-08d594a57973 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: DM6PR07MB4218 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds APIs for flash access. Signed-off-by: Sudarsana Reddy Kalluru Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed.h | 7 ++ drivers/net/ethernet/qlogic/qed/qed_hsi.h | 7 +- drivers/net/ethernet/qlogic/qed/qed_mcp.c | 121 ++++++++++++++++++++++++++++++ drivers/net/ethernet/qlogic/qed/qed_mcp.h | 34 +++++++++ 4 files changed, 168 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/qlogic/qed/qed.h b/drivers/net/ethernet/qlogic/qed/qed.h index b409499..e07460a 100644 --- a/drivers/net/ethernet/qlogic/qed/qed.h +++ b/drivers/net/ethernet/qlogic/qed/qed.h @@ -81,6 +81,13 @@ enum qed_coalescing_mode { QED_COAL_MODE_ENABLE }; +enum qed_nvm_cmd { + QED_PUT_FILE_BEGIN = DRV_MSG_CODE_NVM_PUT_FILE_BEGIN, + QED_PUT_FILE_DATA = DRV_MSG_CODE_NVM_PUT_FILE_DATA, + QED_NVM_WRITE_NVRAM = DRV_MSG_CODE_NVM_WRITE_NVRAM, + QED_GET_MCP_NVM_RESP = 0xFFFFFF00 +}; + struct qed_eth_cb_ops; struct qed_dev_info; union qed_mcp_protocol_stats; diff --git a/drivers/net/ethernet/qlogic/qed/qed_hsi.h b/drivers/net/ethernet/qlogic/qed/qed_hsi.h index de873d7..ea3cfe9 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_hsi.h +++ b/drivers/net/ethernet/qlogic/qed/qed_hsi.h @@ -12210,8 +12210,11 @@ struct public_drv_mb { #define DRV_MSG_CODE_VF_DISABLED_DONE 0xc0000000 #define DRV_MSG_CODE_CFG_VF_MSIX 0xc0010000 #define DRV_MSG_CODE_CFG_PF_VFS_MSIX 0xc0020000 +#define DRV_MSG_CODE_NVM_PUT_FILE_BEGIN 0x00010000 +#define DRV_MSG_CODE_NVM_PUT_FILE_DATA 0x00020000 #define DRV_MSG_CODE_NVM_GET_FILE_ATT 0x00030000 #define DRV_MSG_CODE_NVM_READ_NVRAM 0x00050000 +#define DRV_MSG_CODE_NVM_WRITE_NVRAM 0x00060000 #define DRV_MSG_CODE_MCP_RESET 0x00090000 #define DRV_MSG_CODE_SET_VERSION 0x000f0000 #define DRV_MSG_CODE_MCP_HALT 0x00100000 @@ -12265,7 +12268,6 @@ struct public_drv_mb { #define DRV_MSG_CODE_FEATURE_SUPPORT 0x00300000 #define DRV_MSG_CODE_GET_MFW_FEATURE_SUPPORT 0x00310000 - #define DRV_MSG_SEQ_NUMBER_MASK 0x0000ffff u32 drv_mb_param; @@ -12377,7 +12379,10 @@ struct public_drv_mb { #define FW_MSG_CODE_DRV_CFG_VF_MSIX_DONE 0xb0010000 #define FW_MSG_CODE_NVM_OK 0x00010000 +#define FW_MSG_CODE_NVM_PUT_FILE_FINISH_OK 0x00400000 +#define FW_MSG_CODE_PHY_OK 0x00110000 #define FW_MSG_CODE_OK 0x00160000 +#define FW_MSG_CODE_ERROR 0x00170000 #define FW_MSG_CODE_OS_WOL_SUPPORTED 0x00800000 #define FW_MSG_CODE_OS_WOL_NOT_SUPPORTED 0x00810000 diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.c b/drivers/net/ethernet/qlogic/qed/qed_mcp.c index 2519e71..ec0d425 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.c +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.c @@ -569,6 +569,31 @@ int qed_mcp_cmd(struct qed_hwfn *p_hwfn, return 0; } +int qed_mcp_nvm_wr_cmd(struct qed_hwfn *p_hwfn, + struct qed_ptt *p_ptt, + u32 cmd, + u32 param, + u32 *o_mcp_resp, + u32 *o_mcp_param, u32 i_txn_size, u32 *i_buf) +{ + struct qed_mcp_mb_params mb_params; + int rc; + + memset(&mb_params, 0, sizeof(mb_params)); + mb_params.cmd = cmd; + mb_params.param = param; + mb_params.p_data_src = i_buf; + mb_params.data_src_size = (u8)i_txn_size; + rc = qed_mcp_cmd_and_union(p_hwfn, p_ptt, &mb_params); + if (rc) + return rc; + + *o_mcp_resp = mb_params.mcp_resp; + *o_mcp_param = mb_params.mcp_param; + + return 0; +} + int qed_mcp_nvm_rd_cmd(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt, u32 cmd, @@ -2261,6 +2286,102 @@ int qed_mcp_nvm_read(struct qed_dev *cdev, u32 addr, u8 *p_buf, u32 len) return rc; } +int qed_mcp_nvm_resp(struct qed_dev *cdev, u8 *p_buf) +{ + struct qed_hwfn *p_hwfn = QED_LEADING_HWFN(cdev); + struct qed_ptt *p_ptt; + + p_ptt = qed_ptt_acquire(p_hwfn); + if (!p_ptt) + return -EBUSY; + + memcpy(p_buf, &cdev->mcp_nvm_resp, sizeof(cdev->mcp_nvm_resp)); + qed_ptt_release(p_hwfn, p_ptt); + + return 0; +} + +int qed_mcp_nvm_put_file_begin(struct qed_dev *cdev, u32 addr) +{ + struct qed_hwfn *p_hwfn = QED_LEADING_HWFN(cdev); + struct qed_ptt *p_ptt; + u32 resp, param; + int rc; + + p_ptt = qed_ptt_acquire(p_hwfn); + if (!p_ptt) + return -EBUSY; + rc = qed_mcp_cmd(p_hwfn, p_ptt, DRV_MSG_CODE_NVM_PUT_FILE_BEGIN, addr, + &resp, ¶m); + cdev->mcp_nvm_resp = resp; + qed_ptt_release(p_hwfn, p_ptt); + + return rc; +} + +int qed_mcp_nvm_write(struct qed_dev *cdev, + u32 cmd, u32 addr, u8 *p_buf, u32 len) +{ + u32 buf_idx = 0, buf_size, nvm_cmd, nvm_offset, resp = 0, param; + struct qed_hwfn *p_hwfn = QED_LEADING_HWFN(cdev); + struct qed_ptt *p_ptt; + int rc = -EINVAL; + + p_ptt = qed_ptt_acquire(p_hwfn); + if (!p_ptt) + return -EBUSY; + + switch (cmd) { + case QED_PUT_FILE_DATA: + nvm_cmd = DRV_MSG_CODE_NVM_PUT_FILE_DATA; + break; + case QED_NVM_WRITE_NVRAM: + nvm_cmd = DRV_MSG_CODE_NVM_WRITE_NVRAM; + break; + default: + DP_NOTICE(p_hwfn, "Invalid nvm write command 0x%x\n", cmd); + rc = -EINVAL; + goto out; + } + + while (buf_idx < len) { + buf_size = min_t(u32, (len - buf_idx), MCP_DRV_NVM_BUF_LEN); + nvm_offset = ((buf_size << DRV_MB_PARAM_NVM_LEN_OFFSET) | + addr) + buf_idx; + rc = qed_mcp_nvm_wr_cmd(p_hwfn, p_ptt, nvm_cmd, nvm_offset, + &resp, ¶m, buf_size, + (u32 *)&p_buf[buf_idx]); + if (rc) { + DP_NOTICE(cdev, "nvm write failed, rc = %d\n", rc); + resp = FW_MSG_CODE_ERROR; + break; + } + + if (resp != FW_MSG_CODE_OK && + resp != FW_MSG_CODE_NVM_OK && + resp != FW_MSG_CODE_NVM_PUT_FILE_FINISH_OK) { + DP_NOTICE(cdev, + "nvm write failed, resp = 0x%08x\n", resp); + rc = -EINVAL; + break; + } + + /* This can be a lengthy process, and it's possible scheduler + * isn't pre-emptable. Sleep a bit to prevent CPU hogging. + */ + if (buf_idx % 0x1000 > (buf_idx + buf_size) % 0x1000) + usleep_range(1000, 2000); + + buf_idx += buf_size; + } + + cdev->mcp_nvm_resp = resp; +out: + qed_ptt_release(p_hwfn, p_ptt); + + return rc; +} + int qed_mcp_bist_register_test(struct qed_hwfn *p_hwfn, struct qed_ptt *p_ptt) { u32 drv_mb_param = 0, rsp, param; diff --git a/drivers/net/ethernet/qlogic/qed/qed_mcp.h b/drivers/net/ethernet/qlogic/qed/qed_mcp.h index 7d33354..8a5c988 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.h +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.h @@ -443,6 +443,40 @@ int qed_mcp_set_led(struct qed_hwfn *p_hwfn, */ int qed_mcp_nvm_read(struct qed_dev *cdev, u32 addr, u8 *p_buf, u32 len); +/** + * @brief Write to nvm + * + * @param cdev + * @param addr - nvm offset + * @param cmd - nvm command + * @param p_buf - nvm write buffer + * @param len - buffer len + * + * @return int - 0 - operation was successful. + */ +int qed_mcp_nvm_write(struct qed_dev *cdev, + u32 cmd, u32 addr, u8 *p_buf, u32 len); + +/** + * @brief Put file begin + * + * @param cdev + * @param addr - nvm offset + * + * @return int - 0 - operation was successful. + */ +int qed_mcp_nvm_put_file_begin(struct qed_dev *cdev, u32 addr); + +/** + * @brief Check latest response + * + * @param cdev + * @param p_buf - nvm write buffer + * + * @return int - 0 - operation was successful. + */ +int qed_mcp_nvm_resp(struct qed_dev *cdev, u8 *p_buf); + struct qed_nvm_image_att { u32 start_addr; u32 length; From patchwork Wed Mar 28 12:14:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudarsana Reddy Kalluru X-Patchwork-Id: 892109 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="azD06/iF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40B6JT3WNGz9s0y for ; Wed, 28 Mar 2018 23:14:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752356AbeC1MOr (ORCPT ); Wed, 28 Mar 2018 08:14:47 -0400 Received: from mail-bn3nam01on0068.outbound.protection.outlook.com ([104.47.33.68]:26704 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751981AbeC1MOn (ORCPT ); Wed, 28 Mar 2018 08:14:43 -0400 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=rlblnfE+RnHEYRkf046PURo4VVfNajMcm+LBt6+3JcE=; b=azD06/iF0pskud1FjhM+I461Ked5CCNPD5tE1q/iwRqRqsafcgBjTUFh9bR9Xrao4aVORHni/XvFIedsylxA/nMYIffNUMNlHapshKofs8ZH6cFIJuwu3vmiT0JTZlQqjwTfxLFmfs2J5Tlw39/8OiT4Sn8wEAIfstwSl0uTKrM= Received: from CO2PR07CA0068.namprd07.prod.outlook.com (2603:10b6:100::36) by BY2PR0701MB2088.namprd07.prod.outlook.com (2a01:111:e400:5335::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10; Wed, 28 Mar 2018 12:14:40 +0000 Received: from BN1AFFO11FD007.protection.gbl (2a01:111:f400:7c10::134) by CO2PR07CA0068.outlook.office365.com (2603:10b6:100::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.631.10 via Frontend Transport; Wed, 28 Mar 2018 12:14:40 +0000 Authentication-Results: spf=fail (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; mellanox.com; dkim=none (message not signed) header.d=none; mellanox.com; dmarc=none action=none header.from=cavium.com; Received-SPF: Fail (protection.outlook.com: domain of cavium.com does not designate 50.232.66.26 as permitted sender) receiver=protection.outlook.com; client-ip=50.232.66.26; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1AFFO11FD007.mail.protection.outlook.com (10.58.52.67) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.527.18 via Frontend Transport; Wed, 28 Mar 2018 12:14:39 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Wed, 28 Mar 2018 05:14:27 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id w2SCEROm007771; Wed, 28 Mar 2018 05:14:27 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id w2SCERC0007770; Wed, 28 Mar 2018 05:14:27 -0700 From: Sudarsana Reddy Kalluru To: CC: , , Subject: [PATCH net-next v3 4/5] qed: Adapter flash update support. Date: Wed, 28 Mar 2018 05:14:22 -0700 Message-ID: <20180328121423.7718-5-sudarsana.kalluru@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> References: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> 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)(39380400002)(396003)(346002)(39850400004)(376002)(2980300002)(1110001)(1109001)(339900001)(199004)(189003)(47776003)(69596002)(80596001)(85426001)(446003)(2351001)(11346002)(76176011)(8936002)(6666003)(476003)(59450400001)(356003)(2616005)(305945005)(51416003)(5660300001)(6916009)(86362001)(54906003)(478600001)(50226002)(8676002)(42186006)(316002)(81156014)(186003)(486005)(15650500001)(81166006)(36756003)(106466001)(1076002)(2906002)(50466002)(4326008)(48376002)(105606002)(26005)(486005)(72206003)(16586007)(87636003)(336012)(126002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR0701MB2088; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Fail; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD007; 1:NDuggemCi+z1aUat0MDW2KA6lwg+KVVjOgRdFpCiJHYVolJVYXb4KAFD+IpNYLZC8uMWqs1jCk4arOfH4I5MF7oGqInJ+lSRoGL8LrBgjpV+MD1Cdzkbb+moq0/RiXyC X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 23df0d15-a808-496e-992d-08d594a57afc X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BY2PR0701MB2088; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2088; 3:5UtPuhGUmbo5tZRoaZlSuFJSlytcp7/gEdX6KohHYuB9LSHnt01QnFtEsXeebDM0uBfPfktG8GacuhSRxFz7p1M/fpJMv9DuGWsH/grYC1uv5o6w2SPjta2RAVrQeq/d/vU+GZALaytj5hogE+iu2/j/3PxDZKzDlz89wKNoyekEoj36Gu/Nxz4YbaVDElwp+Kv4U/l3NT8tV9JpN37mBGHakZ9WLwF8Ik/FO7B/mNr5SKngGZ/HdVVzJPIgDPoCbLUoz8cNVWLYDbVOqSNyOJMQmm2OVoFuLPQBSOw3JG2Xew6iiFepFbrZULqgd+ImdVHp9+uCKZKujEiM+7P3MqPgRMMI+tUnrLHGEvsKbWk=; 25:eotmHLi1mRdWM5uFz1qh3MrPjNgWiFra3TcUJSQcGt28RpK2wZQ0Fq1Ua67EQWQGHRkNDJw7fqZhB324mkQvH/Taznl/jysFQXEs5B0h7EVSfSVYkdnQ7q95OaSeZ8hleGDgGmTeAkwl949lUzarIxG6klP1lLx9RoU5nfeL+RBIt4D+N1vQBoYFaDxcyKuELuse1IPU5vkkrSB/ojQZChLMUwhoiBeEIT5G+bTBOjVgE9ZxtxniRQr/tIUQvqS9kP7B8h4KOXOyOLdUOeGldZbYdgwtGnr0flanI9/WdOr8l1DpL2aklXs8BbnYy+49XoivuzTqOifUEArz8b4cHe3oAbvv8ilEL1cfXPX99M4= X-MS-TrafficTypeDiagnostic: BY2PR0701MB2088: X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2088; 31:OQopYU10pSB6NkGPwrqUsc13Neo5xpKF9baj+insXkbUd4urseeY4XSW008q2VenK0yQhnI9mUBcfKvVZz2EVj/CLDRsrcSJE13A5LL/tP6LBAkVVmpmdU6uELASyJVbaww+GznskdqhNY+ugEz9t4BOz5HZTXJEAd/Im10t15DeXT3Akfh/Xjh854GoNea0XO6GvYomK7a6JpQEv2Bf2tiCcAZLE+B0qn9MUfpb8TM=; 20:CO0iQWmts5ZfbDE2wk4WlaZg0ZPQpdrhuHHgFY4hNzvXYFkum8cYe1pYoJe61qsypQ/i19JtNdr8fHRof1ikZ3oxSPPA8UVKS6cMPi0y8l9m+wbgu+lwgAokRAqIDHfhMQOkfxG4mzgGFV8pCHi2vCHxoboEE3zZtvVzl5N9YJBdu8n71JZwE/T1CnHpaDTlOBZw24yjm4t5QPi6sJVV3uF0riJYoUvb5Y+KldMiIusZLzY17PJNDxlovCmQjq8N/b0yd1mxGfA7zkvR82LtIlVn++nAPxd41sfT4MhKNRQYVNDFsk4pgRj+EMHjeiE0BQHZXlQrpn/vHDT/A9JemOmHoFkzD0xQouo+P0jW4u/0abHZm/Z6LMCldXcbSsUa0sbEYu7SJmS5bVPgIo7+pHNsWo9X7kfM7BzluGc1MJPixPkIc9ExJ3f5XznNyDnFIkZs3iFeDZyKC3fKt36k1VKgcSfkYpktq7NPkzo1Tb7Tx1EQO32t4lhu/TVY5y/s X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(10201501046)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123564045)(6072148)(201708071742011); SRVR:BY2PR0701MB2088; BCL:0; PCL:0; RULEID:; SRVR:BY2PR0701MB2088; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2088; 4:v/LK3deKqZW9FxtGV09KAe0cXWQJS8GhSNGYJuQDOYiACgTa1IHnnyV8ELLh0Eq0fmFtXCqpfORDp7i98J7u9Lg5Ph6ybIFpwSMFSYa818/a4DABEpBXSlQLfoGryn80Ef/3nAnQYtF7dgK/clOt3MDcOkYKLm7dEuyKramy4gBIwQJGhEdiW14pEU4RAYmIPPJtpvHSrHmheOrfEQ/xu5HzegH2qreh3JDoHIFyBVr5rbyC6FMhbRFO8h+EwmESrP2zQRBL+v9/Fxyt8DEHsg== X-Forefront-PRVS: 06259BA5A2 X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2088; 23:+S8Id+vlOz+shXRRVVGUDK83Q149J6GKjPzjdipwjAsASvL7E52Rs3K9Czr9xVp5aHx6Nvy2MoLG8iSmuXRjeKRNGMtQdfRl10cQG/F2DxZ9OwZTCsLrmJ42IW6RubKYgEWWUEwq0laf4+kN2jo5IcDdzNcQzQTvx120nwwOTTpbQ7Q8amH55UHTw8So7QLbAB/TlrIYzCe67PQ73BejU4mPwoQTgvIYhABlQCONke4CvdgoQ4PzMvBzZL2CZko2JOS4pUZ8gfCvxuHpSeA3Y3B4baJhtwt86genM69K87/qo2lzD2ix/PXI2nSotuitnce/GJqSZdGszgGaEK5zaz+P0lI49sicL9k6atwZl3tRKuEICSXkNoTEnDF8kz0n17x1Sn/UAH7XsWQXwRZMvw1nbXoHYpmqakoQpQC3FwmLL/409eSL7K12bfXbUb6jSpdSOI3Blm+uGlgrwq1UWnyG6IZ/ltITQEywhRpsK2uQgIBsSkV4msn9sh67ED3USNgo5FrvWyUHNgrn89T7ig4LfoUTgx9SbsN8w+QMRUoGei/tNm7SyOdSvGi4ui1V4iTidFkt614SIjBvbBv4GK2B7KQwpx5dJJ8fvRaqoTLSFeo7Uha+HHfyzVMN/v7um/9hnr1/qNCr5AfQNT9rZZ6xXWrXRxE2a9BpiynQ6l2j5sA5513UzB3/3djKXls7/31AiVk1gwiJ8vDHToUgGBpsk+aDtVedZ5lRmerpc3w2RHSu0ecDzkFPqZhKsnl+Ch+HVswsbWkM4W6aID15xt91q+Z6mSKnfcpv5dha2vHV4PjGVORtVcXIgk4C7pGWafy4bOyOmNCvQHg/2aD/MbBqBrCXOYCgTmMPc5SOkLnl4dInQlePPcVTSGCBVzOSoZnUYzTft02mNmisj8mBV94RypYt6ZiTdBLCyCyh+gaYHON4OSxo/7GMVJMZKqNFIOkcR+tlNGmrhz/qdG17ogPSHkznYaZbwWs7D7lhF+g8sX/T7hmpOOlL9e+uz40+o+XteaDDQvqbc2aDq3KxQ4iQADNyNAgWv0CL/G7GlKc732KlrOx5YXrs0jl0ty/QNl2FpVSLHP1YXsqjSW+piXed07l36G3fvXER7NpHxcXWpXYnyegWU2AelXu+x9tpIudPVPad0gojMzxYCrDU7dly6MfAIDYCL7eVIbn3cXDPwMfdO0jD4I8aHRxL974ADVHV4oIfHnnPdEwxb4IlN1VFk4tjnrZMb7j0RyPVpq0/3rXBVJCeqs+dHpNUvilM X-Microsoft-Antispam-Message-Info: cbyWjvWgfr3z3MCbp4gO66XIUSlcNu8CJwohO4TDXDIrygP3gvtjcriuQWBWsf0UUzSC6geYCEnsJ4qtOKjkQQ30VgMTjaD0sBltkuqPZ+nImEy/z8WaM9IZ7ddBRQlgKOQ18kCRafghZtRxybCHDYjmn6ypFFKEH+DpkyRYetNEk1ljTTJit8A+hD4o9tuV X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2088; 6:6633M9I/hKFRlR5gU5XVZqkH6MoQV30f+1UleLa5xxXW3X3U7foJVlTbCNfQrYXY+tmGxlFvrmySH0Xzpd3ztG35B2DZftBQlLjN83YsLCvTGovsEFlcTWddRexaWq5JhVVNY2DkodfIaVZKvN5uPwhxpJ2qGbW9z2KYwfgHnFN83uJth9SJ/mFxiSj99zB353oNIf53YAmIEIfEMeKEW2jShZf0la4SW8jIjhk9sIIy9VMvaI4KvdAaFIQNLuL7OaIbr4Hv90h3gIbX6wBkE86NMy49m6zpNqV6NlSQuN1lM4dZUJolQ+cOi+Jc2QbWzqWdm3bA3nYxUdtu6XD2QWIaaPhBVW7jgPKBYP77p+m4VsLZ7Pt8KAw7mW1WBBGIJqG3W4aecfliBmTz3YQl7YyLjTVrXnw0usY8qE8CPQLKQ/TrscQv2u4VNYvddMQkuU0c04CpsFrWrjgluCFHUA==; 5:4XxbiZeIC2Ou7WbuNFACV+Z4l3EWKsdzXkZMUO93LGuxnv1x5DAYLRToYtjF+GBQ9vDafY83YFMKTqd7VECt4jkVXNikxf/jPoDxsYvY4TNSJr5h/zXYQdIaxOxlanaukxyf2Kg9kQ09SXGds8lYDtiCQDKpthCCALbku2WBxLM=; 24:Ew0EK+yncKPhz/6tMiBVHfiY6apCR8A7vP+Ae0SIItjSu7pGzjKGyltyQOeNUZ64AzERSWXeZbJrAFZVACGLMvHA8arl23ELbsDZ5Fjfn/I= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2088; 7:5kbQNINOcQD74Mf2dPym2gw7zkiXVclP1vB8gyZJo40h7HQ+c8yHfVYqNV0XC3jRpQxN5PH7nmWdBqvMG/31GEudFP1Da1GdhgOMdqMpbhbzZCtCCbEue9CxQqeCsMpWWJRKyTGfo0/Aaouf+xTaDbpiwUl5QlUfV251YqS/XujWch3TFAoPj5wAZG49A8hzgH1+F7QRB8tyBN49GiACVNP9SnIrmlnhzDQBBli19QiZTxD+maXfEl3X3SUCMwqg X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2018 12:14:39.3094 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 23df0d15-a808-496e-992d-08d594a57afc 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: BY2PR0701MB2088 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds the required driver support for updating the flash or non volatile memory of the adapter. At highlevel, flash upgrade comprises of reading the flash images from the input file, validating the images and writing them to the respective paritions. Signed-off-by: Sudarsana Reddy Kalluru Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qed/qed_main.c | 338 +++++++++++++++++++++++++++++ include/linux/qed/qed_if.h | 19 ++ 2 files changed, 357 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qed/qed_main.c b/drivers/net/ethernet/qlogic/qed/qed_main.c index 2783288..9854aa9 100644 --- a/drivers/net/ethernet/qlogic/qed/qed_main.c +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -1553,6 +1554,342 @@ static int qed_drain(struct qed_dev *cdev) return 0; } +static u32 qed_nvm_flash_image_access_crc(struct qed_dev *cdev, + struct qed_nvm_image_att *nvm_image, + u32 *crc) +{ + u8 *buf = NULL; + int rc, j; + u32 val; + + /* Allocate a buffer for holding the nvram image */ + buf = kzalloc(nvm_image->length, GFP_KERNEL); + if (!buf) + return -ENOMEM; + + /* Read image into buffer */ + rc = qed_mcp_nvm_read(cdev, nvm_image->start_addr, + buf, nvm_image->length); + if (rc) { + DP_ERR(cdev, "Failed reading image from nvm\n"); + goto out; + } + + /* Convert the buffer into big-endian format (excluding the + * closing 4 bytes of CRC). + */ + for (j = 0; j < nvm_image->length - 4; j += 4) { + val = cpu_to_be32(*(u32 *)&buf[j]); + *(u32 *)&buf[j] = val; + } + + /* Calc CRC for the "actual" image buffer, i.e. not including + * the last 4 CRC bytes. + */ + *crc = (~cpu_to_be32(crc32(0xffffffff, buf, nvm_image->length - 4))); + +out: + kfree(buf); + + return rc; +} + +/* Binary file format - + * /----------------------------------------------------------------------\ + * 0B | 0x4 [command index] | + * 4B | image_type | Options | Number of register settings | + * 8B | Value | + * 12B | Mask | + * 16B | Offset | + * \----------------------------------------------------------------------/ + * There can be several Value-Mask-Offset sets as specified by 'Number of...'. + * Options - 0'b - Calculate & Update CRC for image + */ +static int qed_nvm_flash_image_access(struct qed_dev *cdev, const u8 **data, + bool *check_resp) +{ + struct qed_nvm_image_att nvm_image; + struct qed_hwfn *p_hwfn; + bool is_crc = false; + u32 image_type; + int rc = 0, i; + u16 len; + + *data += 4; + image_type = **data; + p_hwfn = QED_LEADING_HWFN(cdev); + for (i = 0; i < p_hwfn->nvm_info.num_images; i++) + if (image_type == p_hwfn->nvm_info.image_att[i].image_type) + break; + if (i == p_hwfn->nvm_info.num_images) { + DP_ERR(cdev, "Failed to find nvram image of type %08x\n", + image_type); + return -ENOENT; + } + + nvm_image.start_addr = p_hwfn->nvm_info.image_att[i].nvm_start_addr; + nvm_image.length = p_hwfn->nvm_info.image_att[i].len; + + DP_VERBOSE(cdev, NETIF_MSG_DRV, + "Read image %02x; type = %08x; NVM [%08x,...,%08x]\n", + **data, image_type, nvm_image.start_addr, + nvm_image.start_addr + nvm_image.length - 1); + (*data)++; + is_crc = !!(**data & BIT(0)); + (*data)++; + len = *((u16 *)*data); + *data += 2; + if (is_crc) { + u32 crc = 0; + + rc = qed_nvm_flash_image_access_crc(cdev, &nvm_image, &crc); + if (rc) { + DP_ERR(cdev, "Failed calculating CRC, rc = %d\n", rc); + goto exit; + } + + rc = qed_mcp_nvm_write(cdev, QED_NVM_WRITE_NVRAM, + (nvm_image.start_addr + + nvm_image.length - 4), (u8 *)&crc, 4); + if (rc) + DP_ERR(cdev, "Failed writing to %08x, rc = %d\n", + nvm_image.start_addr + nvm_image.length - 4, rc); + goto exit; + } + + /* Iterate over the values for setting */ + while (len) { + u32 offset, mask, value, cur_value; + u8 buf[4]; + + value = *((u32 *)*data); + *data += 4; + mask = *((u32 *)*data); + *data += 4; + offset = *((u32 *)*data); + *data += 4; + + rc = qed_mcp_nvm_read(cdev, nvm_image.start_addr + offset, buf, + 4); + if (rc) { + DP_ERR(cdev, "Failed reading from %08x\n", + nvm_image.start_addr + offset); + goto exit; + } + + cur_value = le32_to_cpu(*((__le32 *)buf)); + DP_VERBOSE(cdev, NETIF_MSG_DRV, + "NVM %08x: %08x -> %08x [Value %08x Mask %08x]\n", + nvm_image.start_addr + offset, cur_value, + (cur_value & ~mask) | (value & mask), value, mask); + value = (value & mask) | (cur_value & ~mask); + rc = qed_mcp_nvm_write(cdev, QED_NVM_WRITE_NVRAM, + nvm_image.start_addr + offset, + (u8 *)&value, 4); + if (rc) { + DP_ERR(cdev, "Failed writing to %08x\n", + nvm_image.start_addr + offset); + goto exit; + } + + len--; + } +exit: + return rc; +} + +/* Binary file format - + * /----------------------------------------------------------------------\ + * 0B | 0x3 [command index] | + * 4B | b'0: check_response? | b'1-31 reserved | + * 8B | File-type | reserved | + * \----------------------------------------------------------------------/ + * Start a new file of the provided type + */ +static int qed_nvm_flash_image_file_start(struct qed_dev *cdev, + const u8 **data, bool *check_resp) +{ + int rc; + + *data += 4; + *check_resp = !!(**data & BIT(0)); + *data += 4; + + DP_VERBOSE(cdev, NETIF_MSG_DRV, + "About to start a new file of type %02x\n", **data); + rc = qed_mcp_nvm_put_file_begin(cdev, **data); + *data += 4; + + return rc; +} + +/* Binary file format - + * /----------------------------------------------------------------------\ + * 0B | 0x2 [command index] | + * 4B | Length in bytes | + * 8B | b'0: check_response? | b'1-31 reserved | + * 12B | Offset in bytes | + * 16B | Data ... | + * \----------------------------------------------------------------------/ + * Write data as part of a file that was previously started. Data should be + * of length equal to that provided in the message + */ +static int qed_nvm_flash_image_file_data(struct qed_dev *cdev, + const u8 **data, bool *check_resp) +{ + u32 offset, len; + int rc; + + *data += 4; + len = *((u32 *)(*data)); + *data += 4; + *check_resp = !!(**data & BIT(0)); + *data += 4; + offset = *((u32 *)(*data)); + *data += 4; + + DP_VERBOSE(cdev, NETIF_MSG_DRV, + "About to write File-data: %08x bytes to offset %08x\n", + len, offset); + + rc = qed_mcp_nvm_write(cdev, QED_PUT_FILE_DATA, offset, + (char *)(*data), len); + *data += len; + + return rc; +} + +/* Binary file format [General header] - + * /----------------------------------------------------------------------\ + * 0B | QED_NVM_SIGNATURE | + * 4B | Length in bytes | + * 8B | Highest command in this batchfile | Reserved | + * \----------------------------------------------------------------------/ + */ +static int qed_nvm_flash_image_validate(struct qed_dev *cdev, + const struct firmware *image, + const u8 **data) +{ + u32 signature, len; + + /* Check minimum size */ + if (image->size < 12) { + DP_ERR(cdev, "Image is too short [%08x]\n", (u32)image->size); + return -EINVAL; + } + + /* Check signature */ + signature = *((u32 *)(*data)); + if (signature != QED_NVM_SIGNATURE) { + DP_ERR(cdev, "Wrong signature '%08x'\n", signature); + return -EINVAL; + } + + *data += 4; + /* Validate internal size equals the image-size */ + len = *((u32 *)(*data)); + if (len != image->size) { + DP_ERR(cdev, "Size mismatch: internal = %08x image = %08x\n", + len, (u32)image->size); + return -EINVAL; + } + + *data += 4; + /* Make sure driver familiar with all commands necessary for this */ + if (*((u16 *)(*data)) >= QED_NVM_FLASH_CMD_NVM_MAX) { + DP_ERR(cdev, "File contains unsupported commands [Need %04x]\n", + *((u16 *)(*data))); + return -EINVAL; + } + + *data += 4; + + return 0; +} + +static int qed_nvm_flash(struct qed_dev *cdev, const char *name) +{ + const struct firmware *image; + const u8 *data, *data_end; + u32 cmd_type; + int rc; + + rc = request_firmware(&image, name, &cdev->pdev->dev); + if (rc) { + DP_ERR(cdev, "Failed to find '%s'\n", name); + return rc; + } + + DP_VERBOSE(cdev, NETIF_MSG_DRV, + "Flashing '%s' - firmware's data at %p, size is %08x\n", + name, image->data, (u32)image->size); + data = image->data; + data_end = data + image->size; + + rc = qed_nvm_flash_image_validate(cdev, image, &data); + if (rc) + goto exit; + + while (data < data_end) { + bool check_resp = false; + + /* Parse the actual command */ + cmd_type = *((u32 *)data); + switch (cmd_type) { + case QED_NVM_FLASH_CMD_FILE_DATA: + rc = qed_nvm_flash_image_file_data(cdev, &data, + &check_resp); + break; + case QED_NVM_FLASH_CMD_FILE_START: + rc = qed_nvm_flash_image_file_start(cdev, &data, + &check_resp); + break; + case QED_NVM_FLASH_CMD_NVM_CHANGE: + rc = qed_nvm_flash_image_access(cdev, &data, + &check_resp); + break; + default: + DP_ERR(cdev, "Unknown command %08x\n", cmd_type); + rc = -EINVAL; + goto exit; + } + + if (rc) { + DP_ERR(cdev, "Command %08x failed\n", cmd_type); + goto exit; + } + + /* Check response if needed */ + if (check_resp) { + u32 mcp_response = 0; + + if (qed_mcp_nvm_resp(cdev, (u8 *)&mcp_response)) { + DP_ERR(cdev, "Failed getting MCP response\n"); + rc = -EINVAL; + goto exit; + } + + switch (mcp_response & FW_MSG_CODE_MASK) { + case FW_MSG_CODE_OK: + case FW_MSG_CODE_NVM_OK: + case FW_MSG_CODE_NVM_PUT_FILE_FINISH_OK: + case FW_MSG_CODE_PHY_OK: + break; + default: + DP_ERR(cdev, "MFW returns error: %08x\n", + mcp_response); + rc = -EINVAL; + goto exit; + } + } + } + +exit: + release_firmware(image); + + return rc; +} + static int qed_nvm_get_image(struct qed_dev *cdev, enum qed_nvm_images type, u8 *buf, u16 len) { @@ -1719,6 +2056,7 @@ static int qed_update_mtu(struct qed_dev *cdev, u16 mtu) .dbg_all_data_size = &qed_dbg_all_data_size, .chain_alloc = &qed_chain_alloc, .chain_free = &qed_chain_free, + .nvm_flash = &qed_nvm_flash, .nvm_get_image = &qed_nvm_get_image, .set_coalesce = &qed_set_coalesce, .set_led = &qed_set_led, diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h index 15e398c..b5b2bc9 100644 --- a/include/linux/qed/qed_if.h +++ b/include/linux/qed/qed_if.h @@ -483,6 +483,15 @@ struct qed_int_info { u8 used_cnt; }; +#define QED_NVM_SIGNATURE 0x12435687 + +enum qed_nvm_flash_cmd { + QED_NVM_FLASH_CMD_FILE_DATA = 0x2, + QED_NVM_FLASH_CMD_FILE_START = 0x3, + QED_NVM_FLASH_CMD_NVM_CHANGE = 0x4, + QED_NVM_FLASH_CMD_NVM_MAX, +}; + struct qed_common_cb_ops { void (*arfs_filter_op)(void *dev, void *fltr, u8 fw_rc); void (*link_update)(void *dev, @@ -658,6 +667,16 @@ struct qed_common_ops { struct qed_chain *p_chain); /** + * @brief nvm_flash - Flash nvm data. + * + * @param cdev + * @param name - file containing the data + * + * @return 0 on success, error otherwise. + */ + int (*nvm_flash)(struct qed_dev *cdev, const char *name); + +/** * @brief nvm_get_image - reads an entire image from nvram * * @param cdev From patchwork Wed Mar 28 12:14:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudarsana Reddy Kalluru X-Patchwork-Id: 892110 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="GL+psm2/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40B6Jc5tp6z9s0y for ; Wed, 28 Mar 2018 23:14:56 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752492AbeC1MOy (ORCPT ); Wed, 28 Mar 2018 08:14:54 -0400 Received: from mail-bl2nam02on0076.outbound.protection.outlook.com ([104.47.38.76]:20926 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752306AbeC1MOp (ORCPT ); Wed, 28 Mar 2018 08:14:45 -0400 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=PlvHUndncrx28MRd9h9+PPiQuuT+THHsM159uQCb8FM=; b=GL+psm2/MlyUknPR9VCFqdQjdaKZXBOUitdWKtZq7wuLClV4g/3fhq3pX+2GXJ7lDx1LqpmaPXFVF1x8wNvDKX0x1jwuZyB4UGdZOHFIo7cUVxNuIY5sepN1z40mzH0Zp+lWtMbh+zHftRUTXP65ACsPrfU6vA3ny5MHn5ME5EM= Received: from CO2PR07CA0079.namprd07.prod.outlook.com (2603:10b6:100::47) by BYAPR07MB4214.namprd07.prod.outlook.com (2603:10b6:a02:be::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.609.10; Wed, 28 Mar 2018 12:14:42 +0000 Received: from BN1AFFO11FD007.protection.gbl (2a01:111:f400:7c10::130) by CO2PR07CA0079.outlook.office365.com (2603:10b6:100::47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.631.10 via Frontend Transport; Wed, 28 Mar 2018 12:14:42 +0000 Authentication-Results: spf=fail (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; mellanox.com; dkim=none (message not signed) header.d=none; mellanox.com; dmarc=none action=none header.from=cavium.com; Received-SPF: Fail (protection.outlook.com: domain of cavium.com does not designate 50.232.66.26 as permitted sender) receiver=protection.outlook.com; client-ip=50.232.66.26; helo=CAEXCH02.caveonetworks.com; Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BN1AFFO11FD007.mail.protection.outlook.com (10.58.52.67) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.20.527.18 via Frontend Transport; Wed, 28 Mar 2018 12:14:42 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Wed, 28 Mar 2018 05:14:27 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id w2SCERGJ007775; Wed, 28 Mar 2018 05:14:27 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id w2SCERNC007774; Wed, 28 Mar 2018 05:14:27 -0700 From: Sudarsana Reddy Kalluru To: CC: , , Subject: [PATCH net-next v3 5/5] qede: Ethtool flash update support. Date: Wed, 28 Mar 2018 05:14:23 -0700 Message-ID: <20180328121423.7718-6-sudarsana.kalluru@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> References: <20180328121423.7718-1-sudarsana.kalluru@cavium.com> 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)(346002)(376002)(39860400002)(396003)(39380400002)(2980300002)(1110001)(1109001)(339900001)(199004)(189003)(15650500001)(446003)(1076002)(486005)(8676002)(106466001)(42186006)(59450400001)(76176011)(316002)(85426001)(486005)(2616005)(16586007)(54906003)(356003)(51416003)(86362001)(336012)(26005)(50466002)(72206003)(69596002)(81156014)(80596001)(50226002)(81166006)(305945005)(11346002)(87636003)(5660300001)(105606002)(186003)(47776003)(2906002)(6916009)(2351001)(8936002)(476003)(6666003)(4326008)(48376002)(36756003)(126002)(478600001)(473944003); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB4214; H:CAEXCH02.caveonetworks.com; FPR:; SPF:Fail; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD007; 1:GyvT5QfsuPowb6JS98jyWdyLh436NF5uWqarDtbv9qjU9eweZY7uwgXopGQ1zlqIP8nFhWKsG6WklfjUJrfm5X1jHFCI7Q8mU2DkhyK1VBFONEEV6CT+oL+2yTWP6UBM X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 69660db6-d54c-4f66-72c2-08d594a57cab X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060); SRVR:BYAPR07MB4214; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 3:s3supm+bGLhZhnCIAIS4xHE/cKt+1AAPUUU0CUmUTbROQ0g0ZkVUlCPEupM8nOr0g7HYuDkWHuGCm/C/u7l/hzHxEHGNbU97TDg0TSrWxkPEBOduspD5m2o5FFAm8Yvudrc1L+W96lLtu2UNmpGZKmsnFFxb/dC4YGDB34NpXS44uGl5FkFntqbP4XpOv9R9xTpZeXP1UJZh2Ae2FDne/5pCb78+2d8W2vok5V0huTlbZpWY3ILmxNjIVB0vzke5vx3jgxZ0ADkP7RoTaKWpeskUTg0KvmKHvCc3kUCuChG/q1I97reoTCexdrO12U5wRyj4KSlqWtioQw6zlZ7UW/jcmxnCdtpYvJ+3bNpCsqI=; 25:ouAV/htZlST41utQyj0qbMcMJXHcZdg1BEdWaVhtUMfp20sysT3v5q1um9cvHoFO/JMEKecvTMGi+4E8/j7ebVq5q7HhU7DM6QGEp5rUKS+aqgSisTH4DhXQgubw3XceCLJKY8f/JherCNCj/Oot+oEK6rWdszTP/T8UN9FUqgjX+wNFpRhlj1BbiDJ+dSzEBFKNlP2hol3f32qEjMlIL/EbpAHy/bxet3CJSGhiyh/ZuHyggarjDJzAiXRF5G+9MLbkgkhi0EyZzQXKZ26RAVxGh4EEqFKKJk2sdSDs4Qj/QJrC2EUePNvpKghUOz7/Jift6ksOd4d+EvF66Wtwcw== X-MS-TrafficTypeDiagnostic: BYAPR07MB4214: X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 31:sMyO2jppZ2wwg072GmBAzwLtenInUYjZQd5/SpqZ+/IKt4vG1aiMQqWQTzFlVSmNH31gj/+79eMVhrNVzZacTcjzq7qICQtfFv+cQrO8KoslhNM6HX54N34mR1C9CrfUtEtA5a/vCkIv+mc2eE+UIDvQbJFPhmAbWTFr++0bEam/CDVdu4mdVGu7JrCsFaW5Q98VcaJkempMiIi5C0esB36pZMwjDmLzwopXt0b5/3w=; 20:qgHb3AX+kQ/LgJZ9TNd17ushYNh3Eu6H/WBH7qGEmqyWcmzpd4kUHFzA6f00CYKha3PHpRnNgaJKSi3/Yh9HEkVvLg+b1aWVHBshFgtdXMrkxKqaaW0kAAnnxS8JmWQHHaVx2Lkq/t84Gx1sojE/FiEk30T7XOeQQpKvSW5rCRDeKNva6ASfCDQyuSbzeRCZ+6FfzZR5WkrUvLZDg/1pAAQ6KQZ/01ATPf+6+aJ66oegtcOFUgwZm/eLljlSW/7qQ4W5/DZsnDPu/RW68cnwadWT9RQaBB6X2ceJcW0W4Y0Ad/mj4LM0XvfJg9iid+hD5LLj4IbK4inUQ2AXrzrIuHk1UYcxchLGeuaMB7ARotujV+7tANERZYGFXVnG5OeUdKh8q045PCCPTZPAXZKip0326RfuQQabM02m33590QlqIPI2OkD15/nrfqdHj2bk5MOyEhMNPuqVb95mEtbb1RI/dXtJmQqYMZzhBcUcJ6mqgAnU2YxYrih8s51ceej/ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231221)(944501327)(52105095)(93006095)(93001095)(3002001)(10201501046)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123558120)(20161123564045)(6072148)(201708071742011); SRVR:BYAPR07MB4214; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB4214; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 4:7G0fd+LGvT+GHfscl3HJsdwe3DG/60/p7WhLC+LP3PEilDpOCow4WnPTldTzh8Qky6mV8EzsWxTsRgzGszrkI+lsEGXiM7yKuhkj3x/eNrtjxS017DUo4uxDvbluxd5AJfZBgdnPIpEOq0nUwaGCcKU/Mg2E8GzucLawrQj4hnFL7qbFFmhbqLPzPl6GA0itIMe+hL+d3hepESpPMmLB4F7tUi7zMGOu3KADxDPGr0jInHIO2igjiEUZpZLSXVZXr1D5uzs51kfRFLYg8KFKmg== X-Forefront-PRVS: 06259BA5A2 X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 23:So9Zn2SIt1yD9YlJi0pe3najqBy8vFCGntQYxiMyPkQdkr93jQXCms+NVrlJA66c0iNkZkg8PdNClMa4GB8mi/IhrlUilVKzwSfJdmoXSuUx5kX3VP015B9a4JL/dZ6DZG3rUyEBjP35BN5x1ONgY+T+hHiTvALtvZVP1R93glvqMSsG+zt8FtAZbOq9k2paSv45Xt/SYB1wYESxuOOHCJQe7pmd77H2b3upvOOFhHKsqVNvIR1INwMMsN/D2dmz7M4TQcubsUIP2Rl0PnfcLSc/18LFfexREdOd15MoARn2ywtWfudCy7b1ARtetnXD2EApVGUIhc/ebkJczkSbL1aYhG7/l/pm6B8sIHsIUC+keO3+Dt91upOuOm4nYBvFTdhLQjfKMEx5Kmbo/JtbEhg569lyU14YX1YaCPv9waWNdx0/OludvusQ3BPKkHMdkJvGWwqsO+YyL5kYbxd4sW+6FsmLvPQBCrScWh6ai9PCYZwuKtLpjVoMfgzPXgQfJczqrNWmcnd8RcSupLHjAzMF3BYdbqSIC2p9+PbL17bpblrD9TUiYTG+UzpOCg/ZwUutXFijVeLu+CeWaAOqMF2V8ce5i6o5VESgf4ERoy2/zrp7t8lpgptlgtP1mDtrAg9EH8B0u/FFHGHGpI7kUZ0sq7G5TN5B//Gm/333X2vXHjcoISVrE2cuw1CZQgHzaotXTFe7u23M0g2hw7OJCne3lLBSFG84zDznw1kbHDJY02YSS3ZREJ751eLUnXn8xrFToVW03v8dgZIh24kVQ2a4np66X3zYSxuO1Ka2M/UmssJuS9PAO7UAlnJRYXPPMGqLCaMy8WjNR635i2pHDYzX1E16a9QdSSGdncnX4ooOtEdzb63P2wxZSweEywfuH1tCetc/kQUdE1UMWjKR70+huhXuqGpEtpMWmZyELpdfo/mwJjRv10TAWjjbnkbPJ8MDD7jUHroo2KFRFXoqxsq9HXiyYSy1b26aLNW7zp/1QpB0VBA1kOIJY6qKhM92IbwnyJWT8JD4NbS5TD+6Oj3Uc502L99Wsss9AbqsBPuQxBlTizBRt21svmYtteaXNap1UPn4mNuCgpnpi3lNTtAGUBW9vTouomCUZzj+BWC2OnqjCPf6Z2sB5pbjbaDcvO7hqSvo+y13IlQMPFSE5W6LG1lOZLCAypmcHTxH2xUnuD8OE7eBF48/HVDN4my4yTRWL1kKlC2a8nKQ05qkWfeFfxoXjzQTctSjjdD+LWf1RoV8VHS0RDg4Aavjyue4XxaDAYpW4ArIwlMe0HAnww== X-Microsoft-Antispam-Message-Info: VtEjfbzN/VriQtshHgESQ9Q1HDXAW1hDBW8aSoT4VCrIFVL+3rMHH5E7vxLxvIpfiR8NR7R5/kRuHCLoMPtlpqqWPzOlioVQufhr01O0XASsCY8QKT4UtgKxcGba+qXsL+z5vQzX7FO55f2CmaWNlwBL3cajYmbZax7C9B2jjdnUKwO53QMGtrYzxz3pVfmS X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 6:76fd+2rTJN+YNoqEyJ7351R+lH4VnMZNlTHjeiySNy+M6Bd8i2kYbm2178xk9zSn322ta35LesD3HUIEwLrT1M6TtwG/0evNtUyidL8Ktuzn0tuGUI2x5N3P1mZ000PP6b6kO1qmxcUlN4hBzo28o62qgVffWINO00x21Tm61Z3NrbG51BLKXVu8ayISXs0bkX2YN8kAiLU83zCngVRvE52YjNh9Iq84TL6G08xFm0hbEL+07nRYqqTiiftGgaFMaVYMvjry8ikyjXjSpwS9NDBxrYTsPpI4mIS1HX0GcJZ9fj7qoRg9rPeuoio587f6rZgXX/4mo7W6ojYlc2kApL5Uh7OfQ66jfpwysu+VIGObCkTLUbtghl4ea8gvcKl2zdQUk7uMR2BdI1gOlChy3WtW0Y43HOsebiI5yXXsJPCs2/Qulk+vyxHSEdAueusyaDT24Afw+rrwfTj6akg6ew==; 5:eZMIjcVEyjqHZV1pF9FydlHgcMKL3snzX0j8T77eAytgwTZIPT7oGRUjA7DCIMNXlGts7iRTx7Xhl7v5IE14PjKwFBt8xKnEgUCv5DEFp9RKDAKxRoEcNJtGE6Khj0yuuGiMZluLKmnHLZix7KKENgeP1sRuFkVkaNwhGF1jxCk=; 24:yUUiWdQo9al52BqmF9J0EV1vtTjdwZj3NRBo1vw4hWrhU/QRFOnHM9rUHXSfz/8EjfHjzVKgUWOsoVidYXn8g880fAuqWVrumRtJvWQzk34= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4214; 7:E38BlRoecY/dPdkuwGw7H7Fs3lsI6E1b/wiDYcHMX+4lukLTYXldlK6iuiWSjplgrSbQS4TPD6Isc1dmYOyYfYqHAPw85/yqZotOE3/8lH3ejlI0mnzif8tLtJgtk7bf8KL2gIMWKrOp1dVuD3kQlmUD8SVkFdPm8FV1i9SQDlXYH5myFL/CtJ3hMTeSjvPRTfboWerrjZ9euvCtKTR3VLG+EYQx/Nx7Tz+BKvC58RZ9h4OfWGBIPENQUsqG+IO1 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2018 12:14:42.1174 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 69660db6-d54c-4f66-72c2-08d594a57cab 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: BYAPR07MB4214 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The patch adds ethtool callback implementation for flash update. Signed-off-by: Sudarsana Reddy Kalluru Signed-off-by: Ariel Elior --- drivers/net/ethernet/qlogic/qede/qede_ethtool.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c index 4ca3847..ecbf1de 100644 --- a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c +++ b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c @@ -699,6 +699,14 @@ static u32 qede_get_link(struct net_device *dev) return current_link.link_up; } +static int qede_flash_device(struct net_device *dev, + struct ethtool_flash *flash) +{ + struct qede_dev *edev = netdev_priv(dev); + + return edev->ops->common->nvm_flash(edev->cdev, flash->data); +} + static int qede_get_coalesce(struct net_device *dev, struct ethtool_coalesce *coal) { @@ -1806,6 +1814,7 @@ static int qede_set_eee(struct net_device *dev, struct ethtool_eee *edata) .get_tunable = qede_get_tunable, .set_tunable = qede_set_tunable, + .flash_device = qede_flash_device, }; static const struct ethtool_ops qede_vf_ethtool_ops = {