From patchwork Tue Nov 29 00:54:35 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raghu Vatsavayi X-Patchwork-Id: 700256 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3tSQ8H2pwfz9vF7 for ; Tue, 29 Nov 2016 11:55:43 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="ArNOTC8D"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755408AbcK2Azj (ORCPT ); Mon, 28 Nov 2016 19:55:39 -0500 Received: from mail-cys01nam02on0085.outbound.protection.outlook.com ([104.47.37.85]:55098 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753542AbcK2AzS (ORCPT ); Mon, 28 Nov 2016 19:55:18 -0500 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=IBBgoDGg45Rvn2TZpxc5n6YRxMCcFeGW0gubgGknubU=; b=ArNOTC8Do9R36xfOXqPZGEbKg2lIgj3agCHmuKYynNPTM4pOVYbr4gUvCQdt3XyiuDjDqh9ajyWM6+lkki/kFbm3GxHSxeKo/l5/7C/kqeg1oAXHRPie5QSTyYhQQTR1sUri+IVqxV3YFeySBhnoAq2BKUq9Z59Xmk9TX53EKGA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Raghu.Vatsavayi@cavium.com; Received: from localhost.caveonetworks.com (50.233.148.156) by DM3PR07MB2139.namprd07.prod.outlook.com (10.164.4.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.13; Tue, 29 Nov 2016 00:55:05 +0000 From: Raghu Vatsavayi To: CC: , Raghu Vatsavayi , Raghu Vatsavayi , Derek Chickles , Satanand Burla , Felix Manlunas Subject: [PATCH net-next V3 3/9] liquidio CN23XX: VF config setup Date: Mon, 28 Nov 2016 16:54:35 -0800 Message-ID: <1480380881-19255-4-git-send-email-rvatsavayi@caviumnetworks.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1480380881-19255-1-git-send-email-rvatsavayi@caviumnetworks.com> References: <1480380881-19255-1-git-send-email-rvatsavayi@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: DM2PR0501CA0034.namprd05.prod.outlook.com (10.162.29.172) To DM3PR07MB2139.namprd07.prod.outlook.com (10.164.4.145) X-MS-Office365-Filtering-Correlation-Id: d50728f9-e8dd-4dd9-de60-08d417f25bfb X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DM3PR07MB2139; X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 3:tnbIlW+Ll5ElqhEqci511rHaHFOcuTb8i/BiFtjLtg2ub0Lql4G7jsyTj3jfZPoimqLk4MK34YgamO0auQk7TMwTvPbVRK4WTiTBOwh0JdqFJpwUYEYoxImnGTsF538+vy5HtFJx1TFYtSwegg9yd3NAGmaDuFc9Jy9gmbyXJmJT6AvNQHLFcwJ4tnoH6UgWMS0kFCDnmYQptEzxpUkOZ1FOQPuKtli3scwsKcjjcUjAUj4Xb9ZJmKAkY9/MhLVCs6JO45B3EC9cb36JNh0YhA==; 25:V+l1ERldwivnQAcI4GKgojHyT55UvqjiZvqM3uBrmJzCQF/N1cmfyttGGQzlzcTrV6KTb75NpZVl4lTkdMVdidGfu/WKAGI5PJmtFvwSwBjj2/htHLDHUFg9lpHePFHr7jLC6mdbcflJ5+RQzj528hUdsIbAUEm/ROFUwxjTuPQc66Lh0ye3+dID10UYXA/Camm3oByj7pwM/8K11w5an98uOLg1c/gO4OlCvli/MMmW4+LniYO66E/LZUl7yIq2xizsvJBAVwH5V0H6X+mIZxVEJ67qJWmmvszmsjsn3sNtUihX07Q7YQp//pssv9o1trbvZRQG66Oa2Kowfx1nAqgV2A4YDZkPb249vDc1uVSgv+QPv10E8gPw3kJ6QO1ReCXRCAJ/E2DXVEadt3HU9zppqShPmAo2IudNtGKoefIgznH9ni5NmiB+ExMlzO1HBKn3rSwPdOPgqidS9XuKSQ== X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 31:KYDFhDiHbHm/XD5dbxPTJVsLUyLz3VrwdHY0Pjx4I1M6nEeHJoexzi0sfiyvBN3g/FpzTnWEciCdohM+5gJSsLfmJKhfpXgTCKzWWW+EAYIrmBastc8HuaVARD14dDzuVqeNyYNBG+gGnqwN7tWyKr/OzKEtGSjE6jlNbcN70YRlb0xWWFmPRUCzLuhLBe3FU4aefcAhbeBEm+y8F/0ynJRil0l6T13ax2kTwzAQmYTbIQr47V9mz9wOwmMw0lZIgri+wQ161XNAmqY75OlBoQ==; 20:l8VSgs9s0YLv854TseLXEiW5iS03BKpwFuBa7UBiZpJuY36k2aA5TZKj9JJLiC8Au2Vp3h5HTzB2slRoLR36QMHmqGrnhdfQJEj2yGKmKZkSChgOdATfRtqECIYn322TZGl88pSUudmL1H76N21jrEjxpUJaDBDnfaAz/eS1uU7iBiUikjvpa4zSh0hmSyEYySG/W/fDANo83h5Gld6xjOV80up3L66mpjKkGxjFceHsymMF6hBQF7xHutUKGgfd0U5T4K05KKDLKBXEqH7FDYTUVYTY9ySEOlvuC0BcFxStW+uVv/kn03rXZOeuQ1IBYhmvfG/DLVAaGLzlFYlInAFXLJqIV9b8s2FIbtPcio37V6pE7t4uWqVabmrnFhMQsVKnVJ6xJGgcp0ZIulb0saaoum+GkzfLL9djGxILI4Tow1cdVxfEOAlbapApaAKczRnPC/OZfgYrTxIb964JZh0sJOJUh6agmGfQAycb2RFjc4SJWNvx4me3hA24pbFeovfYErHBb+2QaRITHRpUjm6+emU72gCf0VpcxKUZi1ZwXvJfqZAVDO7heyjez6EoF/cTHHRZuK8xmjfL7ifZ804Nv7IaI/xpFARC0TqgwbQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(158342451672863); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6060326)(6040361)(6045199)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6061324)(6041248)(20161123558021)(20161123555025)(20161123560025)(20161123564025)(20161123562025); SRVR:DM3PR07MB2139; BCL:0; PCL:0; RULEID:; SRVR:DM3PR07MB2139; X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 4:KWsI+q3Y+dtKkHNomffshG5X+YwfZ2faLFu2SXTukkWKSgMUmgDs2y7WeRBWG9xPbFVuJpkdPYJwgHi6Qk5mqW0CujZLyhB0ukVjPdYbBK1Mpvozq1B3KfA+Ev1gmqDit94lKUt+bWTVYzLnsgRUq7dQ9gYJyLJbYel4oaowcxvfIbpcLQ6JTtn2r7CaOtTWJnQv9ypFyxBaJVxbw8CDzWA3QE3bnhII6iW5nIIrLTZBqRmp6CCXDGzEQh54xx1+bPgdgn1lyA8wkkk+KbjeeXIL3eABx7EDXbjL5a4CA1yCWxsnBbU5I5oPw1CNw0DrhgHuarZCvaImNdmHnYwZ9cDINntGtguVbEXv0ihe2LoOUIJrfiBJVfsufKD57OFQoPAC26FaO9NfO1GCyLPumhNrxwuGY99v974Xvh3egOgmWXYJUl52OO69e06MjBUuTsVbwqeNUXiHG1iGYxrsC4oR2e9qdrjL2ELxkzwo5e2ZyqN0llciRS9545cJtQ8JVuSl4LYddZlFqW6Qe1bzT2saeki8+loHGMNiasO4I1c4caoo2+8PMT+HHcYsyoZfFSl/3uqHVMWtVymd2yYHR9UF5GhpbIl1u+qLeWqkgYmVy2cFLl9qy0qqMmejC7B6CnrjF9j7HlzUeBYqneG7BU8YqeGZSiqP7Q03LBm2bt2ajeNK30oY4QCu5bSCCzdP X-Forefront-PRVS: 01415BB535 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(76176999)(50986999)(36756003)(107886002)(551934003)(4326007)(5003940100001)(2950100002)(6916009)(81166006)(42882006)(47776003)(5660300001)(33646002)(4720700003)(92566002)(110136003)(81156014)(7736002)(305945005)(7846002)(6666003)(8676002)(69596002)(39400400001)(2351001)(105586002)(575784001)(97736004)(106356001)(4001430100002)(38730400001)(733004)(6486002)(53416004)(76506005)(101416001)(39410400001)(50226002)(42186005)(39380400001)(3846002)(2906002)(50466002)(6116002)(48376002)(68736007)(39450400002)(66066001)(189998001)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM3PR07MB2139; H:localhost.caveonetworks.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM3PR07MB2139; 23:Kpg61KE9/6uKYX5k3li2gTQ7U0SB2ol03iiXb7ugq?= =?us-ascii?Q?L7k1KP3qKQ/bP7t6B4hmHK3jvD/XDB/9WMMLmkUibVYpEpkk+qvfr0RT6fEE?= =?us-ascii?Q?xQoqOJW00h/6gPVLatYsnnfrHx+dsX+2nvJv+vTxneJYVKk000+IBocoWT14?= =?us-ascii?Q?8MDw/0VWRlyPjZvdhAjAfF8mLOA7H3zB1Gyxrad52KElrD710LmlGL7aLsGx?= =?us-ascii?Q?9bsOu/ttVAwAYRZWyv7MJopG38Wi1zeF3GQOaJlOJ80SpEDS4OQcDDy19JRI?= =?us-ascii?Q?WPDJcqGSljNhO/hnxwE+ZJfn9CogodJoFikmcj8RerKwhn9YWw83X2IQe8UB?= =?us-ascii?Q?3gH7IW2OXoPGKLzWxkMywcLj2VgDZvXP0bGzqqy7XXICXCS1MBaC+KUCyQIi?= =?us-ascii?Q?Qe8NYpLiRN8rhIJlSLFAkGlGWu3/9jrvYCioRPIkSJKHBfOWe3BnH786R7f/?= =?us-ascii?Q?B4IxSI8tDubgfl5Ywbkt/sj8E36s1or9pfb1xXpJXvZClH2+rkf7HO1tTqlN?= =?us-ascii?Q?ve3SRX5eJ7N26+W6aGS34d4UwSwMXw7hqrR9hvdqpuduS6/ZwFVhkAJYYWVU?= =?us-ascii?Q?UL2CW9QQuqGEf6FFeP+oc9n8nU7bWkMXT9ZxBSEBk2SKszo+UI9CM166t/8y?= =?us-ascii?Q?I3XN9dJ7LiTCZbNsB6Ia8adpu/tCsZLhvqQ3A3KCp2N7YfrLgu5kCEsSbgq6?= =?us-ascii?Q?e2cLPFIzUNCYMsfZvG8wILqd2xhbjkwGjDINe1m6/NgMroNWnduVYBXC3AeZ?= =?us-ascii?Q?uV+Tdd1hvD3pUUCmXZYCUrD0uoABwNkV8RMdFPtMJNt5ZEiMK79ke2WobVrm?= =?us-ascii?Q?IyAVq902LNkzdlJiKp8nhxq00VehjyMiavrGKVCUUpiOSzfNWNYYQJADSF5s?= =?us-ascii?Q?BlBJJkbi1RX1Gye8/2flXS+s3YsB7aAC/X1yNQqAeW4sZlL0/Z1bnXbtWEL4?= =?us-ascii?Q?D6F+O2qB8/I8EQUrnkYWA7VvTRv79wNwNvlgEBEzVLK9oX4uuGF0opng075E?= =?us-ascii?Q?W0iedej5ZUdWDdjLZGNU6+otmzfPEVO9AdyhxiUBn6kUUB64npYbEuC4+Mz7?= =?us-ascii?Q?UuIq791Rh5L3kuUQUxocriaIQ1+vMY0+WL61KqIiKC0pSxS8aTjT/RiRyYt4?= =?us-ascii?Q?g9ZJGgOxEYwKD394pBjwwipUByixUHPcRTNz2CJilyZda1B1Hy2jc9GmR1EQ?= =?us-ascii?Q?YmvplC3exk9EqnnDYRlK7YOpMsbaij4IniORf6lMF6gjcvYtxfqY2FH4CzAL?= =?us-ascii?Q?tl1CpMulvXy8VWpzcszU7QcfOREnP1im0j3W2Wbde+DlOjJz03ZjLGEu2n/j?= =?us-ascii?Q?WnUzw6drblMVbe9haLP60ahJ9AOpgIt1b9koKuAKjworSD0+JkzkAF/RiJBY?= =?us-ascii?Q?CJLINxtGS90qDQlQ21RX5ot6yM=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 6:J48S7xbVCOHya3bYE5gCwQteEKFQQ1aWCFwcuYf7nm/93rFdTWbRu/nijhRNGD2W3uJdSv1QtBAXcB1609K9cgH4ffxximN+DhY/J/Wj7CJ3dc6lu9/MNUvofaxGxpDH5B14XBXZslMUOrTuOcxaMTWNuVyC/D+vsGtb3vbY5fwnou2o9lS9YEsO+wGwzw+/6x34Y20NXtIIkWdPDyKFO0uH3/+69Snqn0q+GdBpDaWk0/61d7hXQt95iM9KEMJkEcym2KRCU/LGFuplZ1ZKSQiqZ47Ur8ude74J0ZIUfHRt9tGtFEMeingmhWn+ev4khwJEvqOfibzAKt/w/xSDeCvTdJLZA2eQT6ihZThOLOMRrP6foSQkseOLZBqTrxL/gOVJgpZLJjf5MsfVvcUbyaci9CLoYexV32agejNeYs4O0+KHi22MIaXauzujxGRUGY4vPndbsuavzxk4EH7KkA==; 5:QrcaYG4N8YT6kC7uKobSQEtJ2nMUmL2odBEygp8Ms8+gTCFcHc1dAntxyoDJRS6+BpaqoBfp1sSv8Ej83TAIxAKkjMRahRDZ7y+WVuKFbP+BVnD7cG0T0/ZuDkRZlIC5/0AdXdDpUOodJOjkTgqiZw==; 24:2JDKHcjlAEx4oDV8I1fuk5RTOEXaFslGMyeRsplaNfJSV8D0LHvubfCziRt8YLBBV49Ekqkn6Asb20aNlQmjtNBlzDwRzWazv1coT3nkFH8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 7:d9HrR2z5mJ4ZJpeFZTiNmkhf/FFgZM3ZJJ6Ug9uI71d5qbSb11QLAW/m/omxibwLFfQav8/KUmdIGYYSoetpPZv5skerfLLi/iEAxdFEpmWngYQfEnik8Q7Om5LGRsn3cUCKqheS9/cBUlpckp+UuFMxwt16NWQXzWLa/rpSOBrgr2I6BweAldjzD1IBqGjHNjZqflnJ1VbtFI9+hPMudvv+T0cUI9b8NOpFfUt9oyjC7nSUStA3LXVusM0sJYPlvD8E8/+7TTU7CBGMFb1Yc0mCDlsLpKTQZmkyevUpoGXV0yiSBsDb0QnXVZe+145EJV1XggarQZy+wZ/7/XLf9L/YOOduC3BMDju4cAm6A5MzUZxDNpw8qXlAkPqdemvTFwmqB/+0NFGtbO5zvdYbELlp6JgP0HIHeBnaVX8QHwNLJuE0JIOLIie/XBJV0M5LXkSglAIZmIb4TU61uJWYTg== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2016 00:55:05.4456 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR07MB2139 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Adds support for setting up VF configuration. Signed-off-by: Raghu Vatsavayi Signed-off-by: Derek Chickles Signed-off-by: Satanand Burla Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/Makefile | 2 + .../ethernet/cavium/liquidio/cn23xx_vf_device.c | 44 +++++++ .../ethernet/cavium/liquidio/cn23xx_vf_device.h | 2 + drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 136 +++++++++++++++++++++ .../net/ethernet/cavium/liquidio/octeon_device.c | 11 +- 5 files changed, 191 insertions(+), 4 deletions(-) create mode 100644 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c diff --git a/drivers/net/ethernet/cavium/liquidio/Makefile b/drivers/net/ethernet/cavium/liquidio/Makefile index 69d23fc..c4d411d 100644 --- a/drivers/net/ethernet/cavium/liquidio/Makefile +++ b/drivers/net/ethernet/cavium/liquidio/Makefile @@ -11,6 +11,7 @@ liquidio-$(CONFIG_LIQUIDIO) += lio_ethtool.o \ cn66xx_device.o \ cn68xx_device.o \ cn23xx_pf_device.o \ + cn23xx_vf_device.o \ octeon_mailbox.o \ octeon_mem_ops.o \ octeon_droq.o \ @@ -31,6 +32,7 @@ liquidio_vf-$(CONFIG_LIQUIDIO_VF) += lio_ethtool.o \ cn66xx_device.o \ cn68xx_device.o \ cn23xx_pf_device.o \ + cn23xx_vf_device.o \ octeon_mailbox.o \ octeon_mem_ops.o \ octeon_droq.o \ diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c new file mode 100644 index 0000000..d683bda --- /dev/null +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c @@ -0,0 +1,44 @@ +/********************************************************************** + * Author: Cavium, Inc. + * + * Contact: support@cavium.com + * Please include "LiquidIO" in the subject. + * + * Copyright (c) 2003-2016 Cavium, Inc. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, Version 2, as + * published by the Free Software Foundation. + * + * This file is distributed in the hope that it will be useful, but + * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or + * NONINFRINGEMENT. See the GNU General Public License for more details. + ***********************************************************************/ +#include +#include +#include "liquidio_common.h" +#include "octeon_droq.h" +#include "octeon_iq.h" +#include "response_manager.h" +#include "octeon_device.h" +#include "cn23xx_vf_device.h" +#include "octeon_main.h" + +int cn23xx_setup_octeon_vf_device(struct octeon_device *oct) +{ + struct octeon_cn23xx_vf *cn23xx = (struct octeon_cn23xx_vf *)oct->chip; + + if (octeon_map_pci_barx(oct, 0, 0)) + return 1; + + cn23xx->conf = oct_get_config_info(oct, LIO_23XX); + if (!cn23xx->conf) { + dev_err(&oct->pci_dev->dev, "%s No Config found for CN23XX\n", + __func__); + octeon_unmap_pci_barx(oct, 0); + return 1; + } + + return 0; +} diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h index 015b6d4..9e4fb50 100644 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h @@ -31,4 +31,6 @@ struct octeon_cn23xx_vf { struct octeon_config *conf; }; + +int cn23xx_setup_octeon_vf_device(struct octeon_device *oct); #endif diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c index fd108cd..dd1dad1 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c @@ -22,6 +22,8 @@ #include "octeon_iq.h" #include "response_manager.h" #include "octeon_device.h" +#include "octeon_main.h" +#include "cn23xx_vf_device.h" MODULE_AUTHOR("Cavium Networks, "); MODULE_DESCRIPTION("Cavium LiquidIO Intelligent Server Adapter Virtual Function Driver"); @@ -37,6 +39,7 @@ struct octeon_device_priv { static int liquidio_vf_probe(struct pci_dev *pdev, const struct pci_device_id *ent); static void liquidio_vf_remove(struct pci_dev *pdev); +static int octeon_device_init(struct octeon_device *oct); static const struct pci_device_id liquidio_vf_pci_tbl[] = { { @@ -84,10 +87,78 @@ struct octeon_device_priv { /* set linux specific device pointer */ oct_dev->pci_dev = pdev; + if (octeon_device_init(oct_dev)) { + liquidio_vf_remove(pdev); + return -ENOMEM; + } + + dev_dbg(&oct_dev->pci_dev->dev, "Device is ready\n"); + return 0; } /** + * \brief PCI FLR for each Octeon device. + * @param oct octeon device + */ +static void octeon_pci_flr(struct octeon_device *oct) +{ + u16 status; + + pci_save_state(oct->pci_dev); + + pci_cfg_access_lock(oct->pci_dev); + + /* Quiesce the device completely */ + pci_write_config_word(oct->pci_dev, PCI_COMMAND, + PCI_COMMAND_INTX_DISABLE); + + /* Wait for Transaction Pending bit clean */ + msleep(100); + pcie_capability_read_word(oct->pci_dev, PCI_EXP_DEVSTA, &status); + if (status & PCI_EXP_DEVSTA_TRPND) { + dev_info(&oct->pci_dev->dev, "Function reset incomplete after 100ms, sleeping for 5 seconds\n"); + ssleep(5); + pcie_capability_read_word(oct->pci_dev, PCI_EXP_DEVSTA, + &status); + if (status & PCI_EXP_DEVSTA_TRPND) + dev_info(&oct->pci_dev->dev, "Function reset still incomplete after 5s, reset anyway\n"); + } + pcie_capability_set_word(oct->pci_dev, PCI_EXP_DEVCTL, + PCI_EXP_DEVCTL_BCR_FLR); + mdelay(100); + + pci_cfg_access_unlock(oct->pci_dev); + + pci_restore_state(oct->pci_dev); +} + +/** + *\brief Destroy resources associated with octeon device + * @param pdev PCI device structure + * @param ent unused + */ +static void octeon_destroy_resources(struct octeon_device *oct) +{ + switch (atomic_read(&oct->status)) { + case OCT_DEV_PCI_MAP_DONE: + octeon_unmap_pci_barx(oct, 0); + octeon_unmap_pci_barx(oct, 1); + + /* fallthrough */ + case OCT_DEV_PCI_ENABLE_DONE: + pci_clear_master(oct->pci_dev); + /* Disable the device, releasing the PCI INT */ + pci_disable_device(oct->pci_dev); + + /* fallthrough */ + case OCT_DEV_BEGIN_STATE: + /* Nothing to be done here either */ + break; + } +} + +/** * \brief Cleans up resources at unload time * @param pdev PCI device structure */ @@ -97,12 +168,77 @@ static void liquidio_vf_remove(struct pci_dev *pdev) dev_dbg(&oct_dev->pci_dev->dev, "Stopping device\n"); + /* Reset the octeon device and cleanup all memory allocated for + * the octeon device by driver. + */ + octeon_destroy_resources(oct_dev); + + dev_info(&oct_dev->pci_dev->dev, "Device removed\n"); + /* This octeon device has been removed. Update the global * data structure to reflect this. Free the device structure. */ octeon_free_device_mem(oct_dev); } +/** + * \brief PCI initialization for each Octeon device. + * @param oct octeon device + */ +static int octeon_pci_os_setup(struct octeon_device *oct) +{ +#ifdef CONFIG_PCI_IOV + /* setup PCI stuff first */ + if (!oct->pci_dev->physfn) + octeon_pci_flr(oct); +#endif + + if (pci_enable_device(oct->pci_dev)) { + dev_err(&oct->pci_dev->dev, "pci_enable_device failed\n"); + return 1; + } + + if (dma_set_mask_and_coherent(&oct->pci_dev->dev, DMA_BIT_MASK(64))) { + dev_err(&oct->pci_dev->dev, "Unexpected DMA device capability\n"); + pci_disable_device(oct->pci_dev); + return 1; + } + + /* Enable PCI DMA Master. */ + pci_set_master(oct->pci_dev); + + return 0; +} + +/** + * \brief Device initialization for each Octeon device that is probed + * @param octeon_dev octeon device + */ +static int octeon_device_init(struct octeon_device *oct) +{ + u32 rev_id; + + atomic_set(&oct->status, OCT_DEV_BEGIN_STATE); + + /* Enable access to the octeon device and make its DMA capability + * known to the OS. + */ + if (octeon_pci_os_setup(oct)) + return 1; + atomic_set(&oct->status, OCT_DEV_PCI_ENABLE_DONE); + + oct->chip_id = OCTEON_CN23XX_VF_VID; + pci_read_config_dword(oct->pci_dev, 8, &rev_id); + oct->rev_id = rev_id & 0xff; + + if (cn23xx_setup_octeon_vf_device(oct)) + return 1; + + atomic_set(&oct->status, OCT_DEV_PCI_MAP_DONE); + + return 0; +} + static int __init liquidio_vf_init(void) { octeon_init_device_list(0); diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.c b/drivers/net/ethernet/cavium/liquidio/octeon_device.c index 05bb0fd..7e6c8b8 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.c @@ -572,15 +572,17 @@ static void *__retrieve_octeon_config_info(struct octeon_device *oct, switch (oct_conf_info[oct_id].conf_type) { case OCTEON_CONFIG_TYPE_DEFAULT: if (oct->chip_id == OCTEON_CN66XX) { - ret = (void *)&default_cn66xx_conf; + ret = &default_cn66xx_conf; } else if ((oct->chip_id == OCTEON_CN68XX) && (card_type == LIO_210NV)) { - ret = (void *)&default_cn68xx_210nv_conf; + ret = &default_cn68xx_210nv_conf; } else if ((oct->chip_id == OCTEON_CN68XX) && (card_type == LIO_410NV)) { - ret = (void *)&default_cn68xx_conf; + ret = &default_cn68xx_conf; } else if (oct->chip_id == OCTEON_CN23XX_PF_VID) { - ret = (void *)&default_cn23xx_conf; + ret = &default_cn23xx_conf; + } else if (oct->chip_id == OCTEON_CN23XX_VF_VID) { + ret = &default_cn23xx_conf; } break; default: @@ -596,6 +598,7 @@ static int __verify_octeon_config_info(struct octeon_device *oct, void *conf) case OCTEON_CN68XX: return lio_validate_cn6xxx_config_info(oct, conf); case OCTEON_CN23XX_PF_VID: + case OCTEON_CN23XX_VF_VID: return 0; default: break;