From patchwork Fri Jul 6 18:27:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 940672 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="QUncIPEa"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41Mjr374Qlz9s7T for ; Sat, 7 Jul 2018 04:27:15 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934344AbeGFS1N (ORCPT ); Fri, 6 Jul 2018 14:27:13 -0400 Received: from mail-dm3nam03on0067.outbound.protection.outlook.com ([104.47.41.67]:32648 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934100AbeGFS1M (ORCPT ); Fri, 6 Jul 2018 14:27:12 -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:X-MS-Exchange-SenderADCheck; bh=3AlXcNzHxW8QkAVCTMcQqV0O/L/0zlW8xeTT2u04W4c=; b=QUncIPEaR62c0qpw4LaZ/oFIhlYmJwyO7Ma2Cx00tdfEE0CBU7A6raIHs1wDEee2vAo9+SlSBPQI4k+lkdoJ6XgC9Yp5gClUDG1CFhu6lSV4V/ygvBHumeD77Q5Rzq+EZO3PpXxD5Yxe/9cCz4M72zXgQ9uf86d/P4+h9IJa3ng= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.155) by BN6PR07MB2819.namprd07.prod.outlook.com (2603:10b6:404:40::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.930.19; Fri, 6 Jul 2018 18:27:10 +0000 Date: Fri, 6 Jul 2018 11:27:07 -0700 From: Felix Manlunas To: davem@davemloft.net Cc: netdev@vger.kernel.org, raghu.vatsavayi@cavium.com, derek.chickles@cavium.com, satananda.burla@cavium.com, ricardo.farrington@cavium.com, felix.manlunas@cavium.com Subject: [PATCH V2 net-next] liquidio: fix kernel panic when NIC firmware is older than 1.7.2 Message-ID: <20180706182707.GA1720@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.155] X-ClientProxiedBy: CY4PR1101CA0010.namprd11.prod.outlook.com (2603:10b6:910:15::20) To BN6PR07MB2819.namprd07.prod.outlook.com (2603:10b6:404:40::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 491a5abb-ed36-4545-c275-08d5e36e168b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600053)(711020)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020); SRVR:BN6PR07MB2819; X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB2819; 3:OEoyHI7CcSS8mswARG3/qoT7qc3baXRux79E9woxSeR46zrAKQUva8ICO5qxdS5MrPbdHKp/peJmZ0XnC8c8DcjNEwdsqXHnDj/rsNLR/KhpaZ4nzCg922Nk0USDxcLfPMK+/COtU5KhtMZa7imRk0yA+dtKgsC8h5VuLy+g7II4VDpGWSLr4i9vPwF04cV8hqgnViaR0gNOyZzDCQcanqWW+r4kIGxBoSI0pQDDSPDmj3qYprLpB17K021RcZr4; 25:w9LBkcEigNDgbZKwKe8XVUzyJzuqvtFR76421QH4BOROw3sFv7svpnPTgGhkJFoFe4neTgHE8ybVQh2cOoUNuUpBTes/aILk3Nbfjno34817msfDGtRHNxitUosPilxy8Env/jWIxFCmKZABMul0D3drPAiGznUm9Zk1PEvZkPLrgkL/+FV5dDA5zpYFA3Lf1NOIQ+EjLb0sHuz8u3ce92f8+KJyTQGthZx7LumQUYiOHtFnwhC64OeNVvobLLJEuUjRzU8RNxC5h89IHlpYao7ezLUye4bqVPf2UXsPzCGg9uhG5vJGFnp2lEbbMXhPf3YC4c5DOjoQUqo1/UkGJQ==; 31:t7LlwYIkHUtQYBmshwBORQXUQuTPHMFHDkbmL3D+aIl55SHz5IiZlVGxzEYcLpDgFiayoE6JDPVsMwpHY2OODdcB7yeW/+MnaFKPxTmp2XM4UA4jVUQOzi/p7bdOAlp1oq280+R13TKjcbuJKfkABrw7y33OMZjHNWeXxCAxMj/YIrtYZX6YzjYHU9IChQEfbqOm0rhRC4mec2I9gl1PgOUi84JO54Mm+oM7BkQoKC8= X-MS-TrafficTypeDiagnostic: BN6PR07MB2819: X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB2819; 20:ljBLvbIu8LkOVZW22CT8wOvEq4l4gcxC27PwqNeIFvjM27ChACVKqghCXnjw1RzR9DkJAYTB7nxfU4aSoFWDiJ6YeusvBIutkoNIttqnlhrtTbW6f+oTriDYdwIgQr7RA1Vq7X2zsc9pv2emFET4kMsbxOSRH3wkMO4fsbPkP2szO9ZVo7LvhgrW4IEZct0W1QwPsFUbwN36aXKpbyZMsJe83bIhEFvNrqebVLQThwKJWfxqVwvT5EftjbKMd+KMQVSpS9KKniZXsq51Aqz5WlRGW+2W+Z0opcIuKeXbPiAYhmX3q+MnofcDghyzQ1l8tlvdBjg9VUIaf9gXGtALFBl6iRhnIt6dDAk1bJSiY2HD3UHAe1HyhN53/FEkTWLLK66XD0ctiMDFf7ag1Ehgvu+WsvCpa4ssaqsAlfNRAfkucxcDlgwrk3uWtU/pWGLH57VDR4G1Fvuu5wigE4KnNfLGVtlaFDbGnaS+dOYt/Jsx5FPh3+LlAN7d0bl2wFJA; 4:N9YNg9VBldylCC3jyY1gt+Q+YVoC/OQaPjM55gdUsdsjCKWHmNPOo9iMG28JXHqpjW8vpyI4jcnNpOljdovxhxN2Abl6QBkQE/5Mi+9li0jKQWSBH+Xsm7VgpLBPYzXk+lMaVUB46Awy21UJ3PL7f46C4SclemHuc0qsGRBqU+KPP0FpXDL5Ko5IgTdc/pd1tqgRfeO6ZxzvfpOcMRBVXH7weeQg1A7yziCWApPcLM9d4cqGKrBe6wdSjoj1/CQJ0pcc/4QlM45NLBOR2Kd1b9SRzGu0QWQKTG963iTHbjisHgtI+/egFmAt+uTW1oi2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(3002001)(10201501046)(3231254)(944501410)(52105095)(149027)(150027)(6041310)(20161123564045)(20161123558120)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:BN6PR07MB2819; BCL:0; PCL:0; RULEID:; SRVR:BN6PR07MB2819; X-Forefront-PRVS: 0725D9E8D0 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(376002)(346002)(136003)(366004)(39860400002)(396003)(54534003)(189003)(199004)(76506005)(33656002)(6496006)(68736007)(2906002)(2351001)(8936002)(8676002)(23726003)(3846002)(81166006)(7736002)(97736004)(52116002)(81156014)(386003)(6486002)(1076002)(47776003)(2361001)(26005)(305945005)(6116002)(66066001)(186003)(16526019)(16586007)(106356001)(486006)(105586002)(86362001)(478600001)(6666003)(6916009)(316002)(476003)(44832011)(72206003)(25786009)(50466002)(4326008)(5660300001)(58126008)(53936002)(107886003)(956004)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN6PR07MB2819; H:localhost; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB2819; 23:FrbkYP58TGeZYlanPS82qECc7kIMPHfO5h+PUIPEd0LYjeuMoYyjHVvLv+5yoPKw3A9yDbSLVftq80lxGOBYlZ33GXXGdoBg8Q5T5oFPlT707MxZT++gw7RdQ7EDeTLog8lOkcy1FblV1crMUFsWEBIcydFEO/kFQKtjpq5nDXtkPGpmLDxkfHEpyhICbwmSrdbjSRh895jma/CkACB1F3MibaRCFw7915UbYLsaooUu3svNBauwLluWgFAR697YQfapAh05elYnMxjvZg3uY1HQrkB2t4DT6F2wjs5/qp0lN1zhMDBY9GuWEwlNqnZOX61CsG8Gw5YATddugg30FvKnxgcd+dKivCHEiv0mPqA7lul/cHgSyY/w5n75vkT+rNJ3waBgtMUYSbhCr59T4/3iNeG9BWaGwhYwkJjBa7xCoiSFwkW1CkpIJ69X2SXdsnLkoEIBbHe+4D4DS6ZBD1CJaAAbMMRipCcQECiDVHUnm+8NBUHcdydndAb/m+wzmQDWMwrPI2ptqC+VlrIOaBOQyDWw0Z3RSg+harp6mEVsleNkgoxJlghynLH4n+6B8d9k3hsOMayOjNsvsMIoSO19/V7eTmw8FEm483C70NR3RfbZe2BF5BOD7f7P0QIjNKGVVccXmoIjpgywyqDbiqgugQZSkmafImG8CShhWp4YPZBIRzp2pvC3ttzWXjQPTKtVUxdF4ZNsa3XIccxlQBva6jp0a/F7yMlsvUZSprXiz7FzM5AhdZ+0SSgqAuykLo9ZikJJdrqu3387auBQiKyvPAn8wdiJ90kYtxNQr9CqRbYYLba59bXCeqQfwGT6zZJ2CaTcQa924gYYeqX+D0bDljFxN0Zma1hj9fAoY+CxNSDL0XpYvzko8lIAceJFqGkXPr792j6fSEB7OsKxW5Rnm9V8gwAvnH3F2RHUvqwaHFawh3a6vJdczN8fmpfaPhmrX+3+m6rpFOxzYMFzYIR+Ls2ZvNmnWYuZb5Sh9eGrlXv3hXum72GFok9G6yDOVve6vEDSft1vStBPXeseVu1WhEMzDiT+TI+P2TW3a7Vp31+dSmQ1RrF6Hi4iRIRgAiPuSFP9j3JSC1l4agwPyTfoEZo7u/dwvka1tMSU62gCy2nATilf5FvpEJcGvnkPBWhayy92YeM7GxWu2lMUswO8tOYEtBAdDUhBhqCHpPvsGvPPaJR3ZN2QS1YlmQweO0rPbmunN/0DYl/KdU8qfS5iHODNFBVr4hzzd/JJ1WnoqawK6YAyHhQDs31ZgVvi X-Microsoft-Antispam-Message-Info: WtMCGOhuEFBT/DvViGTLp7yclmJpIfezxwPvgD02CuD22VLIbf+blHypGOOCtNiMd6stwYtVpEomC8zJw9KEJZsfakhMoCfU4DOwILSCDq1JMrxgaNUckd1mHlR4PedAPpvf1cHN9QXxRgYgHWmh/PYa0j3EpUHcmdzzOwQu7wvA5CWOoIlP0mq4G6sMlHeSUrQr1O2+uVazgQAhVOkxxwGdT8mrciIUtHUgNDJKH0ceA39emMoBOyYrWrP0dEsIndI2PZ3Zbc8sACHHCR9nhbV6plUkO6ID11EBSBKFyE4XSvqN+LXAhnM5qwdfD2FTAsUrH/gsskr2Gp+fkxX6h+7Vrqk9JtrXaccDNphkh9Y= X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB2819; 6:l1Yc/i98cy0HwcI0kG9DpatLcwaefDOIlkJqb48MoXyS9w4IZmj59IjGmco6qsDBhhGk+pdrTALC6thus+XRRwXCrIwK4nfjUeXRRRwLqbc6gv1yW6mge0R6BCFYRL7nA/17BYvi2Gp9G05Qp5e7VoeAZ92vZnZ2WpoZGE2rMhSFMPdP2xzzhbRPTOBMxgGu5AQJcehJGIx6iZCWrluCRuy54S5C1p2ZHVMxKtrFWuL8RmAyCsAZzY1E36K/YAviquab26Nd0ueEu8Q08/nODSjeupFCXU25d50edbMD1IKOzttO/0trfZMgt8lkmsCrl8gPphxunecSX4Pg4iTkzMEacoKL0YgxxXPSkC3iyOwvjE/jDa14GpmCpX9i01GExwyaZqCEYLqFYqBITG8CrK/8bEtWqtT3UNlhAiD5Xb8mymc83ZceXthynFEUA22P7w/LAW4KrioEMnFVcSnk/g==; 5:ATbV+BCpnAJdob1TOBnoEcTMxJOIPMbPRU+6QJjl8cimiBe6uBNTz5szh8m3uKycBE3ncR4xGYq4NvjwUiz2igsD0xTd+nvAkKqnxWl15Bbj8Kn7DUUhjFWCZlsmKFCGxM6XWshHMN9JnaTuDPGo8FHkjFihsArQhdx5573FEBM=; 24:V/3mu90wf+/tZSKzleODaWG1yKDXJLFgM1PWXvvFBxDH84BCqEs5VsHF5I0ouJX02PqRXYqzzA64VwEBZikh7FzlC8CmwBgmWPlocZU2PNM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN6PR07MB2819; 7:fkhhUTz8fGL0CzPyFUsaWWeDbskcCgjClOb0Q4uhK2Wx538KSE/I/IS1jIcwdHkmNZu06diIlrEJnGBrAtYrd6wSuMc92xXQEN8b7lF4oZixnE3QxbtZgG9EtZM2NMbdIrqNRL1DByzQWNTPlnhZRE49pRv/nVkn7UYoW1syeUfEVBpe1QB4+B1oMSkn/joXEuC3URx6KlCD9Dm2ipoEaIDc7GbPadb9VdAEmkHHanT+DYQP2hXr054OA52gaoaP X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jul 2018 18:27:10.5017 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 491a5abb-ed36-4545-c275-08d5e36e168b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR07MB2819 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Rick Farrington Pre-1.7.2 NIC firmware does not support (and does not respond to) the "get speed" command which is sent by the 1.7.2 driver (for CN23XX-225 cards only) during modprobe. Due to a bug in older firmware (with respect to unknown commands), this unsupported command causes a cascade of errors that ends in a kernel panic. Fix it by making the sending of the "get speed" command conditional on the firmware version. Signed-off-by: Rick Farrington Signed-off-by: Felix Manlunas --- Patch Change Log: V1 -> V2: * In the if-statement that checks the firmware version, replace the boolean expression that calls strcmp() (which is not suitable when the firmware micro version has more than one digit) with a boolean expression that works in all cases. * In the patch description, specify which types of liquidio cards are afffected. drivers/net/ethernet/cavium/liquidio/lio_main.c | 26 ++++++++++++++++++++-- .../net/ethernet/cavium/liquidio/octeon_device.h | 9 ++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 7cb4e75..ebda6ef 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -3299,7 +3299,9 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) { struct lio *lio = NULL; struct net_device *netdev; - u8 mac[6], i, j, *fw_ver; + u8 mac[6], i, j, *fw_ver, *micro_ver; + unsigned long micro; + u32 cur_ver; struct octeon_soft_command *sc; struct liquidio_if_cfg_context *ctx; struct liquidio_if_cfg_resp *resp; @@ -3429,6 +3431,14 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) fw_ver); } + /* extract micro version field; point past '..' */ + micro_ver = fw_ver + strlen(LIQUIDIO_BASE_VERSION) + 1; + if (kstrtoul(micro_ver, 10, µ) != 0) + micro = 0; + octeon_dev->fw_info.ver.maj = LIQUIDIO_BASE_MAJOR_VERSION; + octeon_dev->fw_info.ver.min = LIQUIDIO_BASE_MINOR_VERSION; + octeon_dev->fw_info.ver.rev = micro; + octeon_swap_8B_data((u64 *)(&resp->cfg_info), (sizeof(struct liquidio_if_cfg_info)) >> 3); @@ -3671,7 +3681,19 @@ static int setup_nic_devices(struct octeon_device *octeon_dev) OCTEON_CN2350_25GB_SUBSYS_ID || octeon_dev->subsystem_id == OCTEON_CN2360_25GB_SUBSYS_ID) { - liquidio_get_speed(lio); + cur_ver = OCT_FW_VER(octeon_dev->fw_info.ver.maj, + octeon_dev->fw_info.ver.min, + octeon_dev->fw_info.ver.rev); + + /* speed control unsupported in f/w older than 1.7.2 */ + if (cur_ver < OCT_FW_VER(1, 7, 2)) { + dev_info(&octeon_dev->pci_dev->dev, + "speed setting not supported by f/w."); + octeon_dev->speed_setting = 25; + octeon_dev->no_speed_setting = 1; + } else { + liquidio_get_speed(lio); + } if (octeon_dev->speed_setting == 0) { octeon_dev->speed_setting = 25; diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.h b/drivers/net/ethernet/cavium/liquidio/octeon_device.h index 94a4ed88d..d99ca6b 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.h @@ -288,8 +288,17 @@ struct oct_fw_info { */ u32 app_mode; char liquidio_firmware_version[32]; + /* Fields extracted from legacy string 'liquidio_firmware_version' */ + struct { + u8 maj; + u8 min; + u8 rev; + } ver; }; +#define OCT_FW_VER(maj, min, rev) \ + (((u32)(maj) << 16) | ((u32)(min) << 8) | ((u32)(rev))) + /* wrappers around work structs */ struct cavium_wk { struct delayed_work work;