From patchwork Tue Nov 29 00:54:41 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Raghu Vatsavayi X-Patchwork-Id: 700260 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 3tSQ975Cvhz9vDw for ; Tue, 29 Nov 2016 11:56:27 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="S/XgdFyQ"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755692AbcK2A4N (ORCPT ); Mon, 28 Nov 2016 19:56:13 -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 S1755365AbcK2Azd (ORCPT ); Mon, 28 Nov 2016 19:55:33 -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=vTf/490Pm2bPbOmBLM8woo+6/MA7EGcqDnn5S/Ytoag=; b=S/XgdFyQs4Et6k7hEIYFBpILGfI2Km/Qd+KPAZ5+7xBIr/wuMDdl5wN1Ds3Zvv+XaytDnQZBfpNjrPzYi1DUAWjbzpR3f8LpUz80fKF5G64ukAw88U65jzysk5BF2/dCXnPrUPJRAXPpNMiLs1ELBl0CIFHWRLn+tyDbQtbm62g= 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:11 +0000 From: Raghu Vatsavayi To: CC: , Raghu Vatsavayi , Raghu Vatsavayi , Derek Chickles , Satanand Burla , Felix Manlunas Subject: [PATCH net-next V3 9/9] liquidio CN23XX: VF init and destroy Date: Mon, 28 Nov 2016 16:54:41 -0800 Message-ID: <1480380881-19255-10-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: b7cfd52b-4d52-4daa-48a2-08d417f25f5d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:DM3PR07MB2139; X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 3:riFom46GUyZzWPNmMJh/Jl6iZZJjGWaFccUWYOqYQONmWC0B7qqcQl14Sv7/OC6lmGvR/ea+zGhDQN9JOPtSitcVKjmQ+UHpcMyMQd37e5r72i3aaj7Yazl3LyNxmn+PVkTie9IhFlMGTfPKrfRpJR1qXXO2w1olF8LPkFC/Xgs2z9GKkB/lXsbetcTlp57RjaFSiUUcVT0ZkLw8oWp68wx53ddd26+RVakckgQkdl6s0bRhRePqIez2BK8ONDh3Ogk6HsVV5+mhkTpAPIJG2g== X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 25:zV6dAyh4rqcxri3zR1bEnohNSq9LW0gUEovalmw8i7krchf/G50r6vAdEFVgOxUJ91/DZ7OBp4F8P66O4PgmA75rYh3RoT4lCl7JzcUPAbXrco4UdiW8vMCbYdiJu3UnKJt1dKGotM7PO4+I7jHRMTY4jvystQ6px7KGrR1GygYYO3UfF8WdyCTAFgN8isv7xc4ZBdqiQa0dAsu8J31nxNSeqNsaHbljTIDOyidGbALwEl3OrUuFD59/9mljtfBlPqfwQFVQwAoNC+zKi/Rj46tmXrOPPfBkgwT4klGD7w/Vd9ZeT8FOOvHSzpA8mvlC/Tmr64UHSRErtioifu5NAOk0KhvaoRRQpvRkIa686Ai90vW0Fv7rE04aildihon3o4s4GlOCaSloiOx6nap/FHRsZ5mxeP0Jy8dLZVodXomGU3hw8Ml+WIPhHZry0BNyyW+CBFrkQJ0GUA4UKaE6OqivEju/LKCZnTkX97VKt+r0JGfQwWAjxrTZdCR+keOA8EZsSMljG3u5hMMCbeT90RaTfDo70dh0E73D2kyR3PgpCuensYqpBbIzGdA4FdL5lLzggrdleDrnAV9KyFrtbxHR1dirZZmT5HtyIj9qrpZxBIQoJ95lCcIfgPBv+MCt2jUbgyPosXHNOS7f33727TeQaQpQoOI+in20Phn0lmlq5pXnJPci+lG0T5oXkksqTTOutLEw8zjCAMjTxWKTg0teW9YemNNHqeqEsQbChaqzjvhgeSWPhXwpO6jMh2M4CeBgxmt78kPu629fNZn5onmYL6aUFHcZrci1qVwCAPvIbEnbktCcdRzmofZgywSp X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 31:LYUYktq01HNqs3UZ1VJbSTUa+yD61WiN59VDDzKEGMr/04yJjoYLQYKqxOcXQtJt+nqAbGUFH6///+F/iYMXIr143Tlj9z7nVf4tEUNSL/K2YoK8O7pJN1dwoLYrWMxvEUJeTk+SBK9Vk9nlOwogdwpBNAS0bQ8d7fXVpvwFzrhSUUZwmHjV5XmO/CYEZyFlLSWBX+/CZvhN5w8pzwB0aSXAmPAiI19iegMAOPe+OYrTsMzOwYZJmWJ1KFGrG0JSF0UWBE4cyFL+tOml+8rspQ==; 20:WYIg+Tej5czoAC77eZLrMcebAiCVfQJb2oiyNQ6nuIGQ2jTF9YhRhEqvAvjsT9JTnUWiFjMwb1ofqj5csxAldDFbQorlkYBR5uzX0FlJeIPTw7oiRTi3No3qm9g4AGhAGKaf29RUPtWpgbcNxx9U9+xn12U9X9+OPv8Zsh4LH3Pefk9dHEhTehXfNUxLzvHg4orB7269RDWt9GE+BHANgGfVNSvs0wyVnWT71YMQne/yeiXrqsSJuQTsIFSh+tv4ey9h4eiP2AmTBWlRjXMh8kID1sX6VfZqYaSXQ3OI5jLVkcQ3HpI3fMV60qS3SW7NsDlOA7YFPIhUGXuJZB57bdYDEuQipDDIov1ZIZz2Q7MKhDY8DYaGHBxqPmqmalzNpM7leAQ1/HN+Z6Ck28Y8/qE3gxM3s86wsVj5peRVieV3eSTViIjbQrUw3sw7UL37vUmoCsMJV9tPz0iLDeNs8Kp/71VFN+aHWST/uG/2MdMcA2NtMJ+VCmIUy4SvR83OgO+8JDYP86Hbgo6pvZt9tEWTnJncEG2cNgCvcZQy9oxHpRzSRXy1zT21EUZJBGYE1m3am7kV6SlkV4rgNM+QlNhjF4Sa37ih5/zAAlox/H4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; 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:77pmmZ51QO0GEg0RAgQulnAOksPkvVWyBDw0fR0fZVGEtTHnYL1ZGjSvbbY9U89PzOawTBHrnD9YF3DIMu3/tzL2/dQTZVsFFXxKHq5GP8lS61W/AEWccuJI95PHXSp7S7MnXTLbEcfpWuqCQzV29BFXMPORzZYc20vCfziB9a8mQbljczNioHiPMkWEqmZrPf/w6ClMW16Fj8kOGX/dmP0rH53I0TR4hIxRT4UUVAib/22TcKjwN9y+73SLfLkNXd3oqe2bR6Y4rBMxq1YWvP094WS8CLnV9atoVd4Q7W7CtVpGhjBnyGoEf8HPM9INzekXlxUciB32BscsbS/DZB1NEuzaE0F5JaNWqJe4169egfesa+s7pqwlywKgm176dEgoAR3gnsqud+hB4sLw2gLIDVZBBol35F9jf+StacSs1hKsdD/1Yw0RCyZpZFV0cdTTlRHUo+5SlXbFkz3Me0r9N+HIjqs7EzAGNj1NmQznQcEST40pOVB+jQij2xcVTdfB1sy+wKnYCA8S8iIo1LArSYr+/bsJkfCOy7lvCiVHf8beritYPCOugzidtt1E+0wvoUy8BQFQfnE5nZcwTJhF6F1LGG/TTbYsx4dgiwYYrBFmWFg5hiZWwg0xhnlXt8n5VxGlZrNs8u2wMKlFpg== X-Forefront-PRVS: 01415BB535 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(6069001)(7916002)(189002)(199003)(76176999)(50986999)(36756003)(107886002)(4326007)(5003940100001)(2950100002)(6916009)(81166006)(42882006)(47776003)(5660300001)(33646002)(4720700003)(92566002)(110136003)(81156014)(7736002)(305945005)(7846002)(6666003)(8676002)(69596002)(39400400001)(2351001)(105586002)(97736004)(106356001)(4001430100002)(38730400001)(733004)(6486002)(53416004)(76506005)(101416001)(39410400001)(50226002)(42186005)(39380400001)(3846002)(2906002)(50466002)(6116002)(48376002)(68736007)(39450400002)(66066001)(189998001); 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:ORnN1W6o9SCOPvBYPdYggsJZH5QJ8t0LV2hGfjg5m?= =?us-ascii?Q?d/uIX2SA4bRcogHwrS4VKjtmE54bufIfUp3xfkl09q2EkcN8wxfbjTmkJH38?= =?us-ascii?Q?7ULXbzr9bzfExG2Sv3YFUTVt7yO4E9i1i2CW/3Zu8SqNiIZLonVVyEx058oK?= =?us-ascii?Q?Z1vS5ISIs2O9/PL9EtSj1SGlk1f/leqx3VvVfaiIVX39LZwX8nHzfXpNGAlh?= =?us-ascii?Q?gbjFPA6vw/4cV0fqnHh3fwpcjFfZv+Ozojw1I2B4my7dv88RQkgIHcSH4y/h?= =?us-ascii?Q?N1KHSx8G6gM8Dt8bO4kNSjBQVmyNtVQFW0Y5YfxFuXXiz1bmNDH7IbhETB62?= =?us-ascii?Q?VzXZP1uD9A2PxWXnBkBruyubBAL+nUT37k0VZd0rhcFp+HrtUuwDv+4mSDI0?= =?us-ascii?Q?fJP8FtAnN9SdWrDrPRrMQq/T6S5IHhod1jShvQmBNxx3Ekhhwq5DzVWQWG8g?= =?us-ascii?Q?ubKMZDa6KZGfVQFJDOqG/l3U1n17QnXGXa3YIQYweOI+Y8Q1ZsqTIHehYh6d?= =?us-ascii?Q?dBqr/T9M2tW66eHaWn60DZy2lKS1OW/hVX6jUi1KVfY9wLfGSaxtRH/yTgS/?= =?us-ascii?Q?ws5shwI/yTvHhoV28cgMmwWtUW6pwZfexJG/y56tRBhB6xTEsUsDDZP6eS9p?= =?us-ascii?Q?FHxaGCvEWPiJC2T0qR/KlQuxSkHYNEXjNbaedLLRSk+DbslgHm5/DsKNOvjL?= =?us-ascii?Q?6s7qbniv4ljtQ4EfqSTg6t51M6c1HSjX4WVVqwZmd5q2vYOi2ag7jf4H+a3M?= =?us-ascii?Q?OpLEOJkSD+Zjq6S9efdMBJhjoJhdzBy3Xmkfl94HMZnqm8pGrFj89HLwoX1t?= =?us-ascii?Q?MOY5I0a6rBSFgNfKrMkR5kQFuwyFW9Bam51NEfDg13NSG/Qjll8cm5/uHI+U?= =?us-ascii?Q?R46mSEvNgvJDQG9Dwbvpk1w3zDQXMnQR/6mX684XuPEEBDoJJCzPiBIPBIss?= =?us-ascii?Q?KnZOB7+ancwfuuxV66+dLXGX1PMLsJSAr5ITjkBYtkPV1hr9GKeXDbrA7Dbf?= =?us-ascii?Q?AN7mnpkSNDAAxWJxOaSRBvEhlYWq5DZLtw+pQpLstInr+/1V6LtiavmLP1Vh?= =?us-ascii?Q?uvh1opi4yiIcGUyx3x0PU141DFYvk+PWipMC7gI6VFQetd9g78L3zC+Rprdt?= =?us-ascii?Q?Uqg3UmwyKuQt+1tfLfi8KIQdhGQza3uxd41pAl8bU4KI59wcSylfDzSzznF3?= =?us-ascii?Q?H/+z+bLFlgUraWwKO+yQnBsgkHBMTlG0hDBoxt5D/hKxThAA2r5vxVVxUspm?= =?us-ascii?Q?wSYGow8nbfEkJNP3GdyTfl7rocWYva2FSYabxJmZITQ3704n4hLfuBC7J3Hf?= =?us-ascii?Q?clqD+2bfOl+4NCBNxYiW4M=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 6:6TQTHc1p928EJAWQgOrCMDaIGFy264k10MOg3g5XCWX1oYHwyFgY3s2wmQYTAMd1C8aBMVFTzBjJMgeyShypaFdhqPjegkmFSm1rpmbC25WJ9AvZ7waugdvHTIWs0jmjmCYQu2EVS8mUQtr/4T2nzVrhJJLKyIvmHnyrOoYPdNR+JoYkn0VHAh/z0XXjVWqawoKLMHiHyMJdzIpU0A21ZtXVWbC9nuh8Csz2P4sccbMbgKHzLqeH90pWrBlekFQJQGH/QVN91COZyZJxnglTZz98f8BFSJM4cxbzQTyQliX5HFsDq5Z2Z16F4qfdmhaMZkVNCDnErfgIYphDj369YtskT0WhKzU9jn3Ee7j5dbtmuKqcoNdC0EvgXzTerghrNn6u3R+lNTJY2ARO4iDtE0wbxhzlDQ+dNMZnEJ4/2A95UrGZxuTgJ0swNQLA/aT+0HyISCK2Eymx3jXE7nTXFw==; 5:z9fIGzp+nd3khmSb8ICWd6XUDk2r5bRZvp9U0f54v9nEwp/6HRB2h9QqlKTr+0+3bhUgxzJSAK5TETjRKXEebi3ZesCXMFyshswokecKNCduAdUjvqnIeYdwUYB16KacV3Rr9RhX+IaOBc9lB7c8SA==; 24:QDnVhnhmMl8pX4XrAy21QnoJFqH1rUuo3LnOA2rzzFw0nm71cvojIDjeaSxHEjj6wb603oiY95vO5TvD25SgsuWEo7DS/dmOacVRWNzufUA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM3PR07MB2139; 7:H8TQR1Prpok2DvPCNW52AdTJoex4KXGEWKJIE0RiHfGm5t91Oi649Q3rfwTyILRqJbAPr1DR+R4a9GPx1nxbGs/5ajgItBNY5vERkWJTpTLlEZc/2H4hWctoWTHR7tAkPAJUi5HD0uJ8mBuRC58PpqNwA1eGULqv+zD2r3pNOkvxxUK+ZLcom1xcu8X3EHkdUs+jnfVnN5G7pBU79PW9HXFCYUisr7QurL2wnvRD/NkJaHy0wMmQ3lhSf8CdYzQ2gTv04JgeqkCea2O/BIiIhOX8ClNWOynqm7gOCEr6fcDgRyO4Q1AFkvg5gcpGfeJyYchTomwRW2ptuM12L+cwtWSiFtC4K9w5sguON8fxsJFRkQ5/eYvEiIUH/kf9rLm87f7MdcXchd0QZdg9xAK4IrZaScM3WFC7jPd/n7kIhdKeBi6ZQYtJPVaeNnu5mzYThKPshWFdnKRzwvJ+E2VJaA== X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2016 00:55:11.1192 (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 VF initialization and destroy resources. Signed-off-by: Raghu Vatsavayi Signed-off-by: Derek Chickles Signed-off-by: Satanand Burla Signed-off-by: Felix Manlunas --- .../ethernet/cavium/liquidio/cn23xx_vf_device.h | 2 + drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 106 +++++++++++++++++++++ 2 files changed, 108 insertions(+) diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h index 8590bdb..6715df3 100644 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.h @@ -36,6 +36,8 @@ struct octeon_cn23xx_vf { #define CN23XX_MAILBOX_MSGPARAM_SIZE 6 +#define MAX_VF_IP_OP_PENDING_PKT_COUNT 100 + void cn23xx_vf_ask_pf_to_do_flr(struct octeon_device *oct); int cn23xx_octeon_pfvf_handshake(struct octeon_device *oct); diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c index 3d5c61a..e6321f3 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c @@ -41,6 +41,60 @@ struct octeon_device_priv { static void liquidio_vf_remove(struct pci_dev *pdev); static int octeon_device_init(struct octeon_device *oct); +static int lio_wait_for_oq_pkts(struct octeon_device *oct) +{ + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; + int retry = MAX_VF_IP_OP_PENDING_PKT_COUNT; + int pkt_cnt = 0, pending_pkts; + int i; + + do { + pending_pkts = 0; + + for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { + if (!(oct->io_qmask.oq & BIT_ULL(i))) + continue; + pkt_cnt += octeon_droq_check_hw_for_pkts(oct->droq[i]); + } + if (pkt_cnt > 0) { + pending_pkts += pkt_cnt; + tasklet_schedule(&oct_priv->droq_tasklet); + } + pkt_cnt = 0; + schedule_timeout_uninterruptible(1); + + } while (retry-- && pending_pkts); + + return pkt_cnt; +} + +/** + * \brief wait for all pending requests to complete + * @param oct Pointer to Octeon device + * + * Called during shutdown sequence + */ +static int wait_for_pending_requests(struct octeon_device *oct) +{ + int i, pcount = 0; + + for (i = 0; i < MAX_VF_IP_OP_PENDING_PKT_COUNT; i++) { + pcount = atomic_read( + &oct->response_list[OCTEON_ORDERED_SC_LIST] + .pending_req_count); + if (pcount) + schedule_timeout_uninterruptible(HZ / 10); + else + break; + } + + if (pcount) + return 1; + + return 0; +} + static const struct pci_device_id liquidio_vf_pci_tbl[] = { { PCI_VENDOR_ID_CAVIUM, OCTEON_CN23XX_VF_VID, @@ -257,6 +311,35 @@ static void octeon_destroy_resources(struct octeon_device *oct) int i; switch (atomic_read(&oct->status)) { + case OCT_DEV_RUNNING: + case OCT_DEV_CORE_OK: + /* No more instructions will be forwarded. */ + atomic_set(&oct->status, OCT_DEV_IN_RESET); + + dev_dbg(&oct->pci_dev->dev, "Device state is now %s\n", + lio_get_state_string(&oct->status)); + + schedule_timeout_uninterruptible(HZ / 10); + + /* fallthrough */ + case OCT_DEV_HOST_OK: + /* fallthrough */ + case OCT_DEV_IO_QUEUES_DONE: + if (wait_for_pending_requests(oct)) + dev_err(&oct->pci_dev->dev, "There were pending requests\n"); + + if (lio_wait_for_instr_fetch(oct)) + dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); + + /* Disable the input and output queues now. No more packets will + * arrive from Octeon, but we should wait for all packet + * processing to finish. + */ + oct->fn_list.disable_io_queues(oct); + + if (lio_wait_for_oq_pkts(oct)) + dev_err(&oct->pci_dev->dev, "OQ had pending packets\n"); + case OCT_DEV_INTR_SET_DONE: /* Disable interrupts */ oct->fn_list.disable_interrupt(oct, OCTEON_ALL_INTR); @@ -395,6 +478,7 @@ static int octeon_pci_os_setup(struct octeon_device *oct) static int octeon_device_init(struct octeon_device *oct) { u32 rev_id; + int j; atomic_set(&oct->status, OCT_DEV_BEGIN_STATE); @@ -488,6 +572,28 @@ static int octeon_device_init(struct octeon_device *oct) atomic_set(&oct->status, OCT_DEV_INTR_SET_DONE); + /* Enable the input and output queues for this Octeon device */ + if (oct->fn_list.enable_io_queues(oct)) { + dev_err(&oct->pci_dev->dev, "enabling io queues failed\n"); + return 1; + } + + atomic_set(&oct->status, OCT_DEV_IO_QUEUES_DONE); + + atomic_set(&oct->status, OCT_DEV_HOST_OK); + + /* Send Credit for Octeon Output queues. Credits are always sent after + * the output queue is enabled. + */ + for (j = 0; j < oct->num_oqs; j++) + writel(oct->droq[j]->max_count, oct->droq[j]->pkts_credit_reg); + + /* Packets can start arriving on the output queues from this point. */ + + atomic_set(&oct->status, OCT_DEV_CORE_OK); + + atomic_set(&oct->status, OCT_DEV_RUNNING); + return 0; }