From patchwork Sat Sep 23 00:12:43 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 817741 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="JiRsSN6y"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xzW5q19bLz9t16 for ; Sat, 23 Sep 2017 10:13:19 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752158AbdIWAMv (ORCPT ); Fri, 22 Sep 2017 20:12:51 -0400 Received: from mail-dm3nam03on0043.outbound.protection.outlook.com ([104.47.41.43]:10627 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751845AbdIWAMu (ORCPT ); Fri, 22 Sep 2017 20:12:50 -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=ZSqSPgWXjX6IlQwKmuNHyzZLhC+158uztgCzxYj1VQw=; b=JiRsSN6yk6hZknfxjpWndNTLaFFm8bQjRlEC+d4vXCkFiVFmYtt6UwJ0pP1Z50TU3xuvn3s8Fx4aDaC91kh0KUDjrXb2UyLJYizlnlpan2W2rR/GnbWW84MaNoSx/gLp+IeKElAPM/rgHx157x1vgxVq9a6eZ1m8xzkJwnZKWwQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.156) by MWHPR07MB3181.namprd07.prod.outlook.com (10.172.96.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Sat, 23 Sep 2017 00:12:46 +0000 Date: Fri, 22 Sep 2017 17:12:43 -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 Subject: [PATCH net-next 1/3] liquidio: allow override of firmware present in flash Message-ID: <20170923001243.GA1485@felix-thinkpad.cavium.com> References: <20170923001206.GA1458@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20170923001206.GA1458@felix-thinkpad.cavium.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: MWHPR04CA0087.namprd04.prod.outlook.com (10.174.173.28) To MWHPR07MB3181.namprd07.prod.outlook.com (10.172.96.139) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9e4e164e-8444-4bfe-a00e-08d50217d1a6 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:MWHPR07MB3181; X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3181; 3:2v00CWsjCgKolHhunanXIFe1v7yVoYBc+eQFUo/XDDHVhSrOic7KYXJUMBUoJGi+0++aWV4NnkAis78qDPFkoHxoGfXHbTl4XnvbCBkSggjozIdkFtUZ4t4EU5tTYNLRIt5aAIGlMVmWeeEspX75CfYHw4EywdfopCwOnQAniOJcqhOLDZdqw7X7p3n4oj5fNJ4VkmHSyh42m3mS7cuBzoASARW1F13o6EP7hdOeT8FZiNq5XKINL+N7q+ZerAY5; 25:SYliZFp0pZ8L9JxyAsw+W+wF9/A+i6iEXi/r4oARIchr4CkIii3ABdiKH/2cLi11LYy6tGoPSXdgcE7ok8RhluGprsfOhX3fI3kEhG3VDAowJtv/906p0WLs+oYGs8j+1K0JvNDm37evmyfxjJfBuoTZPISZErDznY0oFFSYZmwORBrnISU3Uo1xfipTSDPMg2L/7vkY4osrilNF4X4O12W5KGrgu0itj6L4LOOXZ265UBOrcbvOW2L1bx4VsPBA83iTlcOj+daNrMYxTktqa7ioNbfHApH5gRgUrxpeWY3STk89plGNwmqROVywXuZClknViAf+H/HKCH0emdED5g==; 31:8+S3M8lB+wQTRUd33ZvLkbICos417CCKwR/NeMThbIbETYhrScpM+LR+kupoXY50niAu8nYVzHlYFDaB3NkGWyaeq64xV044Ovb138B5WBQvPxdUOWEKmcYCFIEUQSnI2wJu05EqbQ/7ng3ha9HnKfRjx5yaskBikbuKL2q42vBbbbl5E6BYCPa932T6Rq0bvzp9DRvOeqJvPx8jea22T3jQQwHVAn7deHxBiJQaijw= X-MS-TrafficTypeDiagnostic: MWHPR07MB3181: X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3181; 20:9zXjLG5A+Hfj0tc5N2e17PZJfS9qK/JjuV5oH4r/iV522F3Nrvpoz2W18jHEm04aaz0esP0dqacf/cXa4YT7Fbg6Cybvr5xVapr14/xDfDGxuQEqY+q2JKu2pElBbK/EnYEu3mwQ3mxUeh5AiEToJtfWhVBD1IFcJ1xduXG/GK28F1/XQ3hz5YQTBmdUsZgHZBcTHhzgrjaq0md549U6/fnB8d08I+H8AIcpxATfqk4b3D6cNcTZPabdmYcpXAzNXHf0lo4s+rhR/ArKNZPjOTH+gBU0z/Q4wzXbsfWc8EUZcUzBULtia3jdOK2D7hgtJupH63qxcT+9YSTvQt/trOwMAmYKW34lZGSFiwmi4Aiei5oqHMEGkG0XjHBUijR9Ep9w1OBB5zTcdv8hxtK7uhjE4DeWC3v8mcLLzR8fBg0DNH5WrfJwwdjGcPFD8mVz84jqY/1QR59B2bfwy3G1V0nuLRA233FbP9Q1MJC+trQbLgOJGa5d36VUyeeoi129; 4:xVMVr7UEQ92RIQ7AhsRe66b62gaTUH6W/yGtZYB3eSjSzdfE0aurG8VW/QCCfCNba5L92JJZ0vuF/ARcap8xWLz3SLPuay/9tKCtphj1i2V7wYZd58E8+fZQ92UyFKtOm8KGZh0zuIStNynhtuyipPq1qEv3pqmHJJTCOsiYEaHuqWqskBANJKQTAzHXeQBgOZ064yAVcmaNBmx5ZdDHP5pNV7UqtwmffNiLBQT6xP85w8Wf1YNdwLcZ2jSBarT9 X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(100000703101)(100105400095)(6041248)(20161123558100)(20161123555025)(20161123562025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:MWHPR07MB3181; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:MWHPR07MB3181; X-Forefront-PRVS: 0439571D1D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(6009001)(376002)(346002)(199003)(189002)(76176999)(6666003)(189998001)(6486002)(83506001)(50466002)(2361001)(47776003)(2351001)(105586002)(106356001)(2906002)(76506005)(16586007)(86362001)(58126008)(66066001)(33656002)(68736007)(316002)(16526017)(107886003)(4326008)(101416001)(478600001)(7736002)(5660300001)(54356999)(8676002)(97736004)(1076002)(50986999)(3846002)(72206003)(6916009)(81166006)(8936002)(25786009)(2950100002)(6116002)(6496005)(23726003)(81156014)(53936002)(305945005)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR07MB3181; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3181; 23:x5NR5kDHU9y4DFubjvQp7y3bKW61c2OvmEjFerinWwCHZlYP1PSThhT93aIEfbclzeBXq4X7Lbi5VzE5YbncTgiJrWB4KXICvl/20ygWe4KahZ7IfXivtRhNJL3PEWb7VLvIeZgD7IF/tQROKrMjfPld3nBduktue+ek8XPd+2qb9s5oZdxiHWZbbEZYi35lFN7y0lRpQqDpoO8nFVpNJsV13OQkR1e5nt8/aZCCMQUox6pU/RwNGhITqForr8R/lLLQI2z12Edw9ZxS7QrbOpcaUIWn9lyivmWEqmY0zkLs6VAL62TpZ/QdyKEHdMMsdHsJ6lFRvtvKFuOtaNY9agDlMA7j0G4Xof0Re6dNTVWOHuPoFnTq2RiVKNM5WC6bjJUhuldURD9TyNKvuHIN2bed212bOASfwlPkUi4D6N+bqjwQt1r/CfoGuX21d7AdLwbMRvc7Q6qpWBOz6iEwnqgkbH5YuWotD7/u5TCmuEOLgppKla0adMp1QaGT+X1+UOR8fq79VvKrwytZO9tF6nAFxF6R+UI9CWJYqj2hQHIzWQDD5uB1L3iEAnKrTcAHnuLs77pmQJT4svN5FgCU6KScQvwhoY9toJFFsT9uA5tCKYV6izBJ+2AP0HmJPyBnmVqPo/QTrjf1oA/ej15/1VoDPRzgDw/4FHGIfEXk/NfSAEFEGLij8W+gQt3XyimlTkM4ua02rNXOCVJyPaCb6jgSYQ57vA36ETXZfqrmE8jg+TB7JCeDp4+QfOLgKyLiuLDjOGSYBYh62G1UEH3QMahv+g+5Qc6SOY+svqGn11ld+pVESLmBOMRSpfdTs0brCiEBz5osmYiRzncriKg1xQk+XF20/VQvDtO0207PytOw1D55NZlKoIIAcfidJnZNFMpTlCHC5gu6I/Kwz21DPa0DJt1RDrDa/6p9LN6r9Dpo4dLIfV7mqC1i4ckfLlKwAZ7ZZiXciVAAnbSIl2DB13/i97TmkLytB5WhUGJGwQxllBWs0RZZblqe9a1DAozAHUuemvvseYYnvyz8BWz85LryB8Kmkq7QzJTMv4f0OY51Gvfs8/34dfOIquzBN9LCGcPvFGTXRpLwLfkLX0yOWC9n/k+jX8MdCUKbSbkRI4RxgRpQ4x6PT4bVYZ7//t07M9rMDUZO/3DbNvi+LtqhP1hpfx2ExwLWvKD/aMRVIKjOOLry7qd0yU4eCQ+xnASh X-Microsoft-Exchange-Diagnostics: 1; MWHPR07MB3181; 6:gvLgTV3g1SqirtUAMZBNl+cgqJ0iRaKmM7zvZI19b+/skqhw8US0jzloUp5cI58B1N5w7JRlMmctjqHV/WOy8RenMDCXTpIt5X7Mmi87THkxTQDz03hKcN4YWYFi8Ys0rn8dLNakGoMTQTUTHG4BFc5l9XczmFZYuaLp+vB3hHe8ZLgIFzUmjEkzLUv1isqBd2uYFPVB8sryCz1xcWt8hgJYXPtr6Ll/y8MY1epHeqv4fBeYNTmyQwn5IgNG3pIYxovMrC1I4hXaLLKbaqBMI5eTZgpaF6gofinYQ6FRwA5W/y1gckXKlqZkt5lZOv0kxbvW+lsGgMjYRTo0wEL6Uw==; 5:UPrSlQooeliaSGywp6bJ6G2LowEFRnEIRDqC1PLVXNWQ4EuiubGblValF14253+Ne2SRRhGGciBGycmwWinGjZiWdyX0S9uD1ckYd/qomp2TAe8z/GAFNu6EC/qKYoVs2Ng7Gn2Nu1jWObyUSUFKrA==; 24:3RnooTAVT4x+YKQ/o+XTaNHMD6pO7kDmP7prOplAh7yhnpv87xDY2YY2Qxw10ZvjEad7YusxBzy1GXBgZgJlGrP7yEXbQFjIFgJMaM3cJJE=; 7:UXtclTI3p+yS+al7Vd3LuSqMBwvBDbwyGrKANe8ZIrPB41XuCilBEUZpVNQ1Q8UuIaJI8y+npbnAW7QN09nU0SDD6Qu9J6DbSkL4C9/RswRPAkq15e57hFNttCNv/yuOYJ88SjAIoRQJJsD1P7Slk+BizV7xyPtWcyfz9EM7uWQsJnRFCFjnjyoBmOj4Vt7ja7/aaz8YaPt6wswU/tVYVKBwY1q+3QZu8OchFQSwKs0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2017 00:12:46.6560 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3181 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Rick Farrington Signed-off-by: Rick Farrington Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_main.c | 68 ++++++++++++++-------- .../net/ethernet/cavium/liquidio/liquidio_image.h | 1 + .../net/ethernet/cavium/liquidio/octeon_device.c | 11 +++- .../net/ethernet/cavium/liquidio/octeon_device.h | 10 ++++ 4 files changed, 64 insertions(+), 26 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index e7f5494..ce08f71 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -59,9 +59,9 @@ module_param(debug, int, 0644); MODULE_PARM_DESC(debug, "NETIF_MSG debug bits"); -static char fw_type[LIO_MAX_FW_TYPE_LEN] = LIO_FW_NAME_TYPE_NIC; +static char fw_type[LIO_MAX_FW_TYPE_LEN] = LIO_FW_NAME_TYPE_AUTO; module_param_string(fw_type, fw_type, sizeof(fw_type), 0444); -MODULE_PARM_DESC(fw_type, "Type of firmware to be loaded. Default \"nic\". Use \"none\" to load firmware from flash."); +MODULE_PARM_DESC(fw_type, "Type of firmware to be loaded (default is \"auto\"), which uses firmware in flash, if present, else loads \"nic\"."); static u32 console_bitmask; module_param(console_bitmask, int, 0644); @@ -1115,10 +1115,10 @@ static int liquidio_watchdog(void *param) return 0; } -static bool fw_type_is_none(void) +static bool fw_type_is_auto(void) { - return strncmp(fw_type, LIO_FW_NAME_TYPE_NONE, - sizeof(LIO_FW_NAME_TYPE_NONE)) == 0; + return strncmp(fw_type, LIO_FW_NAME_TYPE_AUTO, + sizeof(LIO_FW_NAME_TYPE_AUTO)) == 0; } /** @@ -1302,7 +1302,7 @@ static void octeon_destroy_resources(struct octeon_device *oct) * Implementation note: only soft-reset the device * if it is a CN6XXX OR the LAST CN23XX device. */ - if (fw_type_is_none()) + if (atomic_read(oct->adapter_fw_state) == FW_IS_PRELOADED) octeon_pci_flr(oct); else if (OCTEON_CN6XXX(oct) || !refcount) oct->fn_list.soft_reset(oct); @@ -1934,7 +1934,7 @@ static int load_firmware(struct octeon_device *oct) char fw_name[LIO_MAX_FW_FILENAME_LEN]; char *tmp_fw_type; - if (fw_type[0] == '\0') + if (fw_type_is_auto()) tmp_fw_type = LIO_FW_NAME_TYPE_NIC; else tmp_fw_type = fw_type; @@ -3882,9 +3882,9 @@ static void nic_starter(struct work_struct *work) static int octeon_device_init(struct octeon_device *octeon_dev) { int j, ret; - int fw_loaded = 0; char bootcmd[] = "\n"; char *dbg_enb = NULL; + enum lio_fw_state fw_state; struct octeon_device_priv *oct_priv = (struct octeon_device_priv *)octeon_dev->priv; atomic_set(&octeon_dev->status, OCT_DEV_BEGIN_STATE); @@ -3916,24 +3916,40 @@ static int octeon_device_init(struct octeon_device *octeon_dev) octeon_dev->app_mode = CVM_DRV_INVALID_APP; - if (OCTEON_CN23XX_PF(octeon_dev)) { - if (!cn23xx_fw_loaded(octeon_dev) && !fw_type_is_none()) { - fw_loaded = 0; - /* Do a soft reset of the Octeon device. */ - if (octeon_dev->fn_list.soft_reset(octeon_dev)) - return 1; - /* things might have changed */ - if (!cn23xx_fw_loaded(octeon_dev)) - fw_loaded = 0; - else - fw_loaded = 1; - } else { - fw_loaded = 1; - } - } else if (octeon_dev->fn_list.soft_reset(octeon_dev)) { - return 1; + /* CN23XX supports preloaded firmware if the following is true: + * + * The adapter indicates that firmware is currently running AND + * 'fw_type' is 'auto'. + * + * (default state is NEEDS_TO_BE_LOADED, override it if appropriate). + */ + if (OCTEON_CN23XX_PF(octeon_dev) && + cn23xx_fw_loaded(octeon_dev) && fw_type_is_auto()) { + atomic_cmpxchg(octeon_dev->adapter_fw_state, + FW_NEEDS_TO_BE_LOADED, FW_IS_PRELOADED); } + /* If loading firmware, only first device of adapter needs to do so. */ + fw_state = atomic_cmpxchg(octeon_dev->adapter_fw_state, + FW_NEEDS_TO_BE_LOADED, + FW_IS_BEING_LOADED); + + /* Here, [local variable] 'fw_state' is set to one of: + * + * FW_IS_PRELOADED: No firmware is to be loaded (see above) + * FW_NEEDS_TO_BE_LOADED: The driver's first instance will load + * firmware to the adapter. + * FW_IS_BEING_LOADED: The driver's second instance will not load + * firmware to the adapter. + */ + + /* Prior to f/w load, perform a soft reset of the Octeon device; + * if error resetting, return w/error. + */ + if (fw_state == FW_NEEDS_TO_BE_LOADED) + if (octeon_dev->fn_list.soft_reset(octeon_dev)) + return 1; + /* Initialize the dispatch mechanism used to push packets arriving on * Octeon Output queues. */ @@ -4063,7 +4079,7 @@ static int octeon_device_init(struct octeon_device *octeon_dev) atomic_set(&octeon_dev->status, OCT_DEV_IO_QUEUES_DONE); - if ((!OCTEON_CN23XX_PF(octeon_dev)) || !fw_loaded) { + if (fw_state == FW_NEEDS_TO_BE_LOADED) { dev_dbg(&octeon_dev->pci_dev->dev, "Waiting for DDR initialization...\n"); if (!ddr_timeout) { dev_info(&octeon_dev->pci_dev->dev, @@ -4125,6 +4141,8 @@ static int octeon_device_init(struct octeon_device *octeon_dev) dev_err(&octeon_dev->pci_dev->dev, "Could not load firmware to board\n"); return 1; } + + atomic_set(octeon_dev->adapter_fw_state, FW_HAS_BEEN_LOADED); } handshake[octeon_dev->octeon_id].init_ok = 1; diff --git a/drivers/net/ethernet/cavium/liquidio/liquidio_image.h b/drivers/net/ethernet/cavium/liquidio/liquidio_image.h index 78a3685..5bf5e87 100644 --- a/drivers/net/ethernet/cavium/liquidio/liquidio_image.h +++ b/drivers/net/ethernet/cavium/liquidio/liquidio_image.h @@ -24,6 +24,7 @@ #define LIO_FW_BASE_NAME "lio_" #define LIO_FW_NAME_SUFFIX ".bin" #define LIO_FW_NAME_TYPE_NIC "nic" +#define LIO_FW_NAME_TYPE_AUTO "auto" #define LIO_FW_NAME_TYPE_NONE "none" #define LIO_MAX_FIRMWARE_VERSION_LEN 16 diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.c b/drivers/net/ethernet/cavium/liquidio/octeon_device.c index 29d53b1..e4aa339 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.c @@ -541,6 +541,7 @@ static struct octeon_device *octeon_device[MAX_OCTEON_DEVICES]; static atomic_t adapter_refcounts[MAX_OCTEON_DEVICES]; +static atomic_t adapter_fw_states[MAX_OCTEON_DEVICES]; static u32 octeon_device_count; /* locks device array (i.e. octeon_device[]) */ @@ -770,6 +771,10 @@ int octeon_register_device(struct octeon_device *oct, oct->adapter_refcount = &adapter_refcounts[oct->octeon_id]; atomic_set(oct->adapter_refcount, 0); + /* Like the reference count, the f/w state is shared 'per-adapter' */ + oct->adapter_fw_state = &adapter_fw_states[oct->octeon_id]; + atomic_set(oct->adapter_fw_state, FW_NEEDS_TO_BE_LOADED); + spin_lock(&octeon_devices_lock); for (idx = (int)oct->octeon_id - 1; idx >= 0; idx--) { if (!octeon_device[idx]) { @@ -780,11 +785,15 @@ int octeon_register_device(struct octeon_device *oct, atomic_inc(oct->adapter_refcount); return 1; /* here, refcount is guaranteed to be 1 */ } - /* if another device is at same bus/dev, use its refcounter */ + /* If another device is at same bus/dev, use its refcounter + * (and f/w state variable). + */ if ((octeon_device[idx]->loc.bus == bus) && (octeon_device[idx]->loc.dev == dev)) { oct->adapter_refcount = octeon_device[idx]->adapter_refcount; + oct->adapter_fw_state = + octeon_device[idx]->adapter_fw_state; break; } } diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.h b/drivers/net/ethernet/cavium/liquidio/octeon_device.h index 894af19..33d19c4 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.h @@ -50,6 +50,13 @@ enum octeon_pci_swap_mode { OCTEON_PCI_32BIT_LW_SWAP = 3 }; +enum lio_fw_state { + FW_IS_PRELOADED = 0, + FW_NEEDS_TO_BE_LOADED = 1, + FW_IS_BEING_LOADED = 2, + FW_HAS_BEEN_LOADED = 3, +}; + enum { OCTEON_CONFIG_TYPE_DEFAULT = 0, NUM_OCTEON_CONFS, @@ -557,6 +564,9 @@ struct octeon_device { } loc; atomic_t *adapter_refcount; /* reference count of adapter */ + + atomic_t *adapter_fw_state; /* per-adapter, lio_fw_state */ + bool ptp_enable; };