From patchwork Mon Nov 26 09:32:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003066 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="UKRXoBwW"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MCk670sz9s3q for ; Mon, 26 Nov 2018 20:33:06 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726340AbeKZU0h (ORCPT ); Mon, 26 Nov 2018 15:26:37 -0500 Received: from mail-eopbgr770051.outbound.protection.outlook.com ([40.107.77.51]:2382 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726165AbeKZU0f (ORCPT ); Mon, 26 Nov 2018 15:26:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XHEqb77klLkCKhf/jfkh0ZqvIxyv0IYtr0kEXGYjslY=; b=UKRXoBwWBo5WkqHSGhoYmo00F69ndvsPxlLfjCs5MXr+sH/6bZR5c03r68H6bzaEcW/aikt8Ak6apBUBkvx4cmp5qSy+TfNjNdi/bUKYjIzWQqHi0DImvDH1S4hwq1xwKBh9m19/qzJXYT+4Q8F+1AGmWDbcCGkpu+crrVyJUDU= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:32:59 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:32:59 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 01/21] net: usb: aqc111: Driver skeleton for Aquantia AQtion USB to 5GbE Thread-Topic: [PATCH v4 net-next 01/21] net: usb: aqc111: Driver skeleton for Aquantia AQtion USB to 5GbE Thread-Index: AQHUhWsFAiLNfYMwykmnO87PVsQDLA== Date: Mon, 26 Nov 2018 09:32:59 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:Gf/DGo/ARSei9Lsgczs2DQrF+0p80pu7qHIhJVpeD6OAntEuUepX+N/ZBE+zPUFxqUp6VL4DDxzcKsgG6IyKGaxbkuSjwifIBh/78bxriZpZdPkNw0KMd4LnqERTmgMS8SdOrKjl05Hr/4y6qqi2weo/dq6+kO1a0gshxJN6w4XnrhiihbTqKjwUcIFDNf1Se0qrEX0pFeKr8dS0TRCtt3NsCemd7O2uc3yKjWU0sqaXF6unX4JheG/9DaD92mrBrADmyat2guTBacUBGDtSspfEkdjnxprY0QOrpuGEKCTxFJUmbwO4DGpgkDdKbBlZQrMY73y2/XuBfq7HFKJgq3eP7SKiIY0dzon2u2zmjoHvYNVEcAnSXzhf6koqkWSQMNGy/NrdMCsNh1PcRLCCKOt2lcZLh7bTu6WgF+Vthn3QcrMwORU85SGgBXyMXoxfkUVbAkTNLerG1ciwzl794Q==; 5:3htK88eqJdDEupXimV5pxNI7uX6mX7E/hURHjmzaEsTd40LunI2Olrd02CJqNDHY4uOU5+Uv7uoPfOM33AxLbgpK/ZATfS5LZmS4v5vPSKbtCnbtb/T2yVbWqINUIHb8GuMUPgHOpbIyChDs+UPasaySaVB8jBp4A0dy+xq+HhI=; 7:h/OV0N7xQDnx0J7e5PmpR6CnDdLuV3l+6VI0QtL4NCW+lDQI8lNhinmVncUfqImNPeMGSEDYq/j2g168s6MQAV1Hr4h7t1wNdmSkfzL8e0cZAmVFsg4RkZ+sFPCHvnG47v+tblxDIkfbCa1yHXVYnA== x-ms-office365-filtering-correlation-id: 46d0c081-74d3-4f11-f141-08d653822760 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 2BjXncTxzrbu1S2qjtnHVIHBV9MtjgC3Hxtsg6Zs82AupmdFw8yQ1/dtDBedOatJU80E2jpaYNWExe919hrDIDKt1qEV+i7Y9uPRG1nmtLGTV08iPKULQj5scgUrmc6t7BQMtAYbBo7ertskhBqlC1LywJo2FO+TFGpTU7h2GgHaQQMfa+axUqgcoUP3rpkPbXBGNmMY/zMPmyyr2TFq5EaGg7ipx6VtGz/rJvBCj/5umblVUlz59X8no+JOyfpklXRv/ODZcPp7POIPmPPGyI5Ku9Eu587TyOiiD+lkj9naiekJeKHsLj6yhugeyuuA+JPSjFyHtw8iqwWQEwNnkD88Gn8AV9HsoADbIPYTyms= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46d0c081-74d3-4f11-f141-08d653822760 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:32:59.6647 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Initialize usb_driver structure skeleton Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/Kconfig | 12 ++++++++++ drivers/net/usb/Makefile | 1 + drivers/net/usb/aqc111.c | 48 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 drivers/net/usb/aqc111.c diff --git a/drivers/net/usb/Kconfig b/drivers/net/usb/Kconfig index 418b0904cecb..e5fb8ef2d815 100644 --- a/drivers/net/usb/Kconfig +++ b/drivers/net/usb/Kconfig @@ -613,4 +613,16 @@ config USB_NET_CH9200 To compile this driver as a module, choose M here: the module will be called ch9200. +config USB_NET_AQC111 + tristate "Aquantia AQtion USB to 5/2.5GbE Controllers support" + depends on USB_USBNET + select CRC32 + default y + help + This option adds support for Aquantia AQtion USB + Ethernet adapters based on AQC111U/AQC112 chips. + + This driver should work with at least the following devices: + * Aquantia AQtion USB to 5GbE + endif # USB_NET_DRIVERS diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile index 27307a4ab003..99fd12be2111 100644 --- a/drivers/net/usb/Makefile +++ b/drivers/net/usb/Makefile @@ -40,3 +40,4 @@ obj-$(CONFIG_USB_VL600) += lg-vl600.o obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o obj-$(CONFIG_USB_NET_CDC_MBIM) += cdc_mbim.o obj-$(CONFIG_USB_NET_CH9200) += ch9200.o +obj-$(CONFIG_USB_NET_AQC111) += aqc111.o diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c new file mode 100644 index 000000000000..96aca929b570 --- /dev/null +++ b/drivers/net/usb/aqc111.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* Aquantia Corp. Aquantia AQtion USB to 5GbE Controller + * Copyright (C) 2003-2005 David Hollis + * Copyright (C) 2005 Phil Chang + * Copyright (C) 2002-2003 TiVo Inc. + * Copyright (C) 2017-2018 ASIX + * Copyright (C) 2018 Aquantia Corp. + */ + +#include +#include +#include +#include +#include +#include + +static const struct driver_info aqc111_info = { + .description = "Aquantia AQtion USB to 5GbE Controller", +}; + +#define AQC111_USB_ETH_DEV(vid, pid, table) \ + USB_DEVICE_INTERFACE_CLASS((vid), (pid), USB_CLASS_VENDOR_SPEC), \ + .driver_info = (unsigned long)&(table) \ +}, \ +{ \ + USB_DEVICE_AND_INTERFACE_INFO((vid), (pid), \ + USB_CLASS_COMM, \ + USB_CDC_SUBCLASS_ETHERNET, \ + USB_CDC_PROTO_NONE), \ + .driver_info = (unsigned long)&(table), + +static const struct usb_device_id products[] = { + {AQC111_USB_ETH_DEV(0x2eca, 0xc101, aqc111_info)}, + { },/* END */ +}; +MODULE_DEVICE_TABLE(usb, products); + +static struct usb_driver aq_driver = { + .name = "aqc111", + .id_table = products, + .probe = usbnet_probe, + .disconnect = usbnet_disconnect, +}; + +module_usb_driver(aq_driver); + +MODULE_DESCRIPTION("Aquantia AQtion USB to 5/2.5GbE Controllers"); +MODULE_LICENSE("GPL"); From patchwork Mon Nov 26 09:33:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003067 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="fB5iRKRn"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MCp1PwGz9s3C for ; Mon, 26 Nov 2018 20:33:10 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726357AbeKZU0j (ORCPT ); Mon, 26 Nov 2018 15:26:39 -0500 Received: from mail-eopbgr770051.outbound.protection.outlook.com ([40.107.77.51]:2382 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726325AbeKZU0g (ORCPT ); Mon, 26 Nov 2018 15:26:36 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=il5hEo6qo93YqtsC/s7st6mFX8OCl+reC3l9+lO/g30=; b=fB5iRKRnmj7EvmBdGSBtH8xJPA0l6n7/EFpXGxYMSVziRXeClQsmcbSJouLG4dgGfaamz89eMMoj8Dgrp6sr3uCLtbsiPMpJBnIUS0AwoWY4VUGALpdJ1zGEI2eIeEGotBIcha1f2mMgLv6f0qLhb1mYluYTrWSwFD7UaModQB0= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:02 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:02 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 02/21] net: usb: aqc111: Add bind and empty unbind callbacks Thread-Topic: [PATCH v4 net-next 02/21] net: usb: aqc111: Add bind and empty unbind callbacks Thread-Index: AQHUhWsGRpTRLr3zGkmJ7mc6sQ8D4w== Date: Mon, 26 Nov 2018 09:33:02 +0000 Message-ID: <23476aa9677cedc1d24179dd32c64a72432d0852.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:wz5IvPJgB/IzKfmbL5/S8burXvX5jHfFl3lTxf6i3easd8QL+2IEr139I3ZX6Obh39TLJ+OZTc8pey8jETvZJKjWRGbLMjAKhVFUtjYkYGgiQ3uLp1hQbI0GiE89z6ivXg73ndyedqD+ukoGA4i/A+U1nCrU+BJzQYWx16MmpP3d75VeM9cTc7Hr6LIRDAS9hqmbv/j+6p4hi7bC/YEtAbMSVC7+VIrM3EXfYeafwvoSDe1ZOAp8EdOMOMdnrXEhQiQ3H3I+hTheMRv/fbDpyHcvu6B7Zp+/Nc+pUawV0J+GYb073blrC4b+YsozjS8rdKiWqW9LnMSeOn+5ajZJcUYVmr5VTIDlKQMPoJ60hLsQacSY0TLhaO7D3eAWmUoQHLv77JpXDh/D4zlEuRcOZk3dddHXvlAlYhWopMSJtXeGpy6trfG51jo0uSuXGy2TqbzhXQdCPCg6Kp4z/ZptLg==; 5:PuXcZ4RXk5WVfra9C8cqbSj4rARUy/qj/iHGnVyYceVz8kdGwGDl9Lt0U/X0GynG0yHxLaAZ9vDpMKPUP3ZONFl1eRHgleYNzwi3oH1pnw1UwDnixZ3RGqCsQi/dF1g4FvVx/2UBFwzk1m9kQKAX0Z0zJ9qrag5eb7gpbEAqrJE=; 7:y6TEMZ3w/q0T0I1MK6e51nsnMtZRfGH0tABl9ooI4DiFFqGKUFQVeNwj2kkxUZtGVbpaJ2Cwu3VrsCMM0l/PSpxAz1BJhmNy5uw3N64i/MxbadSgtLfJuvIl5tbjdsy9F9V65hqwkMH0uGEJICWuDQ== x-ms-office365-filtering-correlation-id: d505ce4d-a0e2-4aee-0c5c-08d6538228dc x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: NGG7i6tc0WBavmYJA2CNhNeurLQrP0SuG/Qb4F9AGBVmiCauCYw3w1BQoTO5cRthhkxVcT/sfIhs+NLGAymUniJvgBEC72EbQKLfdNi17P3+1A1c3ee+7YteAjRsybTeDOuq0RjoegHQTrXkBoKQYGRQf3wRv7xXYpSPjooiFcUil3kor5v/w55seqRme1FUVSotcIdR8V1bv5dDd22R3IZCRjFFmHHhbwFHO8Qc4r34k1z1cCdlmJ2y6OeeDkakHI7zzWyo/Ubl2cdvR8srzvkg/C+MoXrqIU/Ka27D+nYpt0uLSkBLL5FOyBQEIIBrouAqiprGFNmFoVU2hUZVTswZXGXSzXxW3rd9ojLX3M8= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d505ce4d-a0e2-4aee-0c5c-08d6538228dc X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:02.0398 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Initialize net_device_ops structure Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 96aca929b570..a2628856c580 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -14,8 +14,43 @@ #include #include +static const struct net_device_ops aqc111_netdev_ops = { + .ndo_open = usbnet_open, + .ndo_stop = usbnet_stop, +}; + +static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) +{ + struct usb_device *udev = interface_to_usbdev(intf); + int ret; + + /* Check if vendor configuration */ + if (udev->actconfig->desc.bConfigurationValue != 1) { + usb_driver_set_configuration(udev, 1); + return -ENODEV; + } + + usb_reset_configuration(dev->udev); + + ret = usbnet_get_endpoints(dev, intf); + if (ret < 0) { + netdev_dbg(dev->net, "usbnet_get_endpoints failed"); + return ret; + } + + dev->net->netdev_ops = &aqc111_netdev_ops; + + return 0; +} + +static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) +{ +} + static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", + .bind = aqc111_bind, + .unbind = aqc111_unbind, }; #define AQC111_USB_ETH_DEV(vid, pid, table) \ From patchwork Mon Nov 26 09:33:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003068 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="N0g1ssev"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MCr2lbNz9s3C for ; Mon, 26 Nov 2018 20:33:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726349AbeKZU0j (ORCPT ); Mon, 26 Nov 2018 15:26:39 -0500 Received: from mail-eopbgr770088.outbound.protection.outlook.com ([40.107.77.88]:41476 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726165AbeKZU0i (ORCPT ); Mon, 26 Nov 2018 15:26:38 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=S/URxoN3WJzHeqXRMwKxORwhrJdIPQ1n0xeiffvf418=; b=N0g1ssevq0WK6NkMMFzJ1cHCHnWcW1wzKNRCn/U0hkZhmwYrF/YIkxk4qAFWGI/wmAbFfETrXN/nFWO09Be4rOpUlE7dy5ye9ObYLrUTU3CmJd39I5c+EfC0+bcGMWpkX/X15bLqbSyI/8iutNVDY8AtZys/223zDIAax0I0Jr0= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:04 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:04 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 03/21] net: usb: aqc111: Add implementation of read and write commands Thread-Topic: [PATCH v4 net-next 03/21] net: usb: aqc111: Add implementation of read and write commands Thread-Index: AQHUhWsIMTzJoZI5g02Nphdru2+hzA== Date: Mon, 26 Nov 2018 09:33:04 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:muGNNrfyfPFgajBZoGBafTH5jXUHFVhl1jjN96okMeFPMbZfdH6PiQ2X0ouGb8uL8SdBVoFuCo6tJGxrpCOMgCS0TBVGz9b1mujM92mISm8TU89ca/jfvuSHI3diwOG3Wg7H48lOKmN9S29NJk8PH4iO5Ya0mhej36ScSwJPbWbGMq+D3VGR9xrCmJL8JFrO1qKKuR0RRDaLE2EKqg8rS5t690zn72w3hJu3gf5F/BLFiAO97FoXWT4fu751LyCcFg5WJopG4J0a8M4LFWUDaeNOkN7ZKSD1DQCE00gtoLE0uzQhWnrN/bjDAT5oYq3Muebyh+KaBHXJ2QFpz6NUgakEYWTWbFZPit8Bc3LnkxdxMhNiGmHgN87GL9JhAAOsV51V8W78/vH1yhjSTqSgTlvTFOet/79wjJ0GNiQA35/HpPIfti0q/1sIx378H9tKQKAp8yAALe3Zjc04Ac7GVw==; 5:9PW4ivkmYWv61GGUpd1nqgZ0BvRMkCKYCwru1FohJ0mu9wOEGdzGVFfVF+6qmB1gukTqtkImtCaNYaDJ/lCQg6zB9WrnsCZHkgKdJb9bV7CRfjKf2nsgGhYTFzp1mbQSXysl1nbw9ZGQcVtNGIDfdSz378Cvpp6a43netGT1AnQ=; 7:txuwG3zrhhBBSoegI6deadK926pqFkq0EBrpKHGa3weL1D31iYdXAR6xFtvrTnBpeHcFTGMODoRzaxOkWJsVGvurLdEGl9Y+z4obIOpmi4uIffCXruRcCHg30gC2cBTs6C/8/+e7bNWmQ63o3pN6Rw== x-ms-office365-filtering-correlation-id: 94c2097f-9572-448d-767c-08d653822a46 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: cDvfHpiMu4OwvgXqYQs2QecSpAOT4c8poAjv5fpeX/Ybj7JVfBi2nCcYw5DTAxGwn0Bdo6XgEU/LgjfBebJedkzhBXLevWaak1yjuoRcnaZpgET259ZRo1asBdjj330yGguESUb0Vj3XAfoGcXEmQRutKZyrXxUcoe6YvgWjETeVxt1DRWtfiQ1TPDW/mBl7TzhiemhaoXUY1qPMwg3RgdnFkvtB4/VZaTKxUgihOICdam/jw/2uoOmfLbm+v57QtiVDqatEhrrCpN3lvMMvK4VU+TynQUZkOLGqet/Fx8wQ/h3nIS+3My8taqTzh8ZHh7TnM0oq7FaLMMx+UAbCdQeBmlhzBMwUpJ/uTd2Z88c= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 94c2097f-9572-448d-767c-08d653822a46 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:04.5868 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Read/write command register defines and functions Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 92 ++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 18 ++++++++ 2 files changed, 110 insertions(+) create mode 100644 drivers/net/usb/aqc111.h diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index a2628856c580..fbd48b8a6944 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -14,6 +14,98 @@ #include #include +#include "aqc111.h" + +static int aqc111_read_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret = usbnet_read_cmd_nopm(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, size); + + if (unlikely(ret < 0)) + netdev_warn(dev->net, + "Failed to read(0x%x) reg index 0x%04x: %d\n", + cmd, index, ret); + + return ret; +} + +static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret = usbnet_read_cmd(dev, cmd, USB_DIR_IN | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, size); + + if (unlikely(ret < 0)) + netdev_warn(dev->net, + "Failed to read(0x%x) reg index 0x%04x: %d\n", + cmd, index, ret); + + return ret; +} + +static int __aqc111_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, + u16 value, u16 index, u16 size, const void *data) +{ + int err = -ENOMEM; + void *buf = NULL; + + netdev_dbg(dev->net, + "%s cmd=%#x reqtype=%#x value=%#x index=%#x size=%d\n", + __func__, cmd, reqtype, value, index, size); + + if (data) { + buf = kmemdup(data, size, GFP_KERNEL); + if (!buf) + goto out; + } + + err = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), + cmd, reqtype, value, index, buf, size, + (cmd == AQ_PHY_POWER) ? AQ_USB_PHY_SET_TIMEOUT : + AQ_USB_SET_TIMEOUT); + + if (unlikely(err < 0)) + netdev_warn(dev->net, + "Failed to write(0x%x) reg index 0x%04x: %d\n", + cmd, index, err); + kfree(buf); + +out: + return err; +} + +static int aqc111_write_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + ret = __aqc111_write_cmd(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, size, data); + + return ret; +} + +static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + int ret; + + if (usb_autopm_get_interface(dev->intf) < 0) + return -ENODEV; + + ret = __aqc111_write_cmd(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, size, data); + + usb_autopm_put_interface(dev->intf); + + return ret; +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h new file mode 100644 index 000000000000..f4302f7f0cc3 --- /dev/null +++ b/drivers/net/usb/aqc111.h @@ -0,0 +1,18 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later + * Aquantia Corp. Aquantia AQtion USB to 5GbE Controller + * Copyright (C) 2003-2005 David Hollis + * Copyright (C) 2005 Phil Chang + * Copyright (C) 2002-2003 TiVo Inc. + * Copyright (C) 2017-2018 ASIX + * Copyright (C) 2018 Aquantia Corp. + */ + +#ifndef __LINUX_USBNET_AQC111_H +#define __LINUX_USBNET_AQC111_H + +#define AQ_PHY_POWER 0x31 + +#define AQ_USB_PHY_SET_TIMEOUT 10000 +#define AQ_USB_SET_TIMEOUT 4000 + +#endif /* __LINUX_USBNET_AQC111_H */ From patchwork Mon Nov 26 09:33:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003069 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="OzhbmWJh"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MCv2R88z9s3C for ; Mon, 26 Nov 2018 20:33:15 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726370AbeKZU0p (ORCPT ); Mon, 26 Nov 2018 15:26:45 -0500 Received: from mail-eopbgr710041.outbound.protection.outlook.com ([40.107.71.41]:44880 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726225AbeKZU0o (ORCPT ); Mon, 26 Nov 2018 15:26:44 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DVP4z6nWougUwGRYovyvxR2itnbbNkymCzjwBlWfEdE=; b=OzhbmWJh7bcJnTZRx6Hz98vaOALCTqXI4qEeQhljOT7EpG9xFKbIyjCFArDqXoqKWXML2CM7V2Rae6huaORS2gkjQKvwvmgSuw6+9xJSvB08OKDUrYumd3UUzhEmeHmnwlLbFY5xiNlnrkzwcI+sy4ZjvkdJnIQ3lP5JclvcRlE= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:07 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:07 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 04/21] net: usb: aqc111: Various callbacks implementation Thread-Topic: [PATCH v4 net-next 04/21] net: usb: aqc111: Various callbacks implementation Thread-Index: AQHUhWsJK7JISOklCU+AsNc4g/jmbg== Date: Mon, 26 Nov 2018 09:33:07 +0000 Message-ID: <8f2ab30ccbac15d0d65593a5760878c8ecda6e47.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:mLoOv4XIcZTByT/N1Pe2zrQUrBRZsh+5WxQOg6yIBu8DRGUnEPGzth2o2Mg12ozVbwM1XfExojSZsiNGX4XqUFf4psmP6yHCJERwXlN5x5PsGvC9IrVZVhxOgmcgGe9qznVpk5CISwI5tIiBn6GYt4dSd67O/2m4TK7jTdCHbp7tINkepNiJtmE20Lb2Z4h3pazN0LlawAhz8L/Ls81ZsQUVp17mfpHc06J4axAj8YfnE61jJ/IKu/zssJ59xWRWRGHvs621XrpXpP5OvpMNztmcfSK7yPo/4PrgltI/9Ke9jqnn0ah7EiYb7r9uKpov7p8Qx2TBzsPrNP2whZjaMV/E+rhvw+SWl4TrhzXdFeXlLyl/EKMm2n5l2AXdfVxjPVVrUI2qZHTYpP+bZTxx/pDP2aOTy90gUZLDvxEm1NIC5sflfxKZseFhpvQXsGaERo9exp6PFMn9uMpyX4uXCQ==; 5:KVKcoj3DZdDF2H7AheM7ItzrJUqSVf+3t1BcSnm24pSKS4N+bmO6Dy5v6SfLWCj3Xv6tFXwokoM0Ke5hs9rl4cHqoA1RasRTHNdxFGU+C24fC6y2XHQzPh70Drd0SPj0iY+BmorPdJ9l0wYOJGX0LWd2t3iRjCVP9WnixXRKLQ8=; 7:YQrVIWPtXKWnY/iidxfVbY3+r9XGvYSXKz3LFE5VY3jegcZKm9YzEzMJD3qWKPaZ3VOnL6/6yE2IGnInbPpIO5du1OELJnbfRAAbSxj2GZtdZp+/jcSl0aDBm4Ydq1aQUaOjhSfgcK08oVoYlIIEPQ== x-ms-office365-filtering-correlation-id: a6110b5f-d9fb-4d0d-2cd1-08d653822bfd x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: JoomI4nHnnD/Cj8aZ1UaI7z9GfVaGgbvbJMYAzbde2yygwC12k9PwSdLSuOXO1DhtFEnGTW/GiSxHy8YlAwvxaxUjoVh09Uix7fKHV+R6hIp2c4QtzZut2o+8fOZSWLTOO1ybfCCPLIB6U0VYHsJXUQMDzadsoamqn9uv0DymRazNKHNNunJtlTsHqwVhQzAt5gWLgq6DTm8wjCGb2Mbv7Hbv6zvmPgvozX+pdgazswW6W9enJh9gDm94OiTQCH8vhFDmOEvMaeLDNOC+sjfOzr/LNa72OVjioPj2RiNuvySiyq53pne+CpUWVtlhL6yM3wC+axIF6qNoVbTMGYfxkPx/ow4o0S5E8/yBUHciVU= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a6110b5f-d9fb-4d0d-2cd1-08d653822bfd X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:07.2745 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Reset, stop callbacks, driver unbind callback. More register defines required for these callbacks. Add helpers to read/write 16bit values Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 76 +++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 101 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index fbd48b8a6944..75849714abfa 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -48,6 +48,17 @@ static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, return ret; } +static int aqc111_read16_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + int ret = 0; + + ret = aqc111_read_cmd(dev, cmd, value, index, sizeof(*data), data); + le16_to_cpus(data); + + return ret; +} + static int __aqc111_write_cmd(struct usbnet *dev, u8 cmd, u8 reqtype, u16 value, u16 index, u16 size, const void *data) { @@ -106,6 +117,26 @@ static int aqc111_write_cmd(struct usbnet *dev, u8 cmd, u16 value, return ret; } +static int aqc111_write16_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + u16 tmp = *data; + + cpu_to_le16s(&tmp); + + return aqc111_write_cmd_nopm(dev, cmd, value, index, sizeof(tmp), &tmp); +} + +static int aqc111_write16_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + u16 tmp = *data; + + cpu_to_le16s(&tmp); + + return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, @@ -137,12 +168,57 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) { + u16 reg16; + + /* Force bz */ + reg16 = SFR_PHYPWR_RSTCTL_BZ; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); + reg16 = 0; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); +} + +static int aqc111_reset(struct usbnet *dev) +{ + u8 reg8 = 0; + + reg8 = 0xFF; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, 1, 1, ®8); + + reg8 = 0x0; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_SWP_CTRL, 1, 1, ®8); + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_MONITOR_MODE, 1, 1, ®8); + reg8 &= ~(SFR_MONITOR_MODE_EPHYRW | SFR_MONITOR_MODE_RWLC | + SFR_MONITOR_MODE_RWMP | SFR_MONITOR_MODE_RWWF | + SFR_MONITOR_MODE_RW_FLAG); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MONITOR_MODE, 1, 1, ®8); + + return 0; +} + +static int aqc111_stop(struct usbnet *dev) +{ + u16 reg16 = 0; + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 = 0; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + return 0; } static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", .bind = aqc111_bind, .unbind = aqc111_unbind, + .reset = aqc111_reset, + .stop = aqc111_stop, }; #define AQC111_USB_ETH_DEV(vid, pid, table) \ diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index f4302f7f0cc3..a252ccd78559 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -10,9 +10,110 @@ #ifndef __LINUX_USBNET_AQC111_H #define __LINUX_USBNET_AQC111_H +#define AQ_ACCESS_MAC 0x01 #define AQ_PHY_POWER 0x31 #define AQ_USB_PHY_SET_TIMEOUT 10000 #define AQ_USB_SET_TIMEOUT 4000 +/* SFR Reg. ********************************************/ + +#define SFR_GENERAL_STATUS 0x03 +#define SFR_CHIP_STATUS 0x05 +#define SFR_RX_CTL 0x0B + #define SFR_RX_CTL_TXPADCRC 0x0400 + #define SFR_RX_CTL_IPE 0x0200 + #define SFR_RX_CTL_DROPCRCERR 0x0100 + #define SFR_RX_CTL_START 0x0080 + #define SFR_RX_CTL_RF_WAK 0x0040 + #define SFR_RX_CTL_AP 0x0020 + #define SFR_RX_CTL_AM 0x0010 + #define SFR_RX_CTL_AB 0x0008 + #define SFR_RX_CTL_AMALL 0x0002 + #define SFR_RX_CTL_PRO 0x0001 + #define SFR_RX_CTL_STOP 0x0000 +#define SFR_INTER_PACKET_GAP_0 0x0D +#define SFR_NODE_ID 0x10 +#define SFR_MULTI_FILTER_ARRY 0x16 +#define SFR_MEDIUM_STATUS_MODE 0x22 + #define SFR_MEDIUM_XGMIIMODE 0x0001 + #define SFR_MEDIUM_FULL_DUPLEX 0x0002 + #define SFR_MEDIUM_RXFLOW_CTRLEN 0x0010 + #define SFR_MEDIUM_TXFLOW_CTRLEN 0x0020 + #define SFR_MEDIUM_JUMBO_EN 0x0040 + #define SFR_MEDIUM_RECEIVE_EN 0x0100 +#define SFR_MONITOR_MODE 0x24 + #define SFR_MONITOR_MODE_EPHYRW 0x01 + #define SFR_MONITOR_MODE_RWLC 0x02 + #define SFR_MONITOR_MODE_RWMP 0x04 + #define SFR_MONITOR_MODE_RWWF 0x08 + #define SFR_MONITOR_MODE_RW_FLAG 0x10 + #define SFR_MONITOR_MODE_PMEPOL 0x20 + #define SFR_MONITOR_MODE_PMETYPE 0x40 +#define SFR_PHYPWR_RSTCTL 0x26 + #define SFR_PHYPWR_RSTCTL_BZ 0x0010 + #define SFR_PHYPWR_RSTCTL_IPRL 0x0020 +#define SFR_VLAN_ID_ADDRESS 0x2A +#define SFR_VLAN_ID_CONTROL 0x2B + #define SFR_VLAN_CONTROL_WE 0x0001 + #define SFR_VLAN_CONTROL_RD 0x0002 + #define SFR_VLAN_CONTROL_VSO 0x0010 + #define SFR_VLAN_CONTROL_VFE 0x0020 +#define SFR_VLAN_ID_DATA0 0x2C +#define SFR_VLAN_ID_DATA1 0x2D +#define SFR_RX_BULKIN_QCTRL 0x2E + #define SFR_RX_BULKIN_QCTRL_TIME 0x01 + #define SFR_RX_BULKIN_QCTRL_IFG 0x02 + #define SFR_RX_BULKIN_QCTRL_SIZE 0x04 +#define SFR_RX_BULKIN_QTIMR_LOW 0x2F +#define SFR_RX_BULKIN_QTIMR_HIGH 0x30 +#define SFR_RX_BULKIN_QSIZE 0x31 +#define SFR_RX_BULKIN_QIFG 0x32 +#define SFR_RXCOE_CTL 0x34 + #define SFR_RXCOE_IP 0x01 + #define SFR_RXCOE_TCP 0x02 + #define SFR_RXCOE_UDP 0x04 + #define SFR_RXCOE_ICMP 0x08 + #define SFR_RXCOE_IGMP 0x10 + #define SFR_RXCOE_TCPV6 0x20 + #define SFR_RXCOE_UDPV6 0x40 + #define SFR_RXCOE_ICMV6 0x80 +#define SFR_TXCOE_CTL 0x35 + #define SFR_TXCOE_IP 0x01 + #define SFR_TXCOE_TCP 0x02 + #define SFR_TXCOE_UDP 0x04 + #define SFR_TXCOE_ICMP 0x08 + #define SFR_TXCOE_IGMP 0x10 + #define SFR_TXCOE_TCPV6 0x20 + #define SFR_TXCOE_UDPV6 0x40 + #define SFR_TXCOE_ICMV6 0x80 +#define SFR_BM_INT_MASK 0x41 +#define SFR_BMRX_DMA_CONTROL 0x43 + #define SFR_BMRX_DMA_EN 0x80 +#define SFR_BMTX_DMA_CONTROL 0x46 +#define SFR_PAUSE_WATERLVL_LOW 0x54 +#define SFR_PAUSE_WATERLVL_HIGH 0x55 +#define SFR_ARC_CTRL 0x9E +#define SFR_SWP_CTRL 0xB1 +#define SFR_TX_PAUSE_RESEND_T 0xB2 +#define SFR_ETH_MAC_PATH 0xB7 + #define SFR_RX_PATH_READY 0x01 +#define SFR_BULK_OUT_CTRL 0xB9 + #define SFR_BULK_OUT_FLUSH_EN 0x01 + #define SFR_BULK_OUT_EFF_EN 0x02 + +static struct { + unsigned char ctrl; + unsigned char timer_l; + unsigned char timer_h; + unsigned char size; + unsigned char ifg; +} AQC111_BULKIN_SIZE[] = { + /* xHCI & EHCI & OHCI */ + {7, 0x00, 0x01, 0x1E, 0xFF},/* 10G, 5G, 2.5G, 1G */ + {7, 0xA0, 0x00, 0x14, 0x00},/* 100M */ + /* Jumbo packet */ + {7, 0x00, 0x01, 0x18, 0xFF}, +}; + #endif /* __LINUX_USBNET_AQC111_H */ From patchwork Mon Nov 26 09:33:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003070 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="UCcyHM5F"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MCw5Ng5z9s3q for ; Mon, 26 Nov 2018 20:33:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726380AbeKZU0q (ORCPT ); Mon, 26 Nov 2018 15:26:46 -0500 Received: from mail-eopbgr710041.outbound.protection.outlook.com ([40.107.71.41]:44880 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726290AbeKZU0p (ORCPT ); Mon, 26 Nov 2018 15:26:45 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=35/xEmWnATR0tEivloys7HmQ8pOVRFwtcwLQsyp6BDg=; b=UCcyHM5Fv/JTQhwA46NSAB9JRfy7l+ex7qadLFlJPcP1T6+e8hKDpSgjhV2Dq9OWv2HUMQ6ECwjtI44ArmeJf4Ei5PcBP+LgXhaKMvOyN/qNpFG/7hENvLB7Z056uMnZaaGNekx02S4eV/NG2S980lC979YYVkGkGYvYDBpdJAg= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:09 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:09 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 05/21] net: usb: aqc111: Introduce PHY access Thread-Topic: [PATCH v4 net-next 05/21] net: usb: aqc111: Introduce PHY access Thread-Index: AQHUhWsL5LW9t6lLRUOp+GSR2KybKg== Date: Mon, 26 Nov 2018 09:33:09 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:wYWfQdO5k6sZmZX+6PdTQ1KFw1CuE5RUdRxr8XUrQsqOKuZMaTByM2MM11k7s0MkkJq01ahR7lF0MdI1veiQ0y7IHOR7pSwhIbi+4hJntttOcw9C1DE6fqSGfpMfNYejuHsnjcQUWKfSJ/1ljfqNTZktzriRVfRSmnyyR/yERvrMjxahDfAhKjInAUe2ca53GXxmi/flVnn22dBFRjlHTwle2vRR45VUMCEM+F1p4vv1YxzXEfbcCd8rtMH8MMFLQZzGzZAkIGajy/iAXO7qzi+mj8HGStUePcrgV4P7BAiQVUW35s6vO16L3LCrBkYIMUd0hbIJg7O9DQlHLPsw59dZ95RnNnVNDlZP+1QKpqTD0C8nUpne1eIwu0oAcP5s9Kpxcop0HV4QXfw7gJe0y74HpCbKpDJWIYuDzNzgDaRZU8le57NUCmktQXB4Y16qjTGoKwemYC/uBL5FxJn64w==; 5:2ki0nxy8ZWd4oQmomzEzkxBcV4/edFKq0oVbIIo6UFULqQAWunrsyswhR3ptEoGPxXgXN0z50ge6LNghjPezUTBY23e+HmSiTxvdyYBNwDiC1k6BQp22UK/yH2HBgeeLmBrIN5HyjGrI/Kie/7flevEYpKKLaztTyjkErnmIY30=; 7:NWT95+4U/0qOrFZUCSkDIQHr9tIKQt22JbiicnRDIzUlbBtXZSt0/QLrFZ63fkKXlLhgy0vOSHpHavpTBmE9QTgm34y+9GpvD/5jsj7DcPaNq8TOKSQoQA86YST9ZmUcZbFVrajYG1nJK5sfCF8csQ== x-ms-office365-filtering-correlation-id: 9b493d78-b6db-43fc-96f1-08d653822d67 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: wPrYiYajtd5xsGsP2m784T35ume6IE+L9eHswcim8TWs5q7DDzK+pjPjpYmSZ46mCaKzrEYJqIA6ICxJs/zNThmOekgwZyCPdz4IEVdqXtYlXNPeoPzEpccFFb4GcPqgYWM3mC0kQyXhQTkfxmQz1ypWWYZwzpXJCJfrRTZXgsCcDXzRaZH9K6mWqoPT3oo1+BduROFQwSvpa88G80bhpzyjWe4r7zFfOpTaHYpt00bfLheq09afvZoyVbXvnEbAs8xWUqXlciCrMDLcjkt1n39PuPT5ORZ/v9ZAQdIkWNI1xz0wdofYvy8NIVC11fCBhcXvCpBLpGS9nfma3kaxkV/CHQcgVndueRWbzA80R0Y= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b493d78-b6db-43fc-96f1-08d653822d67 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:09.6652 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Add helpers to write 32bit values. Implement PHY power up/down sequences. AQC111, PHY is being controlled via vendor command interface. Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 65 ++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 33 ++++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 75849714abfa..e277209df616 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -137,14 +137,49 @@ static int aqc111_write16_cmd(struct usbnet *dev, u8 cmd, u16 value, return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); } +static int aqc111_write32_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u32 *data) +{ + u32 tmp = *data; + + cpu_to_le32s(&tmp); + + return aqc111_write_cmd_nopm(dev, cmd, value, index, sizeof(tmp), &tmp); +} + +static int aqc111_write32_cmd(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u32 *data) +{ + u32 tmp = *data; + + cpu_to_le32s(&tmp); + + return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, }; +static void aqc111_read_fw_version(struct usbnet *dev, + struct aqc111_data *aqc111_data) +{ + aqc111_read_cmd(dev, AQ_ACCESS_MAC, AQ_FW_VER_MAJOR, + 1, 1, &aqc111_data->fw_ver.major); + aqc111_read_cmd(dev, AQ_ACCESS_MAC, AQ_FW_VER_MINOR, + 1, 1, &aqc111_data->fw_ver.minor); + aqc111_read_cmd(dev, AQ_ACCESS_MAC, AQ_FW_VER_REV, + 1, 1, &aqc111_data->fw_ver.rev); + + if (aqc111_data->fw_ver.major & 0x80) + aqc111_data->fw_ver.major &= ~0x80; +} + static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) { struct usb_device *udev = interface_to_usbdev(intf); + struct aqc111_data *aqc111_data; int ret; /* Check if vendor configuration */ @@ -161,13 +196,23 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) return ret; } + aqc111_data = kzalloc(sizeof(*aqc111_data), GFP_KERNEL); + if (!aqc111_data) + return -ENOMEM; + + /* store aqc111_data pointer in device data field */ + dev->driver_priv = aqc111_data; + dev->net->netdev_ops = &aqc111_netdev_ops; + aqc111_read_fw_version(dev, aqc111_data); + return 0; } static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) { + struct aqc111_data *aqc111_data = dev->driver_priv; u16 reg16; /* Force bz */ @@ -177,12 +222,26 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) reg16 = 0; aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, 2, ®16); + + /* Power down ethernet PHY */ + aqc111_data->phy_cfg |= AQ_LOW_POWER; + aqc111_data->phy_cfg &= ~AQ_PHY_POWER_EN; + aqc111_write32_cmd_nopm(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + + kfree(aqc111_data); } static int aqc111_reset(struct usbnet *dev) { + struct aqc111_data *aqc111_data = dev->driver_priv; u8 reg8 = 0; + /* Power up ethernet PHY */ + aqc111_data->phy_cfg = AQ_PHY_POWER_EN; + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + reg8 = 0xFF; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, 1, 1, ®8); @@ -200,6 +259,7 @@ static int aqc111_reset(struct usbnet *dev) static int aqc111_stop(struct usbnet *dev) { + struct aqc111_data *aqc111_data = dev->driver_priv; u16 reg16 = 0; aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, @@ -210,6 +270,11 @@ static int aqc111_stop(struct usbnet *dev) reg16 = 0; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + /* Put PHY to low power*/ + aqc111_data->phy_cfg |= AQ_LOW_POWER; + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + return 0; } diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index a252ccd78559..a93d34af76b9 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -12,6 +12,7 @@ #define AQ_ACCESS_MAC 0x01 #define AQ_PHY_POWER 0x31 +#define AQ_PHY_OPS 0x61 #define AQ_USB_PHY_SET_TIMEOUT 10000 #define AQ_USB_SET_TIMEOUT 4000 @@ -102,6 +103,38 @@ #define SFR_BULK_OUT_FLUSH_EN 0x01 #define SFR_BULK_OUT_EFF_EN 0x02 +#define AQ_FW_VER_MAJOR 0xDA +#define AQ_FW_VER_MINOR 0xDB +#define AQ_FW_VER_REV 0xDC + +/*PHY_OPS**********************************************************************/ + +#define AQ_ADV_100M BIT(0) +#define AQ_ADV_1G BIT(1) +#define AQ_ADV_2G5 BIT(2) +#define AQ_ADV_5G BIT(3) + +#define AQ_PAUSE BIT(16) +#define AQ_ASYM_PAUSE BIT(17) +#define AQ_LOW_POWER BIT(18) +#define AQ_PHY_POWER_EN BIT(19) +#define AQ_WOL BIT(20) +#define AQ_DOWNSHIFT BIT(21) + +#define AQ_DSH_RETRIES_SHIFT 0x18 +#define AQ_DSH_RETRIES_MASK 0xF000000 + +/******************************************************************************/ + +struct aqc111_data { + struct { + u8 major; + u8 minor; + u8 rev; + } fw_ver; + u32 phy_cfg; +}; + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Mon Nov 26 09:33:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003072 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="i7xfLwgX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MD01B8Nz9s3q for ; Mon, 26 Nov 2018 20:33:20 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726394AbeKZU0t (ORCPT ); Mon, 26 Nov 2018 15:26:49 -0500 Received: from mail-eopbgr710041.outbound.protection.outlook.com ([40.107.71.41]:44880 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726225AbeKZU0q (ORCPT ); Mon, 26 Nov 2018 15:26:46 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WPRfsTC73J7eTSun+8wUM8zLrTRP3v6ZHqxooBEpyV4=; b=i7xfLwgXS3U0m95xr7FRKqSwbtZJK4XEWwEwsz7q/LvyGmAXJQ7/U5V97ynpB+TVxZFUArr/alQomyfnqeT1tPrdeLlE4vmK+TSlSureQcftj7AZM1n6FdgErEVWfGCmFIPR0pBKuaYrcpoTHIIodt0r1W0TmjL5ps2WE3X9Gf0= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:12 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:12 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 06/21] net: usb: aqc111: Introduce link management Thread-Topic: [PATCH v4 net-next 06/21] net: usb: aqc111: Introduce link management Thread-Index: AQHUhWsMncWmdS+vRU27Z+LznVnN+g== Date: Mon, 26 Nov 2018 09:33:12 +0000 Message-ID: <10f3091f08b3b518de3e37eb4cb86f6a3089d472.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:OFiO1PEhpxJF+KDCsH/j2K/OQbHVC1poZdm1IbPDAIgEjkEp3wrkIvAq2IRs1+Rpju+JFQc3b7vYKmUJzZu3BlHXmU6QBZ7QTFg3uEzlMb4ONsXowhs4JJmk6rXdu1d4zRHlBvbUSV7IwlXc0WKU3GjUfwZVVnmzkBZRnXf2i1+KoZu76Qq1e+w7PpNNfKduDRZytE5uqdHHczXf1fE6NreRKW4xSeUKNSkE5pjlRetLEAoKtHyrDIpST03uoHCW8oc6VZOpQnXFmyBsf2ZCDsTJy4TSmb+rP0WfP51Hrb2Q2KUVoZvOjjGGqZ0rONJbsCrNqN+caPWMFMFkHBTK/R9mrE4AZyJ/PUosMa9U/0eGat4L9KFXlHuxVOZGmEIvV6hsZfzVcjuzLVNeuEH8qxqbKCQ4lTLwfIzBdY/APJskUCPid3KjbTLtIJkhc+qaoOg0Uvm+gmHeeyiniT4FsA==; 5:0f0lEhcCq2FQItLgQnixotPUSxPVDiMhN/uC4chuSpCps+T+eFJRL5Eys5LnpX2o77AsX62I6biUqruHgLyXjiMXjprGGdn1983v3ORcIUpGu/tZj2pCs65o9eVUlpozn/53tanf1flpdUEi43FZaR/t75FaidbAvERTo5qWgtA=; 7:Jkiw3NCTi/vW08LDKBtOF8gZVdAJ7UfG7XViscOkUfXP98kYOYnuQ1AQcw1TcAyc4xrjCy+rco7LY9KXvtNOZyEqRhIoy03KHj4fNuLRbXGS/XU9HwccnEmfFO3aROfSngAs6sttR9fWsjJTfqdC+Q== x-ms-office365-filtering-correlation-id: cd885c99-ca19-4535-6379-08d653822ed4 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: iRTVHeqiSAeHtGRwYcW/VH4ULfCUIA4UK9oqha0osqB79gsNrQVZaAvod/pje1iv1Fmz34Efq/jZrhm2mkhlPygQX99ig5hruchpK6gzjZD8BwfWjwSm7hxOOTeuSl9rnuaNklCgQ3YJYafS1+r7Sdy16wUVcAz5+GXa+RJ+UleAiBpa5Hihq0+Ykbhjt6L2p7EcitT2lCe/fg4j2Sby2ac0MdJEbHfIEmPmafBqR7ipto9fYS811djdaZPFB/QzgGANNiq9tnV1vJE6/uO557WNaCD66Hza1f7zQJeElMYzkZXhvC/J4LRJp7DySTQmyNi9LpXvD4FfeiGb3arJ19QYfruNb6c+Foa/o4p0y40= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: cd885c99-ca19-4535-6379-08d653822ed4 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:12.0404 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Add full hardware initialization sequence and link configuration logic Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 235 +++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 13 +++ 2 files changed, 248 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index e277209df616..e33be16b506c 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -157,6 +157,53 @@ static int aqc111_write32_cmd(struct usbnet *dev, u8 cmd, u16 value, return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); } +static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) +{ + struct aqc111_data *aqc111_data = dev->driver_priv; + + aqc111_data->phy_cfg &= ~AQ_ADV_MASK; + aqc111_data->phy_cfg |= AQ_PAUSE; + aqc111_data->phy_cfg |= AQ_ASYM_PAUSE; + aqc111_data->phy_cfg |= AQ_DOWNSHIFT; + aqc111_data->phy_cfg &= ~AQ_DSH_RETRIES_MASK; + aqc111_data->phy_cfg |= (3 << AQ_DSH_RETRIES_SHIFT) & + AQ_DSH_RETRIES_MASK; + + if (autoneg == AUTONEG_ENABLE) { + switch (speed) { + case SPEED_5000: + aqc111_data->phy_cfg |= AQ_ADV_5G; + /* fall-through */ + case SPEED_2500: + aqc111_data->phy_cfg |= AQ_ADV_2G5; + /* fall-through */ + case SPEED_1000: + aqc111_data->phy_cfg |= AQ_ADV_1G; + /* fall-through */ + case SPEED_100: + aqc111_data->phy_cfg |= AQ_ADV_100M; + /* fall-through */ + } + } else { + switch (speed) { + case SPEED_5000: + aqc111_data->phy_cfg |= AQ_ADV_5G; + break; + case SPEED_2500: + aqc111_data->phy_cfg |= AQ_ADV_2G5; + break; + case SPEED_1000: + aqc111_data->phy_cfg |= AQ_ADV_1G; + break; + case SPEED_100: + aqc111_data->phy_cfg |= AQ_ADV_100M; + break; + } + } + + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, @@ -179,6 +226,7 @@ static void aqc111_read_fw_version(struct usbnet *dev, static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) { struct usb_device *udev = interface_to_usbdev(intf); + enum usb_device_speed usb_speed = udev->speed; struct aqc111_data *aqc111_data; int ret; @@ -206,6 +254,9 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->netdev_ops = &aqc111_netdev_ops; aqc111_read_fw_version(dev, aqc111_data); + aqc111_data->autoneg = AUTONEG_ENABLE; + aqc111_data->advertised_speed = (usb_speed == USB_SPEED_SUPER) ? + SPEED_5000 : SPEED_1000; return 0; } @@ -224,6 +275,7 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) 2, ®16); /* Power down ethernet PHY */ + aqc111_data->phy_cfg &= ~AQ_ADV_MASK; aqc111_data->phy_cfg |= AQ_LOW_POWER; aqc111_data->phy_cfg &= ~AQ_PHY_POWER_EN; aqc111_write32_cmd_nopm(dev, AQ_PHY_OPS, 0, 0, @@ -232,6 +284,179 @@ static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) kfree(aqc111_data); } +static void aqc111_status(struct usbnet *dev, struct urb *urb) +{ + struct aqc111_data *aqc111_data = dev->driver_priv; + u64 *event_data = NULL; + int link = 0; + + if (urb->actual_length < sizeof(*event_data)) + return; + + event_data = urb->transfer_buffer; + le64_to_cpus(event_data); + + if (*event_data & AQ_LS_MASK) + link = 1; + else + link = 0; + + aqc111_data->link_speed = (*event_data & AQ_SPEED_MASK) >> + AQ_SPEED_SHIFT; + aqc111_data->link = link; + + if (netif_carrier_ok(dev->net) != link) + usbnet_defer_kevent(dev, EVENT_LINK_RESET); +} + +static void aqc111_configure_rx(struct usbnet *dev, + struct aqc111_data *aqc111_data) +{ + enum usb_device_speed usb_speed = dev->udev->speed; + u16 link_speed = 0, usb_host = 0; + u8 buf[5] = { 0 }; + u8 queue_num = 0; + u16 reg16 = 0; + u8 reg8 = 0; + + buf[0] = 0x00; + buf[1] = 0xF8; + buf[2] = 0x07; + switch (aqc111_data->link_speed) { + case AQ_INT_SPEED_5G: + link_speed = 5000; + reg8 = 0x05; + reg16 = 0x001F; + break; + case AQ_INT_SPEED_2_5G: + link_speed = 2500; + reg16 = 0x003F; + break; + case AQ_INT_SPEED_1G: + link_speed = 1000; + reg16 = 0x009F; + break; + case AQ_INT_SPEED_100M: + link_speed = 100; + queue_num = 1; + reg16 = 0x063F; + buf[1] = 0xFB; + buf[2] = 0x4; + break; + } + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_INTER_PACKET_GAP_0, + 1, 1, ®8); + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TX_PAUSE_RESEND_T, 3, 3, buf); + + switch (usb_speed) { + case USB_SPEED_SUPER: + usb_host = 3; + break; + case USB_SPEED_HIGH: + usb_host = 2; + break; + case USB_SPEED_FULL: + case USB_SPEED_LOW: + usb_host = 1; + queue_num = 0; + break; + default: + usb_host = 0; + break; + } + + memcpy(buf, &AQC111_BULKIN_SIZE[queue_num], 5); + /* RX bulk configuration */ + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, 5, 5, buf); + + /* Set high low water level */ + reg16 = 0x0810; + + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, + 2, ®16); + netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host); +} + +static int aqc111_link_reset(struct usbnet *dev) +{ + struct aqc111_data *aqc111_data = dev->driver_priv; + u16 reg16 = 0; + u8 reg8 = 0; + + if (aqc111_data->link == 1) { /* Link up */ + aqc111_configure_rx(dev, aqc111_data); + + /* Vlan Tag Filter */ + reg8 = SFR_VLAN_CONTROL_VSO; + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + + reg8 = 0x0; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BMRX_DMA_CONTROL, + 1, 1, ®8); + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BMTX_DMA_CONTROL, + 1, 1, ®8); + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_ARC_CTRL, 1, 1, ®8); + + reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + reg8 = SFR_RX_PATH_READY; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + + reg8 = SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + + reg16 = 0; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + reg16 = SFR_MEDIUM_XGMIIMODE | SFR_MEDIUM_FULL_DUPLEX; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + reg16 |= SFR_MEDIUM_RECEIVE_EN | SFR_MEDIUM_RXFLOW_CTRLEN | + SFR_MEDIUM_TXFLOW_CTRLEN; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB | SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + netif_carrier_on(dev->net); + } else { + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + reg16 &= ~SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + reg8 = SFR_BULK_OUT_FLUSH_EN | SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + reg8 = SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + + netif_carrier_off(dev->net); + } + return 0; +} + static int aqc111_reset(struct usbnet *dev) { struct aqc111_data *aqc111_data = dev->driver_priv; @@ -254,6 +479,12 @@ static int aqc111_reset(struct usbnet *dev) SFR_MONITOR_MODE_RW_FLAG); aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_MONITOR_MODE, 1, 1, ®8); + netif_carrier_off(dev->net); + + /* Phy advertise */ + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + return 0; } @@ -275,6 +506,8 @@ static int aqc111_stop(struct usbnet *dev) aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); + netif_carrier_off(dev->net); + return 0; } @@ -282,6 +515,8 @@ static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", .bind = aqc111_bind, .unbind = aqc111_unbind, + .status = aqc111_status, + .link_reset = aqc111_link_reset, .reset = aqc111_reset, .stop = aqc111_stop, }; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index a93d34af76b9..f3b45d8ca4e3 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -113,6 +113,7 @@ #define AQ_ADV_1G BIT(1) #define AQ_ADV_2G5 BIT(2) #define AQ_ADV_5G BIT(3) +#define AQ_ADV_MASK 0x0F #define AQ_PAUSE BIT(16) #define AQ_ASYM_PAUSE BIT(17) @@ -127,6 +128,10 @@ /******************************************************************************/ struct aqc111_data { + u8 link_speed; + u8 link; + u8 autoneg; + u32 advertised_speed; struct { u8 major; u8 minor; @@ -135,6 +140,14 @@ struct aqc111_data { u32 phy_cfg; }; +#define AQ_LS_MASK 0x8000 +#define AQ_SPEED_MASK 0x7F00 +#define AQ_SPEED_SHIFT 0x0008 +#define AQ_INT_SPEED_5G 0x000F +#define AQ_INT_SPEED_2_5G 0x0010 +#define AQ_INT_SPEED_1G 0x0011 +#define AQ_INT_SPEED_100M 0x0013 + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Mon Nov 26 09:33:14 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003074 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="q9O61bDH"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MD16Npjz9s3q for ; Mon, 26 Nov 2018 20:33:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726412AbeKZU0v (ORCPT ); Mon, 26 Nov 2018 15:26:51 -0500 Received: from mail-eopbgr710041.outbound.protection.outlook.com ([40.107.71.41]:44880 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726290AbeKZU0t (ORCPT ); Mon, 26 Nov 2018 15:26:49 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=78OY4Br2DQxnRWsrfCOqsle6/T1hp0aQhUxvP0+oUxs=; b=q9O61bDHdiGyy3lS32glKigJBwgxyLJRqByuLKJJbyglVhvBSBex9zdm2z15SZ3pk/oDKvI1UWQdH7UaecvOQr9R9jF0xhEDGzf8CCkaVyI2VcVGbxk74dh9ARYRnpl0IS1SREBiWmvU4G+Qkew7Z5OudDFeTxRKXgHwdOlgQ1s= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:14 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:14 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 07/21] net: usb: aqc111: Add support for getting and setting of MAC address Thread-Topic: [PATCH v4 net-next 07/21] net: usb: aqc111: Add support for getting and setting of MAC address Thread-Index: AQHUhWsOLjrd46Rb5EGWquMZItJoHA== Date: Mon, 26 Nov 2018 09:33:14 +0000 Message-ID: <68f0eeb9d18045cbf056042f5f29a72790fc468b.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:nhCsrxfpaj4cq1sC6qbSBiEoB2NT8rERQHIXV+bYSsrUrDpuVT4e/1ZCsLw2JKxSOLY31F68A7JCzahwJd3N5t/BmRJgaKM4TCALaoJXaV7n5NiARW6tfEM3EBLAJoHKaRbcqxNTUHfuZmOUPXz5tAwZxjpBubn5TfrU0yFgsSz6qDCgjdhFZavyUaP+3LzI6Tak5q1cMzrevq+kmu4FgI8rYKsCeQEHHGSi6+77Oylx6lj9ylUiv1JRhNnjmN6Js25sCgaS6HVleshU8ZHdO0KqYn6aZd8IOsuI65/Bod/rGbbQEJvZgMZagDAgVgZH6icZsCX0QhOtyi45OUJLqGvh6Of43DBPE+50oE0qIGPyeXi1RGnmGR+w8vDxdlsJiVKjqDtlEJ3/4tpudNNhVE5xQJczIeOnJyOVqcrjh2jfQIeW+eOv+swRnSsVvjh7KhDlXLO6x/3BkPkXFD0DUg==; 5:GIHINPxYoSXq3AUBikmgGEgZmJU+Rw6a0TPzmCqStKPkNLcnXVQQo1HFTOqnbTxPRmNwycwedc+uwC+BGOp1VIbUZVwtx0tJpjw7AG1vlIosDKB+5xJlrsS5h0kPzhdasMBaH3/lYHcTDWuhW1LbBbunn0ElJgoIK1FFnasif+Y=; 7:gpJRzrw4tgiW8QAAfkKy6I8x/rWaQ51WPfd+PmecI3Sps4evaiGYQEDmfG9qy7tB03DS0dls1NiSLwrkx0v2h3EfDRQ616CnRL+wWccEg9X0VwRjQWm+8+9JjLeDaL1MZZbNCBOQlgcJ5U3ZNudTiw== x-ms-office365-filtering-correlation-id: 766f4711-47ea-4bd9-cd9e-08d65382303e x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: UkGKlu8Uh0ehE0tR78kqb3yGLlDlycBsBo3dQ0hd/7qHaWxAOHojOKhRanc3WJyxzoIECIl1xI+rqMGBe3uNmS+jtEkc0AZi6OUpZpKC0YzJQLL64eEUB2tr0SFRL+YcWZrFSrYL1CEquM86JrVGGyChpcWZdAsRG/zF0wLdkY3a/3N17ZpSGRv7l2IdVKYOHYBnfkJF/QYSTEN8FR0WMkKHBZA8XabH9GUkWXKO+kcI7dwqVwwm48+8Oo+PfUYmAL0w36aUyn57wqg74xdAAVjZWtOsNcb2t5E1gxgTW3f42ylmvmw+XB2K9wrUk8W6R92FaDGJ6Wu6QecTq7Dm5/TuXjCXUm0SnJF2b6ocLKM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 766f4711-47ea-4bd9-cd9e-08d65382303e X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:14.4311 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 47 ++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 1 + 2 files changed, 48 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index e33be16b506c..390ed6cbc3fd 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -204,11 +205,43 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); } +static int aqc111_set_mac_addr(struct net_device *net, void *p) +{ + struct usbnet *dev = netdev_priv(net); + int ret = 0; + + ret = eth_mac_addr(net, p); + if (ret < 0) + return ret; + + /* Set the MAC address */ + return aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_NODE_ID, ETH_ALEN, + ETH_ALEN, net->dev_addr); +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, + .ndo_set_mac_address = aqc111_set_mac_addr, + .ndo_validate_addr = eth_validate_addr, }; +static int aqc111_read_perm_mac(struct usbnet *dev) +{ + u8 buf[ETH_ALEN]; + int ret; + + ret = aqc111_read_cmd(dev, AQ_FLASH_PARAMETERS, 0, 0, ETH_ALEN, buf); + if (ret < 0) + goto out; + + ether_addr_copy(dev->net->perm_addr, buf); + + return 0; +out: + return ret; +} + static void aqc111_read_fw_version(struct usbnet *dev, struct aqc111_data *aqc111_data) { @@ -251,6 +284,12 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) /* store aqc111_data pointer in device data field */ dev->driver_priv = aqc111_data; + /* Init the MAC address */ + ret = aqc111_read_perm_mac(dev); + if (ret) + goto out; + + ether_addr_copy(dev->net->dev_addr, dev->net->perm_addr); dev->net->netdev_ops = &aqc111_netdev_ops; aqc111_read_fw_version(dev, aqc111_data); @@ -259,6 +298,10 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) SPEED_5000 : SPEED_1000; return 0; + +out: + kfree(aqc111_data); + return ret; } static void aqc111_unbind(struct usbnet *dev, struct usb_interface *intf) @@ -467,6 +510,10 @@ static int aqc111_reset(struct usbnet *dev) aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); + /* Set the MAC address */ + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_NODE_ID, ETH_ALEN, + ETH_ALEN, dev->net->dev_addr); + reg8 = 0xFF; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, 1, 1, ®8); diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index f3b45d8ca4e3..0c8e1ee29893 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -11,6 +11,7 @@ #define __LINUX_USBNET_AQC111_H #define AQ_ACCESS_MAC 0x01 +#define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 #define AQ_PHY_OPS 0x61 From patchwork Mon Nov 26 09:33:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003073 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="j045zZ4p"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MD11Mnzz9s3C for ; Mon, 26 Nov 2018 20:33:21 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726405AbeKZU0u (ORCPT ); Mon, 26 Nov 2018 15:26:50 -0500 Received: from mail-eopbgr710066.outbound.protection.outlook.com ([40.107.71.66]:10757 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726225AbeKZU0u (ORCPT ); Mon, 26 Nov 2018 15:26:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=RIkIw3JSKVDyeo8i9T5X0NT+BgFcpZoe1Ni7LamhKhE=; b=j045zZ4pX1FHIxkjFuCZApbzFSshfaRsNjZAO+oVRAZzk7xZnTT9xHMcSsPW4pSebz4oLI2cjYrVweYh+d1kXIvV7RckWb+80JM5YEhyhACAIekZKdPPvCiHGoPxBTmEB3G941y5BwXkqFBSHXroCuiuA8ttaUkmPRZ7bKtzElM= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:16 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:17 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 08/21] net: usb: aqc111: Implement TX data path Thread-Topic: [PATCH v4 net-next 08/21] net: usb: aqc111: Implement TX data path Thread-Index: AQHUhWsPV3KLZCrr60aldlJXylwLUQ== Date: Mon, 26 Nov 2018 09:33:16 +0000 Message-ID: <74cca9bdbcc6db3e815b652023123e73fe6d0c8f.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:WhRJgUW966UZWbD4qgJQjzCVAZonFWNhx1pLdKvNhmXskgkeCeen7ozQAPX3w8P3MJPuSNXwIVCLZ1svNYYUd7mqZmIsGiBWJYRFpXlcK++HRGfdHF2xSZ1MC6n9ucFeIollJ4/OC6bjfiSR9s+LbuRljk9xSMP9vPAW0K09UrPDSPYDdNn6h5t2xQJQ4VUAbALvNyi06ehRF5Uym4UV9J06bISiuXGkIZnfuiQ2cp8axPwzXwHTFCqhTXjMRXQ4YmLXxsyKKIb8z6BqhNP/cWjaHF2aNDHdtKlGAwnq1G6FOUvG+8c2RTQ6qLO/ww2eJ4csXy8LSRP1kT9Ar1pWijjurFespaZiohytNOQVgEM10/imDQxuFpGCJX2asb7Xf8eLv5xsHXeWgJV52EcZZB33xaimHd7lWVjrzxHbW5XgqGrbvurKPbucF/c1FiPhnpIsuZTEG+fAluRPh58vCw==; 5:h5lnl8+0i7KcShz0B3MR+q4hV0MF1lgmcwrLrnbqcU0mir54nj26c7DBN7GnAp7AzyIO7ZBjc4kMguyuUTihWy83XRw4iLOIFekpBf+R7W8nAGpL4xoeEfNwoxduizKXIPvLzU+momi633SQ9hIjIlSZJ9vP4Rd+6vvE4r30cyQ=; 7:J1T8lr+XQjJe0Y7spCdGYw7a0DeAM6N62c2byGJMMFiFH8L92JQgKw6CPGNMt74ZKMWRkhaxbfAnKMQirZNC3ARP7sMMeUvL5xB6Y4GZLMCQ7vDi3tVoRvCvP61j0P7IQ1WQ3Sp7FN1bEgvr7i7Ldw== x-ms-office365-filtering-correlation-id: 17f98b57-e957-4492-37ba-08d6538231a9 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: +2J97wS4OdH2dspegJDRlAk6NXH7s3t5WVANkD+Lq6BxoCZS4FeNRGqTELuS5EudUZgvtQtlE+y4g0Vlo588DT1Ox6FzsmkubAIcKq8T4/yKW8vB35xS+paSsZoqPwG8iwm/0vhv1QYfNya/wZpghV+y86xWGRdSdBfLRdM1yg4KjXOjCT/7sA5CeqaXLxF+HTu0tx9cVraV5JogtbKylz4tmoHQcLY5sXYfepHlWcghn4It7IyMBJIht6sIODA7cnWZj2s8qaGMFtzUeqZLyFfo+utqtwUSMszzKWp0TVTDrhiVqv3EDBpTfpXFrzWfqtJo/g88Q22fl/I/u/OpW9XUuv5GDzvePwKaOZKji4I= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 17f98b57-e957-4492-37ba-08d6538231a9 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:16.8062 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 72 ++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 8 +++++ 2 files changed, 80 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 390ed6cbc3fd..32a2de74ef3f 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -222,6 +222,9 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, + .ndo_start_xmit = usbnet_start_xmit, + .ndo_tx_timeout = usbnet_tx_timeout, + .ndo_get_stats64 = usbnet_get_stats64, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, }; @@ -290,8 +293,19 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) goto out; ether_addr_copy(dev->net->dev_addr, dev->net->perm_addr); + + /* Set TX needed headroom & tailroom */ + dev->net->needed_headroom += sizeof(u64); + dev->net->needed_tailroom += sizeof(u64); + dev->net->netdev_ops = &aqc111_netdev_ops; + if (usb_device_no_sg_constraint(dev->udev)) + dev->can_dma_sg = 1; + + dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; + dev->net->features |= AQ_SUPPORT_FEATURE; + aqc111_read_fw_version(dev, aqc111_data); aqc111_data->autoneg = AUTONEG_ENABLE; aqc111_data->advertised_speed = (usb_speed == USB_SPEED_SUPER) ? @@ -505,6 +519,12 @@ static int aqc111_reset(struct usbnet *dev) struct aqc111_data *aqc111_data = dev->driver_priv; u8 reg8 = 0; + if (usb_device_no_sg_constraint(dev->udev)) + dev->can_dma_sg = 1; + + dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; + dev->net->features |= AQ_SUPPORT_FEATURE; + /* Power up ethernet PHY */ aqc111_data->phy_cfg = AQ_PHY_POWER_EN; aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, @@ -558,6 +578,55 @@ static int aqc111_stop(struct usbnet *dev) return 0; } +static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, + gfp_t flags) +{ + int frame_size = dev->maxpacket; + struct sk_buff *new_skb = NULL; + u64 *tx_desc_ptr = NULL; + int padding_size = 0; + int headroom = 0; + int tailroom = 0; + u64 tx_desc = 0; + + /*Length of actual data*/ + tx_desc |= skb->len & AQ_TX_DESC_LEN_MASK; + + headroom = (skb->len + sizeof(tx_desc)) % 8; + if (headroom != 0) + padding_size = 8 - headroom; + + if (((skb->len + sizeof(tx_desc) + padding_size) % frame_size) == 0) { + padding_size += 8; + tx_desc |= AQ_TX_DESC_DROP_PADD; + } + + if (!dev->can_dma_sg && (dev->net->features & NETIF_F_SG) && + skb_linearize(skb)) + return NULL; + + headroom = skb_headroom(skb); + tailroom = skb_tailroom(skb); + + if (!(headroom >= sizeof(tx_desc) && tailroom >= padding_size)) { + new_skb = skb_copy_expand(skb, sizeof(tx_desc), + padding_size, flags); + dev_kfree_skb_any(skb); + skb = new_skb; + if (!skb) + return NULL; + } + if (padding_size != 0) + skb_put_zero(skb, padding_size); + /* Copy TX header */ + tx_desc_ptr = skb_push(skb, sizeof(tx_desc)); + *tx_desc_ptr = cpu_to_le64(tx_desc); + + usbnet_set_skb_tx_stats(skb, 1, 0); + + return skb; +} + static const struct driver_info aqc111_info = { .description = "Aquantia AQtion USB to 5GbE Controller", .bind = aqc111_bind, @@ -566,6 +635,9 @@ static const struct driver_info aqc111_info = { .link_reset = aqc111_link_reset, .reset = aqc111_reset, .stop = aqc111_stop, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | + FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .tx_fixup = aqc111_tx_fixup, }; #define AQC111_USB_ETH_DEV(vid, pid, table) \ diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 0c8e1ee29893..c09f188b9f3d 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -18,6 +18,10 @@ #define AQ_USB_PHY_SET_TIMEOUT 10000 #define AQ_USB_SET_TIMEOUT 4000 +/* Feature. ********************************************/ +#define AQ_SUPPORT_FEATURE (NETIF_F_SG) +#define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG) + /* SFR Reg. ********************************************/ #define SFR_GENERAL_STATUS 0x03 @@ -149,6 +153,10 @@ struct aqc111_data { #define AQ_INT_SPEED_1G 0x0011 #define AQ_INT_SPEED_100M 0x0013 +/* TX Descriptor */ +#define AQ_TX_DESC_LEN_MASK 0x1FFFFF +#define AQ_TX_DESC_DROP_PADD BIT(28) + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Mon Nov 26 09:33:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003075 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="gLOqHEjC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MD32m9lz9s3C for ; Mon, 26 Nov 2018 20:33:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726418AbeKZU0x (ORCPT ); Mon, 26 Nov 2018 15:26:53 -0500 Received: from mail-eopbgr710054.outbound.protection.outlook.com ([40.107.71.54]:17557 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726282AbeKZU0x (ORCPT ); Mon, 26 Nov 2018 15:26:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=UaweF9xfcmBo7xLidlnUahXe8b8NdIuNgZ+KeKSQmuU=; b=gLOqHEjCB08Et5VbKJqTD91Og811d3bZm+jVpnHobH986/AScnHmLJMvoujbihemqeZ6jG5CBOOYdN4JRmnaOxMDpproPifQ7Tyo7+M2w076yut13bpYW7WQkrW2PkQj/5T/qQMxBei9mjmzqfqhAmJC2n5jRt8JPwjuIZ6ai+E= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:19 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:19 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 09/21] net: usb: aqc111: Implement RX data path Thread-Topic: [PATCH v4 net-next 09/21] net: usb: aqc111: Implement RX data path Thread-Index: AQHUhWsQVXOPP3LyKEa88OHuFNbqow== Date: Mon, 26 Nov 2018 09:33:19 +0000 Message-ID: <6a6c5b66e09032a8e598dfb83c0d794c6698661f.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:hidrYNBF3dvY5SXv7Ctm0eCP4K/NCRkqcLcD3xenZIJfdNEmxZRNWRrPb/6tZp5b4Ama/C6+Ur3/deo7LM8Wv9LPWZi+4P3m0E4+e1AZjF9FuBHFxZ1suzp9/OFIZQ81LSvp6nKFOhlHNTz+3tzAbvX5rObtQ+8TR55IgZJPoA2J8jUfsRCuMx+A4DmkUScPArbZ8Jf7eyUFfbcZk2rMAqr3x9VuHYnANjBgBm9Ims68uLj0b6aeHCRH2OfdMZS/40bFtyYzssDAbFjnjw1ZtAjls5rIcb1t2JHYJaPwvYr/ExIdzqlGRkP5iU4+9DTTXUYxMsv2kIjwS4zCVG2dzks9NW0QVAoL4pW3Vpy634K/3EBr7++MeUUrVDDhPXzyY2E8yhRf9HrIr4eOuJmBtNqKXtbyLsbSgpY+R2xKn2AlkSKxRY15eiaQmOG6wmWAEuZ8yy6ev+0CC9GktwHCkg==; 5:MuVa/qWBCFwka+SbheCazO3f75UixLrjDMkKq4X/F5QM/5dKGS0fdq3Om31/4hvEmQ3V0sxcVtUi/H9Fh1QRotAM+4AOpzykZhHXS/TjFS5rvgOZKUQuXhMViIlHrbNlxn4dmLtpqNOJV+QEdrJmKv1k40fnMwISOnBrcS4/YnU=; 7:w6FEORMVflpOV+nfCHT/VGghQQb4mc1PL7DJEWMTVEKh8a9BnQ97EtbBZOhFB1Wdsz1vmEkuq9rL4jEqdPHIJPPH6BQpP63T4yWCndLBk/smZll4CGGEIgSM2tkWAY70nXhMqgsIKjHOibv2nST0ow== x-ms-office365-filtering-correlation-id: ed5fda4e-f4d6-48e2-0442-08d653823316 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: pYN940RsxZf6W/nNf6KszSrc8JU+qQMHuYjXAPkmwoxB1QDyVBxtIIn2kvt3zEx1cR3MEg5bmcMsvPDqOHe1XB5+R2+u5X4NUAPTKisP68xFPxDOrRzCIQYOg8mY2f232uZvJQrfGTCt9mzLzMbN8SrN1E7d0tn8ggwDilC0FxECUssRgZbE4YHCA+DFKCKo+tsfJa0XYTjnepJJdXWow0dY/JgJYJdaa4HVsL+SZqcvuwdb9kXWNC0dxZkkzqnn4InfJ/JSjik+6k0pwouk3i4B1o13D2niXF6m3g+vvNkH8WnZ4JX+XjHpO3mBj9OmulkS4AzEJPWFwtmoe5Yq0qS0MHwyIPl+3WHAZutJ/Pw= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed5fda4e-f4d6-48e2-0442-08d653823316 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:19.2282 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 102 +++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 15 ++++++ 2 files changed, 117 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 32a2de74ef3f..7a1976ecf294 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -294,6 +294,9 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) ether_addr_copy(dev->net->dev_addr, dev->net->perm_addr); + /* Set Rx urb size */ + dev->rx_urb_size = URB_SIZE; + /* Set TX needed headroom & tailroom */ dev->net->needed_headroom += sizeof(u64); dev->net->needed_tailroom += sizeof(u64); @@ -519,6 +522,8 @@ static int aqc111_reset(struct usbnet *dev) struct aqc111_data *aqc111_data = dev->driver_priv; u8 reg8 = 0; + dev->rx_urb_size = URB_SIZE; + if (usb_device_no_sg_constraint(dev->udev)) dev->can_dma_sg = 1; @@ -578,6 +583,102 @@ static int aqc111_stop(struct usbnet *dev) return 0; } +static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) +{ + struct sk_buff *new_skb = NULL; + u32 pkt_total_offset = 0; + u64 *pkt_desc_ptr = NULL; + u32 start_of_descs = 0; + u32 desc_offset = 0; /*RX Header Offset*/ + u16 pkt_count = 0; + u64 desc_hdr = 0; + u32 skb_len = 0; + + if (!skb) + goto err; + + if (skb->len == 0) + goto err; + + skb_len = skb->len; + /* RX Descriptor Header */ + skb_trim(skb, skb->len - sizeof(desc_hdr)); + desc_hdr = le64_to_cpup((u64 *)skb_tail_pointer(skb)); + + /* Check these packets */ + desc_offset = (desc_hdr & AQ_RX_DH_DESC_OFFSET_MASK) >> + AQ_RX_DH_DESC_OFFSET_SHIFT; + pkt_count = desc_hdr & AQ_RX_DH_PKT_CNT_MASK; + start_of_descs = skb_len - ((pkt_count + 1) * sizeof(desc_hdr)); + + /* self check descs position */ + if (start_of_descs != desc_offset) + goto err; + + /* self check desc_offset from header*/ + if (desc_offset >= skb_len) + goto err; + + if (pkt_count == 0) + goto err; + + /* Get the first RX packet descriptor */ + pkt_desc_ptr = (u64 *)(skb->data + desc_offset); + + while (pkt_count--) { + u64 pkt_desc = le64_to_cpup(pkt_desc_ptr); + u32 pkt_len_with_padd = 0; + u32 pkt_len = 0; + + pkt_len = (u32)((pkt_desc & AQ_RX_PD_LEN_MASK) >> + AQ_RX_PD_LEN_SHIFT); + pkt_len_with_padd = ((pkt_len + 7) & 0x7FFF8); + + pkt_total_offset += pkt_len_with_padd; + if (pkt_total_offset > desc_offset || + (pkt_count == 0 && pkt_total_offset != desc_offset)) { + goto err; + } + + if (pkt_desc & AQ_RX_PD_DROP || + !(pkt_desc & AQ_RX_PD_RX_OK) || + pkt_len > (dev->hard_mtu + AQ_RX_HW_PAD)) { + skb_pull(skb, pkt_len_with_padd); + /* Next RX Packet Descriptor */ + pkt_desc_ptr++; + continue; + } + + /* Clone SKB */ + new_skb = skb_clone(skb, GFP_ATOMIC); + + if (!new_skb) + goto err; + + new_skb->len = pkt_len; + skb_pull(new_skb, AQ_RX_HW_PAD); + skb_set_tail_pointer(new_skb, new_skb->len); + + new_skb->truesize = SKB_TRUESIZE(new_skb->len); + + usbnet_skb_return(dev, new_skb); + if (pkt_count == 0) + break; + + skb_pull(skb, pkt_len_with_padd); + + /* Next RX Packet Header */ + pkt_desc_ptr++; + + new_skb = NULL; + } + + return 1; + +err: + return 0; +} + static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) { @@ -637,6 +738,7 @@ static const struct driver_info aqc111_info = { .stop = aqc111_stop, .flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .rx_fixup = aqc111_rx_fixup, .tx_fixup = aqc111_tx_fixup, }; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index c09f188b9f3d..c5785f890022 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -10,6 +10,8 @@ #ifndef __LINUX_USBNET_AQC111_H #define __LINUX_USBNET_AQC111_H +#define URB_SIZE (1024 * 62) + #define AQ_ACCESS_MAC 0x01 #define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 @@ -157,6 +159,19 @@ struct aqc111_data { #define AQ_TX_DESC_LEN_MASK 0x1FFFFF #define AQ_TX_DESC_DROP_PADD BIT(28) +#define AQ_RX_HW_PAD 0x02 + +/* RX Packet Descriptor */ +#define AQ_RX_PD_RX_OK BIT(11) +#define AQ_RX_PD_DROP BIT(31) +#define AQ_RX_PD_LEN_MASK 0x7FFF0000 +#define AQ_RX_PD_LEN_SHIFT 0x10 + +/* RX Descriptor header */ +#define AQ_RX_DH_PKT_CNT_MASK 0x1FFF +#define AQ_RX_DH_DESC_OFFSET_MASK 0xFFFFE000 +#define AQ_RX_DH_DESC_OFFSET_SHIFT 0x0D + static struct { unsigned char ctrl; unsigned char timer_l; From patchwork Mon Nov 26 09:33:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003076 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="OjUlCYYX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MD612MMz9s3C for ; Mon, 26 Nov 2018 20:33:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726435AbeKZU04 (ORCPT ); Mon, 26 Nov 2018 15:26:56 -0500 Received: from mail-eopbgr710046.outbound.protection.outlook.com ([40.107.71.46]:19443 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726282AbeKZU0z (ORCPT ); Mon, 26 Nov 2018 15:26:55 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iVRyBJTMtBfFzUSSpO5Xsrchp2mbzXmdSULtt+Mmqw0=; b=OjUlCYYXNKF4dl56/ltsxkoxrZDhfLQqeHgMPR5Qm1+20VqdzRGDh27jP/T/YQVIj+zvYyMs8/k0vKaUyzyp0UFZTVOV4QkKoNfSgNmXwHdxDj4CjNSlRJL4DzZvGftq/NlfUn7QNjdG6dS9kK2RnAHOrQ+3UXuGbVBS9Y+NNEk= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:21 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:21 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 10/21] net: usb: aqc111: Add checksum offload support Thread-Topic: [PATCH v4 net-next 10/21] net: usb: aqc111: Add checksum offload support Thread-Index: AQHUhWsSzsDmSCrF4kOoOW2PaQpN1A== Date: Mon, 26 Nov 2018 09:33:21 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:/l931l2mbR4dOkKkkbnQcXisSLWIoxIR/vWDjSkvnP4SeGnVWr0X0m+xkh6QZWahJP6tiN+/GFETXyI6n0a2IcnhHcUA/2deo2mgSoQ/oWpHSoYlEVt4lr+tsXAM88V255nEw59BB3TIfCKqjR36sMXPSJ8xcp14cwfeAeaYwbiDzJwta+D58LDIBl4IwIZLXbdGvLFxqCp9GlzyIkEHQsWNP8p97thVvoByxMBBH5bVhd2l5+BAW8g0FkqUgjDuanZkzFuyRLe2zVcJavoi/rpMEdj4Z9lZABrMJitKjYkU9FWOUEe5KgBMdjwC6QFUfSbd5QLSuM/ZqJ4H4bXHSnAh7rZdUZSjtEmBFzRozBXW6K4sJQCYq0FndNpiRC8E4pLmWczjnOmW7Ck1Lhg2L55Ot1XS1oBkaxBp31WC645hGAZ8Eg92w+Urk4cUDWoqpDumPjrOqUH3TnJPEi1ydQ==; 5:pWY4WKvhUrcE3ykVpqN2gLRQJw7bXf53qS3onocYXSCz42rfQiP+BJvfZG9BWVD7WyItSvGa/82/lPITd4+hkzDJ22g/Q1eEMF/HhIx/rgcLAr94KgZjk/KF/ByHowL8p0zWW/UiSIEGXbW26bcuL/T4JGwE728HeAwIwtlXQJY=; 7:KyxO48RxuRUwjh6WKGk+Vp9OFUaXweQW7wJ549nyN5DGFj8Bwwa5O2yA6xxNp6X423+HpwcAX3b1jNaoZjPCHKjaAZ679GdxQ4yxRfVkNxatW1zgyhj49Y0/FTDSMbh4e19bDvkMDITkFLM8ghlCew== x-ms-office365-filtering-correlation-id: b31b6adc-88dc-4037-3322-08d653823485 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: KSGjuyoYFpdyX76/+DTGhQPyhNFUEBYM6Gk5rucd/kaGbSmSTcD9VnzYuJ8Fl5xO98+T5C3dOR0gPowY5w9uJgfgnNgSzPARxUOThcRUUdNzqlsitXlx6G/AaMTqsdiS6GhGa4w/3FFswA0PjIVCZv1g9/xyLFwSAB7YfU8qZmyUo714iiWCR5MVBvQ6n5J4dSwdHbIMe9U2nNRzqAaITo+GLOgzwNPpsvJPM/30SHWfixbcCawCw4gXVecNTHWdagfFL7Ua2yh6mpAcioTyCkcwvYlx4OjCiN6jifNce6FhoCS4o7tL4H1csNBv3Z5zx7x5YmTF60HGOgqGcizeWOw3ihvE71JF77Bh91JxeE0= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b31b6adc-88dc-4037-3322-08d653823485 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:21.6033 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 38 ++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 16 ++++++++++++++-- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 7a1976ecf294..1c8812e082bf 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -439,6 +439,26 @@ static void aqc111_configure_rx(struct usbnet *dev, netdev_info(dev->net, "Link Speed %d, USB %d", link_speed, usb_host); } +static void aqc111_configure_csum_offload(struct usbnet *dev) +{ + u8 reg8 = 0; + + if (dev->net->features & NETIF_F_RXCSUM) { + reg8 |= SFR_RXCOE_IP | SFR_RXCOE_TCP | SFR_RXCOE_UDP | + SFR_RXCOE_TCPV6 | SFR_RXCOE_UDPV6; + } + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, 1, 1, ®8); + + reg8 = 0; + if (dev->net->features & NETIF_F_IP_CSUM) + reg8 |= SFR_TXCOE_IP | SFR_TXCOE_TCP | SFR_TXCOE_UDP; + + if (dev->net->features & NETIF_F_IPV6_CSUM) + reg8 |= SFR_TXCOE_TCPV6 | SFR_TXCOE_UDPV6; + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, 1, 1, ®8); +} + static int aqc111_link_reset(struct usbnet *dev) { struct aqc111_data *aqc111_data = dev->driver_priv; @@ -482,6 +502,8 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); + aqc111_configure_csum_offload(dev); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); @@ -583,6 +605,21 @@ static int aqc111_stop(struct usbnet *dev) return 0; } +static void aqc111_rx_checksum(struct sk_buff *skb, u64 pkt_desc) +{ + u32 pkt_type = 0; + + skb->ip_summed = CHECKSUM_NONE; + /* checksum error bit is set */ + if (pkt_desc & AQ_RX_PD_L4_ERR || pkt_desc & AQ_RX_PD_L3_ERR) + return; + + pkt_type = pkt_desc & AQ_RX_PD_L4_TYPE_MASK; + /* It must be a TCP or UDP packet with a valid checksum */ + if (pkt_type == AQ_RX_PD_L4_TCP || pkt_type == AQ_RX_PD_L4_UDP) + skb->ip_summed = CHECKSUM_UNNECESSARY; +} + static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) { struct sk_buff *new_skb = NULL; @@ -660,6 +697,7 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) skb_set_tail_pointer(new_skb, new_skb->len); new_skb->truesize = SKB_TRUESIZE(new_skb->len); + aqc111_rx_checksum(new_skb, pkt_desc); usbnet_skb_return(dev, new_skb); if (pkt_count == 0) diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index c5785f890022..ff43443bfd72 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -21,8 +21,11 @@ #define AQ_USB_SET_TIMEOUT 4000 /* Feature. ********************************************/ -#define AQ_SUPPORT_FEATURE (NETIF_F_SG) -#define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG) +#define AQ_SUPPORT_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) + +#define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) /* SFR Reg. ********************************************/ @@ -162,6 +165,15 @@ struct aqc111_data { #define AQ_RX_HW_PAD 0x02 /* RX Packet Descriptor */ +#define AQ_RX_PD_L4_ERR BIT(0) +#define AQ_RX_PD_L3_ERR BIT(1) +#define AQ_RX_PD_L4_TYPE_MASK 0x1C +#define AQ_RX_PD_L4_UDP 0x04 +#define AQ_RX_PD_L4_TCP 0x10 +#define AQ_RX_PD_L3_TYPE_MASK 0x60 +#define AQ_RX_PD_L3_IP 0x20 +#define AQ_RX_PD_L3_IP6 0x40 + #define AQ_RX_PD_RX_OK BIT(11) #define AQ_RX_PD_DROP BIT(31) #define AQ_RX_PD_LEN_MASK 0x7FFF0000 From patchwork Mon Nov 26 09:33:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003077 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="Rq2PzBrV"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MD82X8fz9s3C for ; Mon, 26 Nov 2018 20:33:28 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726445AbeKZU06 (ORCPT ); Mon, 26 Nov 2018 15:26:58 -0500 Received: from mail-eopbgr710055.outbound.protection.outlook.com ([40.107.71.55]:27920 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726282AbeKZU05 (ORCPT ); Mon, 26 Nov 2018 15:26:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iJg7lymY1WqMXvLKuIKMdKRmSp1yZuwXdOZSqibBxnU=; b=Rq2PzBrVxZmK5sdtNWBjPij0ywAiJkJZezj/m3utx4+XXsk9P0rQoeOOBs/+mjL7G/eM38qZ6lenofT3SzM/sNvBnKuzEVEU0gop0sbfAKbq5PYVeQhDchZEFm6wAm+jANUS/2iM3lW1aCgAVzt/e2iNTgkGHlDqPz7E037zrLo= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:24 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:24 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 11/21] net: usb: aqc111: Add support for changing MTU Thread-Topic: [PATCH v4 net-next 11/21] net: usb: aqc111: Add support for changing MTU Thread-Index: AQHUhWsTeQ6ygkdOsUSx3oGiXYeQ/g== Date: Mon, 26 Nov 2018 09:33:23 +0000 Message-ID: <55de29e7ff0c12ce4f579e34b7eb0e1a76fa3f32.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:m7gdJf9PWVBtWZbVYbmVEJwdFf1BEekdh0/M20FicUiMs1Wn7MNqRTYRItHYQdMfl/ZQUWHyxCVt8sSi3tcq/KBCE4kAZbXnJ6Evqsy7lXsgdTwhM2Alh0fKzKJSPhsASd72eMN9f56wGhjia9avFkChpX1tvYnj+T6aRN7QKbvPyb+Bm/H95cQmaciRbnjxzmq+blISkQnk2A5Vppd6kkpiAnF/Wj6HyGu6xrfPmPv5jbR04HSTR4/0NGwdxg7rLrAY/lU9L38gqFlO61KnhhCx+w4o64fLvLEteoSZRpuXAiGZI4gQ93MatM9sEzpWMiiPKgirtAVpP1aqUMgWm02B73w0wlR2p1Okch+h30ph5+Evv0Gzr5Ck4ceMVoMJsz6kglH3QuwT8m93wl7PJpV6oYbeliAzhZmt9c0LRvjF4uA0LLusuLejwbNmuH1DLnX45HnWS2WwNfSDb59+CA==; 5:zACIh6xIR6QuSqyOCczul/tPBSqyJauDYiSow9YqWCCFbSZ8xf4kyOTAc0y2f1gVVvXZYfUDIEpaoFHGmFzxNHm7qMs0oxD49i3wSKa0DEw+5ONeFqdW0r3bMPxxVHK/plHB0I/sfPAKYwPygMr3JtZZ8726+uB1BGDAV5rGYHg=; 7:MeCec7nPJgXbCIlEvx6SEmy8GY6mi3Lr1XMK7YEjpdsUhml7cJeV3iv/Itw3IhJnOPT8dZA5V5StQkYmpFD93mZXBTuc9DMxx3f1BztyKH/ktsdaXk6+OnFM9MTpMN0NFVKYDpBKVhcgEeJYDsl4dA== x-ms-office365-filtering-correlation-id: 0975ebd7-919c-4956-ffa2-08d6538235f1 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: nh0i0QERP+z1Ua1C21uCGKSNagX4hnsDxGxkObckivm4Q8PkyeA2gwDj/GyZEzufOcJYPdqK0CWhUqbqTQxKHdvk3AADfUG7hkPawt3u/41lg6df8Lepoy6DCXcdWddMCfY/amGX0mJ80Ccr3tg3IiIADE4pD5ysMqfKnsMShZLFw87inRS0hNBiNz7uM7b6wlu3zHn2b8JmrItlUidI4lGuiczI6HTnzJ/yovjlMqdzDJLslqjUK+IxVSkXzhCZrabjuxG2aEJtpObZ4xGceXS+BFzEn2ipkt3OJK05I1/1fUIknobTGH8xDG7AZ5P7zaxTa4VeEwJwnMhz5iq5h3a7t4ehtPrb6J13dg/cFwM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0975ebd7-919c-4956-ffa2-08d6538235f1 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:23.9941 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 60 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 1c8812e082bf..641e68ee017a 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -205,6 +205,48 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); } +static int aqc111_change_mtu(struct net_device *net, int new_mtu) +{ + struct usbnet *dev = netdev_priv(net); + u16 reg16 = 0; + u8 buf[5]; + + net->mtu = new_mtu; + dev->hard_mtu = net->mtu + net->hard_header_len; + + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + if (net->mtu > 1500) + reg16 |= SFR_MEDIUM_JUMBO_EN; + else + reg16 &= ~SFR_MEDIUM_JUMBO_EN; + + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + + if (dev->net->mtu > 12500 && dev->net->mtu <= 16334) { + memcpy(buf, &AQC111_BULKIN_SIZE[2], 5); + /* RX bulk configuration */ + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, + 5, 5, buf); + } + + /* Set high low water level */ + if (dev->net->mtu <= 4500) + reg16 = 0x0810; + else if (dev->net->mtu <= 9500) + reg16 = 0x1020; + else if (dev->net->mtu <= 12500) + reg16 = 0x1420; + else if (dev->net->mtu <= 16334) + reg16 = 0x1A20; + + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, + 2, ®16); + + return 0; +} + static int aqc111_set_mac_addr(struct net_device *net, void *p) { struct usbnet *dev = netdev_priv(net); @@ -225,6 +267,7 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_start_xmit = usbnet_start_xmit, .ndo_tx_timeout = usbnet_tx_timeout, .ndo_get_stats64 = usbnet_get_stats64, + .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, }; @@ -301,6 +344,8 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->needed_headroom += sizeof(u64); dev->net->needed_tailroom += sizeof(u64); + dev->net->max_mtu = 16334; + dev->net->netdev_ops = &aqc111_netdev_ops; if (usb_device_no_sg_constraint(dev->udev)) @@ -427,12 +472,22 @@ static void aqc111_configure_rx(struct usbnet *dev, break; } + if (dev->net->mtu > 12500 && dev->net->mtu <= 16334) + queue_num = 2; /* For Jumbo packet 16KB */ + memcpy(buf, &AQC111_BULKIN_SIZE[queue_num], 5); /* RX bulk configuration */ aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, 5, 5, buf); /* Set high low water level */ - reg16 = 0x0810; + if (dev->net->mtu <= 4500) + reg16 = 0x0810; + else if (dev->net->mtu <= 9500) + reg16 = 0x1020; + else if (dev->net->mtu <= 12500) + reg16 = 0x1420; + else if (dev->net->mtu <= 16334) + reg16 = 0x1A20; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_PAUSE_WATERLVL_LOW, 2, ®16); @@ -507,6 +562,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); + if (dev->net->mtu > 1500) + reg16 |= SFR_MEDIUM_JUMBO_EN; + reg16 |= SFR_MEDIUM_RECEIVE_EN | SFR_MEDIUM_RXFLOW_CTRLEN | SFR_MEDIUM_TXFLOW_CTRLEN; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, From patchwork Mon Nov 26 09:33:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003078 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="tFzHBlEj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDB13Nnz9s3C for ; Mon, 26 Nov 2018 20:33:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726451AbeKZU1A (ORCPT ); Mon, 26 Nov 2018 15:27:00 -0500 Received: from mail-eopbgr710070.outbound.protection.outlook.com ([40.107.71.70]:59265 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726279AbeKZU1A (ORCPT ); Mon, 26 Nov 2018 15:27:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K44BX1/xsTKRj1Urm9kAYow5iP0uqCUPPFxnUdzqlSI=; b=tFzHBlEjBm+YOXJyl3XGladRjO4ruaGMLvxqv7UgLJiPn+K/R9TxSSLnvb0lxzuzNvSIIaTXzeV3CEnt7/SobrOJUMnbH50wQuqwwtBgJtKn4ISroYcghe3U49guMrfVxgoODxKN32vGuvg98l5UOMNlAOnMqYYgg55WpBEkwcc= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:26 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:26 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 12/21] net: usb: aqc111: Add support for enable/disable checksum offload Thread-Topic: [PATCH v4 net-next 12/21] net: usb: aqc111: Add support for enable/disable checksum offload Thread-Index: AQHUhWsVYDd3dxxyDEC+PKnyeLEj+w== Date: Mon, 26 Nov 2018 09:33:26 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:K7Uwue1FJRfiGGsY9LCju6+CEaxt9brIhJ8bWFmmrCrb/Bb6KazrEfL2hLA8VhwZIrLgBbMZ7HHUTxICjupeWqAofn+mBE4z4xzs3IXIvAt7ICWRMG4z4Fn6fWLKw0SdgZPslgF0wbNsFMR+OswhVhGh45d5U7WJA48lABX0+eLyueJOWek9Gd3ujAz7APwjnrFy1Jh94YeGWiegjYRECtgoGNDJpp/v3fc+4ntQ3RhAVC/QJJZn0OUHljCKoRtowTIESgTGLDAujwIdjzf+tjGAbnh3eqcdEXOv4nPUJ+GQpNzb5GW1v/3MkwmZDP9P+ijfrS7mIM09Bc9R5BfsyzPRcaun/j3lEO2qoRnLtfw+8ERarvIxbz1wdw/+F/aq38rA0zrlt9C0DMIvyOeEjrle0/8/FDP7purLaWdyMLTqIgPuOOpiOLY4srSmo3qDIxyR2RNolTnlbf/+5C8MXg==; 5:SYMzDPHXiuYixZfayNW33eIt2xoS/PWoM9sb70YaglfK2UWVTm+OwGonbuf3raScwJVSh7EkoVYFukCxgO27x3JlZ7Jf5LgnUchW2DkKvFPaAENZjeK/GwMIdQLajerRNk8Oogim0TBnKMsnWm0nvcl2qh6prSd52Ecj7LgtJjk=; 7:1+e4sCD+7ZxwfN0PB3mXwNQ6P98jhHfIS5uezhemUTWiiZUFZJ4mJen7af3EzFOGYnXwGekc4Y1kirinq2U7NKaYOy9miVbAikwmVcRQCJ1xMcJu1QdUbjXxbsU2KSCeua81SrADPS+6oFWrE6yV0Q== x-ms-office365-filtering-correlation-id: f6c7db2c-7c76-4ca8-69c6-08d65382375c x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 9fXYF3kAGlqEAMJHx1jfng/dxmYjzWGOGkPh9j6ILG9PmWnsR0J5wTBOniMZUOe7XpfYP+jjSmOsm1Tpw5SYD+0V8e1Y6BQgSaDppasX95UWWnNxpZ0BCR4tdMPXT+JrOnyr8v/Tquo6V0GGQ5pPYxuDOJymekcBNDrDBSNP7F+1wzOE7OniXwigc44BMkfM+rNZMuZQstK/pF5pwnaqvPRbiErmfzfu8K4mOnsk/0OgIfGsXP6v6/vH1INhcdirAw0c7dk5KypOVtf1jg83ltSOX/gN4wH4nPFuMIyjFjkOLIvXbrKYxHJslnmlLVz/vnwKrLa3e0jCrfwTBGlTuM6Eya+IultaAbfWvkhmpCs= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f6c7db2c-7c76-4ca8-69c6-08d65382375c X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:26.3692 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 45 +++++++++++++++++++++++++++++++++++++++- drivers/net/usb/aqc111.h | 1 + 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 641e68ee017a..7b69d0a5fc4c 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -261,6 +261,46 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) ETH_ALEN, net->dev_addr); } +static int aqc111_set_features(struct net_device *net, + netdev_features_t features) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + netdev_features_t changed = net->features ^ features; + u8 reg8 = 0; + + if (changed & NETIF_F_IP_CSUM) { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, 1, 1, ®8); + reg8 ^= SFR_TXCOE_TCP | SFR_TXCOE_UDP; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, + 1, 1, ®8); + } + + if (changed & NETIF_F_IPV6_CSUM) { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, 1, 1, ®8); + reg8 ^= SFR_TXCOE_TCPV6 | SFR_TXCOE_UDPV6; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_TXCOE_CTL, + 1, 1, ®8); + } + + if (changed & NETIF_F_RXCSUM) { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, 1, 1, ®8); + if (features & NETIF_F_RXCSUM) { + aqc111_data->rx_checksum = 1; + reg8 &= ~(SFR_RXCOE_IP | SFR_RXCOE_TCP | SFR_RXCOE_UDP | + SFR_RXCOE_TCPV6 | SFR_RXCOE_UDPV6); + } else { + aqc111_data->rx_checksum = 0; + reg8 |= SFR_RXCOE_IP | SFR_RXCOE_TCP | SFR_RXCOE_UDP | + SFR_RXCOE_TCPV6 | SFR_RXCOE_UDPV6; + } + + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, + 1, 1, ®8); + } + return 0; +} + static const struct net_device_ops aqc111_netdev_ops = { .ndo_open = usbnet_open, .ndo_stop = usbnet_stop, @@ -270,6 +310,7 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, + .ndo_set_features = aqc111_set_features, }; static int aqc111_read_perm_mac(struct usbnet *dev) @@ -680,6 +721,7 @@ static void aqc111_rx_checksum(struct sk_buff *skb, u64 pkt_desc) static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) { + struct aqc111_data *aqc111_data = dev->driver_priv; struct sk_buff *new_skb = NULL; u32 pkt_total_offset = 0; u64 *pkt_desc_ptr = NULL; @@ -755,7 +797,8 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) skb_set_tail_pointer(new_skb, new_skb->len); new_skb->truesize = SKB_TRUESIZE(new_skb->len); - aqc111_rx_checksum(new_skb, pkt_desc); + if (aqc111_data->rx_checksum) + aqc111_rx_checksum(new_skb, pkt_desc); usbnet_skb_return(dev, new_skb); if (pkt_count == 0) diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index ff43443bfd72..165cdb8b022c 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -138,6 +138,7 @@ /******************************************************************************/ struct aqc111_data { + u8 rx_checksum; u8 link_speed; u8 link; u8 autoneg; From patchwork Mon Nov 26 09:33:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003079 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="UD2PZHwX"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDD6p3tz9s3C for ; Mon, 26 Nov 2018 20:33:32 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726462AbeKZU1D (ORCPT ); Mon, 26 Nov 2018 15:27:03 -0500 Received: from mail-eopbgr710077.outbound.protection.outlook.com ([40.107.71.77]:42622 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726279AbeKZU1C (ORCPT ); Mon, 26 Nov 2018 15:27:02 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/NBRsgV1UZ9yOyDzFCHI/FrZrUNA0g3BjMcL6IohHKI=; b=UD2PZHwX9IBEajUWp48TURA8ydj24fSUqaiP6gXK/GwSwP9ZzUwtiSs6ujkvxYD3hglE6DfSkqowvxYVYQt2c2T5gt7CfSZiuw8riCuKSKg/TG/BFj5NHbu1riT5/zhSdR5cjAXCgzLy5M4PgdWWvtlEte8dNn6vQek3A6iS9Zw= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:28 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:28 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 13/21] net: usb: aqc111: Add support for TSO Thread-Topic: [PATCH v4 net-next 13/21] net: usb: aqc111: Add support for TSO Thread-Index: AQHUhWsWW4Fft1GGd0+H/ENJhq53Qw== Date: Mon, 26 Nov 2018 09:33:28 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:7INfbMmHwaIELJadsZr4vjOh4ukOLuZCRLe5IPnRKLZ3ziy997gTucqA4yxQN2llKHE77hf6akCDj/RyXN9hH5O9TD4l/lgKtYAKk8TzMKntXsukvEDu+DNIQEtCqsa1jrCeGz6M2+IkHGbRRFQholPfXBaqgKklFcV1QXcbNYyjhZxxmOriSMJpu4Ape1ZS0RkBSJz9k++cOKMLK5TapHw+mxLiDaVPUWxHg+RxxnHfhwbCenJyRr8kLNf5PyvLcdVfR432x88Y4/2RInDK0i3Ymo4UFBJz7Qkau/djj5lXqzBtlCjo9dZMiQzp00SPY74JSlqpR08GbgW2LYFLOfjw3wE4yfci2q6uq7dnLQf3rlsq28cCnBc9FaergpzbVkyLkVQSF59xMBGE2P2v5s3wF+6KBVSv7BWnQZvGtMMDP9QuYUs0Qbv97NAKLtyTeo+AHeQ8hSPlWhIsBz5NKA==; 5:drh1gVxbHxZgwprBi9iDR6H/7seT8Cf+05yuVizBG2rgTcR4RFKCVXdiPti0j9e/o0ZBxkoD1JYWClcquG9Ph3IoQdWcnV6hIy60TZKgtFgw3tQIL2Yd695K+VsxTyIuueWHa1D9u6sxznpy2lzIg4iymhuR/WLovL5IQbFckf0=; 7:ImlKcGlhe8L2K63tX3TyR/wthbAUGLI+OCDhnZ++dD07gf9gdCqCcWCQIiiVEJxJXV5sW5U39TwiGh7MylGy908R3XKpoTQYGZwkkuF/IEd1+73uuRUwihxzUUlXbQ8KANP98rh4XYOD71I0+OiFgA== x-ms-office365-filtering-correlation-id: f7485319-6a84-4ce7-363e-08d6538238c9 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: Xskb7ugDZx2lXPMHSu7Em33Wi2iSmSUMcu+bk7U9Z7JGdcca9ik8U5+uPA55M3ZVV5euF/6y1eV5YqWjJdjdm/bZA0G4wkselFE7yCKeob/N9lgZkAdTmdyy50U8dnbnPSoocUFH7bxPbTV2NvJxGIJn5jPiazawX41wY36M5b41Vxlk8sSZIC3LYxL8rme8C3fIU8rKbpLx1JbNPtdGSGYgQa3wE0MXleAO0b74+Wi3MB7LvkA7RxM++mGw+tfBbFu8o5LCEzc6y4VUDwZkN+iPFwLVyjLEYlnHxayXpvVPR/ZbE1IZrr3d5xoBKK7Fi56J889e6veCA0u9+DUDk7Qa9HEGYgcPVxcHMB0nmiA= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7485319-6a84-4ce7-363e-08d6538238c9 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:28.7599 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 6 ++++++ drivers/net/usb/aqc111.h | 8 ++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 7b69d0a5fc4c..fce2a4f65122 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -395,6 +395,8 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; dev->net->features |= AQ_SUPPORT_FEATURE; + netif_set_gso_max_size(dev->net, 65535); + aqc111_read_fw_version(dev, aqc111_data); aqc111_data->autoneg = AUTONEG_ENABLE; aqc111_data->advertised_speed = (usb_speed == USB_SPEED_SUPER) ? @@ -832,6 +834,10 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, /*Length of actual data*/ tx_desc |= skb->len & AQ_TX_DESC_LEN_MASK; + /* TSO MSS */ + tx_desc |= ((u64)(skb_shinfo(skb)->gso_size & AQ_TX_DESC_MSS_MASK)) << + AQ_TX_DESC_MSS_SHIFT; + headroom = (skb->len + sizeof(tx_desc)) % 8; if (headroom != 0) padding_size = 8 - headroom; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 165cdb8b022c..a7a333914461 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -22,10 +22,12 @@ /* Feature. ********************************************/ #define AQ_SUPPORT_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ - NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ + NETIF_F_TSO) #define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ - NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM) + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ + NETIF_F_TSO) /* SFR Reg. ********************************************/ @@ -162,6 +164,8 @@ struct aqc111_data { /* TX Descriptor */ #define AQ_TX_DESC_LEN_MASK 0x1FFFFF #define AQ_TX_DESC_DROP_PADD BIT(28) +#define AQ_TX_DESC_MSS_MASK 0x7FFF +#define AQ_TX_DESC_MSS_SHIFT 0x20 #define AQ_RX_HW_PAD 0x02 From patchwork Mon Nov 26 09:33:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003080 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="nTL3A5t+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDG5Npnz9s3C for ; Mon, 26 Nov 2018 20:33:34 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726469AbeKZU1F (ORCPT ); Mon, 26 Nov 2018 15:27:05 -0500 Received: from mail-eopbgr710061.outbound.protection.outlook.com ([40.107.71.61]:22288 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726266AbeKZU1E (ORCPT ); Mon, 26 Nov 2018 15:27:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tjL18pU+LnpiNPlCjgPqsyqcVFk2Jv50fB8uQ+lHaNU=; b=nTL3A5t+yGP+9VygKT3CSkdNJYQnkZ6MHQkVxR8VHKEedmdufE3QqOPfsgyBmuCWzHbCTIdzs/T6A8/0UQJCmi/NNt8dKoaieIGHUy+FE6QB3Q2iD/j+o64h08PzxbKhawCg0ODBqv6Inu1JQ19czShE9EGwwV3uWwZoKT60E1Y= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:31 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:31 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 14/21] net: usb: aqc111: Implement set_rx_mode callback Thread-Topic: [PATCH v4 net-next 14/21] net: usb: aqc111: Implement set_rx_mode callback Thread-Index: AQHUhWsXNxn531DCYUWus2hCDP7dCQ== Date: Mon, 26 Nov 2018 09:33:31 +0000 Message-ID: <885f32f816c335a86ee6477cb4f71a37ecc116b6.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:y235F5S1O4NcqCD5Lc+q5V3CEvL6jLI7g1c3cfoZ9J6H7GjY6rXeYd+zwvNUmA6uTf7owN5A9UlNR2aJWpenjQ7pncoLcS7P5JKeXGbNZ6IiszYTkO+OMQ5jTFr1F7QLIVbJelbF2fnhZJjrdhxwcLBP5UowwvYFtm+mIBERkp+0a1/3e5pN7VSUyth98lScxNUNDvCIOxaz+YUU1Ry2Q+c/WgMrvjB705/fH1TVnh2BOBpXog6c4OGV6yNrOqkSGfvDoJ6oqrLGNS5dDLuV4IXdvuKotFCudEuHudRxiXwW35+3dvRABTIMACP5PAAYI4ffwNmQhP4l99ro7mYm96pCeUjGAzOX/oweNZiB5Cm+2rVFSLJrTCOLx0y3IHSaSeBdI+h2kxWWjlmHdjcvXVxOUIFZy0+ByRkTLTbPSrQqqOQqHOJJweaYiNTUJL52noSCI/reinnDtykx+jWoaw==; 5:m4/sBi8sXib5bqk+R73Mo+naWiL99thhamYkjAtxKETg0AlWOWkFAWYZ+gg0j2L/IjKUEjjlhrLl/GrjOxQRnUXembOC+tm/yWvP4i1hpoABeV93Z3bIhLSHhl6wEqLka8xJ2yAZmGGG4lx4KzVWVXjcIHgbK0aUOFORZcDmSh4=; 7:g5+NZdVYon6L/GQyvuVNxyk+Cf/3X8dqCC3K8CwhIyfWWQs21mZQo3dlXTJKE3RIscIqwe8WuQ0e0C5F3UbG64FKY0/l43/O6m3LgvAklkXfMffsqkCLWrKOT9dNnEGkqwZqPhAo81oIsQMtYXBbUg== x-ms-office365-filtering-correlation-id: a821f09e-6414-4977-a06a-08d653823a33 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(979002)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: z8quW3+XtpfBkj1su5YP/VyJ1/jnQ79huILWHuQ/oT3ndgFsPtioinvbYVkbspVAgWvyPE2NcK4S5mwCi3kZ/M9iBe8IjNbqyOAN0jKhjXzjOTpy/WnTtEBtJZ3TXULsyrjmgZB4Z3ytBb09ukV1XG/zBL4VT2LE/BHLQL4rGiIAxhC2Sm83G2CC8yTAviUgjvxBO+0Ad7hKR/KgbAQ22mZYA8lnRRCWaZtzc+FiySFPj1fuXahO+4AIxssl7d67U9mnzOZANkMOetRsY910caO9mYShCl52qYV2bSUhYI3Z4wHuzOSzuX4e3c+X0wGrYh8GkYR3T/k30tYxVDiEQFM5VLo+WVRIcsmTCzhmFnE= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a821f09e-6414-4977-a06a-08d653823a33 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:31.1351 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 72 +++++++++++++++++++++++++++++++++++++--- drivers/net/usb/aqc111.h | 4 +++ 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index fce2a4f65122..29131b1e0eec 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -158,6 +159,25 @@ static int aqc111_write32_cmd(struct usbnet *dev, u8 cmd, u16 value, return aqc111_write_cmd(dev, cmd, value, index, sizeof(tmp), &tmp); } +static int aqc111_write_cmd_async(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 size, void *data) +{ + return usbnet_write_cmd_async(dev, cmd, USB_DIR_OUT | USB_TYPE_VENDOR | + USB_RECIP_DEVICE, value, index, data, + size); +} + +static int aqc111_write16_cmd_async(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + u16 tmp = *data; + + cpu_to_le16s(&tmp); + + return aqc111_write_cmd_async(dev, cmd, value, index, + sizeof(tmp), &tmp); +} + static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) { struct aqc111_data *aqc111_data = dev->driver_priv; @@ -261,6 +281,43 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) ETH_ALEN, net->dev_addr); } +static void aqc111_set_rx_mode(struct net_device *net) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + int mc_count = 0; + + mc_count = netdev_mc_count(net); + + aqc111_data->rxctl &= ~(SFR_RX_CTL_PRO | SFR_RX_CTL_AMALL | + SFR_RX_CTL_AM); + + if (net->flags & IFF_PROMISC) { + aqc111_data->rxctl |= SFR_RX_CTL_PRO; + } else if ((net->flags & IFF_ALLMULTI) || mc_count > AQ_MAX_MCAST) { + aqc111_data->rxctl |= SFR_RX_CTL_AMALL; + } else if (!netdev_mc_empty(net)) { + u8 m_filter[AQ_MCAST_FILTER_SIZE] = { 0 }; + struct netdev_hw_addr *ha = NULL; + u32 crc_bits = 0; + + netdev_for_each_mc_addr(ha, net) { + crc_bits = ether_crc(ETH_ALEN, ha->addr) >> 26; + m_filter[crc_bits >> 3] |= BIT(crc_bits & 7); + } + + aqc111_write_cmd_async(dev, AQ_ACCESS_MAC, + SFR_MULTI_FILTER_ARRY, + AQ_MCAST_FILTER_SIZE, + AQ_MCAST_FILTER_SIZE, m_filter); + + aqc111_data->rxctl |= SFR_RX_CTL_AM; + } + + aqc111_write16_cmd_async(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &aqc111_data->rxctl); +} + static int aqc111_set_features(struct net_device *net, netdev_features_t features) { @@ -310,6 +367,7 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, + .ndo_set_rx_mode = aqc111_set_rx_mode, .ndo_set_features = aqc111_set_features, }; @@ -582,6 +640,7 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_ARC_CTRL, 1, 1, ®8); reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB; + aqc111_data->rxctl = reg16; aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); reg8 = SFR_RX_PATH_READY; @@ -602,6 +661,8 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_configure_csum_offload(dev); + aqc111_set_rx_mode(dev->net); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); @@ -613,8 +674,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); - reg16 = SFR_RX_CTL_IPE | SFR_RX_CTL_AB | SFR_RX_CTL_START; - aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + aqc111_data->rxctl |= SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &aqc111_data->rxctl); netif_carrier_on(dev->net); } else { @@ -624,9 +686,9 @@ static int aqc111_link_reset(struct usbnet *dev) aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, 2, ®16); - aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); - reg16 &= ~SFR_RX_CTL_START; - aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + aqc111_data->rxctl &= ~SFR_RX_CTL_START; + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &aqc111_data->rxctl); reg8 = SFR_BULK_OUT_FLUSH_EN | SFR_BULK_OUT_EFF_EN; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index a7a333914461..a57c1184c422 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -12,6 +12,9 @@ #define URB_SIZE (1024 * 62) +#define AQ_MCAST_FILTER_SIZE 8 +#define AQ_MAX_MCAST 64 + #define AQ_ACCESS_MAC 0x01 #define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 @@ -140,6 +143,7 @@ /******************************************************************************/ struct aqc111_data { + u16 rxctl; u8 rx_checksum; u8 link_speed; u8 link; From patchwork Mon Nov 26 09:33:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003081 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="HZK1Kyht"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDM2TjYz9s3C for ; Mon, 26 Nov 2018 20:33:39 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726488AbeKZU1J (ORCPT ); Mon, 26 Nov 2018 15:27:09 -0500 Received: from mail-eopbgr710063.outbound.protection.outlook.com ([40.107.71.63]:33408 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726241AbeKZU1I (ORCPT ); Mon, 26 Nov 2018 15:27:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=TzjodI20jfYtOepUyadJKeSaQJ/dxWhZ5vOLdvJm+P4=; b=HZK1Kyht3uajZvKhX1aqLK4mLnHVBbjLPM57i1mG9X3x9lwWNurmoeXZewYIpCHUDLAmF2qr7HLCLs8Tygf/g6NouLw5ILO/B68r0tJ9hU4woS+a1U2xB86B0CUQ/v7StkXlZZfmdwuCj4b0f32aA7VfKTfvumXP9EL6JU+Nb28= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:33 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:33 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 15/21] net: usb: aqc111: Add support for VLAN_CTAG_TX/RX offload Thread-Topic: [PATCH v4 net-next 15/21] net: usb: aqc111: Add support for VLAN_CTAG_TX/RX offload Thread-Index: AQHUhWsZE8DNlDOWjkuwUcLRCNjK6w== Date: Mon, 26 Nov 2018 09:33:33 +0000 Message-ID: <9a2bc16df2a664c30f811979abfa5682dc8d0329.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:z9SCO66gXHVMe+aTCPjzJ4szxpYPtXc2G41h2A/d8hYLpS6T+D8hL5ZDCnCOCGe1rlGMKcYGiEviIVyCTfGjMdecgTeWCdl4CWlQmjARf/Ekuvvan8wSgMSzrXKu8IIu0oGvAPRhcW692vY7wqA6TDicGEV0kbPTX2WPrbwEgFXboCXTrK4on2lSc6Lt8dKLeu4NuO3apJGg81BqO4KmBGfFiRtGdje8Q5e8ItjTF3K8LOeKYN9JrgAlNxvKpnu2OLH/pZON1xB5yIfV94hXpI0P5SxR110KgcGa1UOCmn75xpJaRJ1eccxMC8AwHfLm/NpmSWJ7amIbsQPHV+SBAJu//tNI3TmpgFEUH94RkUR5OpuilEmE7FswFJPiFO7Jb7hXGf8qjpbmOk7gHjiD5GTKv2Zm0Qz5N4G3OYnZZ9jIV9EOiIYkJh8EGqs8OoAODFebLUyq5XGkGHWfMiTRNA==; 5:WTk2vuefc7+Z1Ec8UXpPCd/tshu5jO++dTCJfwLhzrBO7hnXIebISGdJtsinZQx4EHLibGZ+4VQxiEOJ2RNzhfsStBal+0LSK5VrDTMZCiLllWtbJSEDrCW3670r4+vBNI7VP7gZNez5udG2b3IfKE5b7TordD+zMTuntQ+IJFs=; 7:0aqBeEOr7OPpvQXTFPqrShJK42IS+ZKV82MVcEnFVwkiYL+mEloClUT6xDoupl8xx1imMde2J5X7Qud3Lka5O3tpM3LVbAJZc7XODoBBYKJT9dOzK4urKF0Pg8nXdX/PC25LY1pl1HcwU6kFuIhJ3Q== x-ms-office365-filtering-correlation-id: 4b81145a-ffbb-4556-6ce3-08d653823ba0 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(575784001)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: KyWooTu7doQrC8g3xyMH4FHo5alTq5ZxDJfcV/dftDxctjOMqYZkPYcq7bi2iL2oHHimpZP0NuvTM1/cJ1IX6oYHZhG1pbLAqFuSxAjtXjYAYxVXt9xKbERVE1sjMO4GoWRZsOVQZvlnP9Q7wphD5K0JyLQWnbqfvdRwDKqxyVg3mTdfqqGjyKjKHeb1ZgMlT0an9fAIhQXEJwcv9TszZUOlfJ4DlO5zPyik1ITDF9beWet1Gu2gqmopJHi4y87jHVTaY5fvQm/wRqUUW5ZLSlTURTnfKJGgW6WZsY84doLYTvY/+xKEX8TO9Zb0WE7IjEd/A/8/DaY6SQW0reZikecnKWT+zLGiu5oQPoe2nyM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b81145a-ffbb-4556-6ce3-08d653823ba0 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:33.5102 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 17 +++++++++++++++++ drivers/net/usb/aqc111.h | 12 +++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 29131b1e0eec..3590d18ac44d 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -452,6 +452,7 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; dev->net->features |= AQ_SUPPORT_FEATURE; + dev->net->vlan_features |= AQ_SUPPORT_VLAN_FEATURE; netif_set_gso_max_size(dev->net, 65535); @@ -714,6 +715,7 @@ static int aqc111_reset(struct usbnet *dev) dev->net->hw_features |= AQ_SUPPORT_HW_FEATURE; dev->net->features |= AQ_SUPPORT_FEATURE; + dev->net->vlan_features |= AQ_SUPPORT_VLAN_FEATURE; /* Power up ethernet PHY */ aqc111_data->phy_cfg = AQ_PHY_POWER_EN; @@ -793,6 +795,7 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) u32 desc_offset = 0; /*RX Header Offset*/ u16 pkt_count = 0; u64 desc_hdr = 0; + u16 vlan_tag = 0; u32 skb_len = 0; if (!skb) @@ -864,6 +867,12 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb) if (aqc111_data->rx_checksum) aqc111_rx_checksum(new_skb, pkt_desc); + if (pkt_desc & AQ_RX_PD_VLAN) { + vlan_tag = pkt_desc >> AQ_RX_PD_VLAN_SHIFT; + __vlan_hwaccel_put_tag(new_skb, htons(ETH_P_8021Q), + vlan_tag & VLAN_VID_MASK); + } + usbnet_skb_return(dev, new_skb); if (pkt_count == 0) break; @@ -892,6 +901,7 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, int headroom = 0; int tailroom = 0; u64 tx_desc = 0; + u16 tci = 0; /*Length of actual data*/ tx_desc |= skb->len & AQ_TX_DESC_LEN_MASK; @@ -909,6 +919,13 @@ static struct sk_buff *aqc111_tx_fixup(struct usbnet *dev, struct sk_buff *skb, tx_desc |= AQ_TX_DESC_DROP_PADD; } + /* Vlan Tag */ + if (vlan_get_tag(skb, &tci) >= 0) { + tx_desc |= AQ_TX_DESC_VLAN; + tx_desc |= ((u64)tci & AQ_TX_DESC_VLAN_MASK) << + AQ_TX_DESC_VLAN_SHIFT; + } + if (!dev->can_dma_sg && (dev->net->features & NETIF_F_SG) && skb_linearize(skb)) return NULL; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index a57c1184c422..d09326d46273 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -26,12 +26,17 @@ /* Feature. ********************************************/ #define AQ_SUPPORT_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ - NETIF_F_TSO) + NETIF_F_TSO | NETIF_F_HW_VLAN_CTAG_TX |\ + NETIF_F_HW_VLAN_CTAG_RX) #define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ NETIF_F_TSO) +#define AQ_SUPPORT_VLAN_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ + NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ + NETIF_F_TSO) + /* SFR Reg. ********************************************/ #define SFR_GENERAL_STATUS 0x03 @@ -168,8 +173,11 @@ struct aqc111_data { /* TX Descriptor */ #define AQ_TX_DESC_LEN_MASK 0x1FFFFF #define AQ_TX_DESC_DROP_PADD BIT(28) +#define AQ_TX_DESC_VLAN BIT(29) #define AQ_TX_DESC_MSS_MASK 0x7FFF #define AQ_TX_DESC_MSS_SHIFT 0x20 +#define AQ_TX_DESC_VLAN_MASK 0xFFFF +#define AQ_TX_DESC_VLAN_SHIFT 0x30 #define AQ_RX_HW_PAD 0x02 @@ -183,10 +191,12 @@ struct aqc111_data { #define AQ_RX_PD_L3_IP 0x20 #define AQ_RX_PD_L3_IP6 0x40 +#define AQ_RX_PD_VLAN BIT(10) #define AQ_RX_PD_RX_OK BIT(11) #define AQ_RX_PD_DROP BIT(31) #define AQ_RX_PD_LEN_MASK 0x7FFF0000 #define AQ_RX_PD_LEN_SHIFT 0x10 +#define AQ_RX_PD_VLAN_SHIFT 0x20 /* RX Descriptor header */ #define AQ_RX_DH_PKT_CNT_MASK 0x1FFF From patchwork Mon Nov 26 09:33:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003082 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="SiSD7y1b"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDN1NQzz9s3q for ; Mon, 26 Nov 2018 20:33:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726499AbeKZU1K (ORCPT ); Mon, 26 Nov 2018 15:27:10 -0500 Received: from mail-eopbgr710063.outbound.protection.outlook.com ([40.107.71.63]:33408 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726266AbeKZU1J (ORCPT ); Mon, 26 Nov 2018 15:27:09 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FQxRisTOmO5adTB+3p0p4pUtZccQ+fvV/vijTcvrL5g=; b=SiSD7y1bavGk1Epw6fDThaHM/XCg3IqRh6tgJ2RkPfxPwOv3pCfDlVKeZqKmuBO6mTo8p+xA0BAKNk6tncA53UQ/rJEzYTtgrGBvEDAQZTlhK3RaaC5xlOg3+F12cLevjFbRJOD1crS6M6kao4sbg30J0pKcghWfl34Qz+IBT6w= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:36 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:36 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 16/21] net: usb: aqc111: Add RX VLAN filtering support Thread-Topic: [PATCH v4 net-next 16/21] net: usb: aqc111: Add RX VLAN filtering support Thread-Index: AQHUhWsadquAOnF1uECJJo70k4sJfQ== Date: Mon, 26 Nov 2018 09:33:35 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:9TK8iXvBDTGTJ4JAGKS7kEbZVUJlovANepuRDkiC/qWx4CTcYZhGgGY7iwT31bE98CULAhX1s/NQB9TsOzk+wIIXSsWGn40gp625O9yvnW/HSQrb5b5Q+WpvW+WoHDbQhrQVGJTd9KD59gpB3H6yWXMGKBEAOgZ0b+WHbFbwJqGC6TYJsejAN2UMaPsjb3dnT3SoLOa68PIm70pntzFHdZVXYGIpLyrqxcvUWp7FiaaVhhDriyveqRx0g/zlFXyJ6/NLIEhzoR2HmYZo4NiX4vn0hk+5FYp73LjT/HJuezuHiMlSTEr6ij1m9ZXZnHr6Ok9FNT49jKKah3L6lq+Z2bjiwu9eo8RFjAUI82NpwbboKNZogPBKplvMi8MxBUR2td8biFOe8YOczNKnoijjSvEvnNKcWmxJ4oYnugUDuhmieuzFC3wkha56fpdronDBnhWg0nE1oTm1ANIC6n0GzQ==; 5:eJFrrzIvIw1PvvvshW4MyYr6ygkPGx/gusCSb5xp9UpKA+NRu6bVq4tN16WTZeK1j592sxZeKMy8/L7AIFuJfmnSdP5cqaixfyukRJrPE09mDV6qVgRP8zbaA6ITrUeFoPVo4Xrx6cHQcDvVkVgWXy+Qfs6FrH5sbEMU+zVRLO0=; 7:6m/LlJGCuY2k0YLAGVXva7G2pQydU4FJg/n6bKD6eQJzMvcbxi5SXh22o4L/FjrT1YOgODsIEVn+aD6smo2mFEYbJ8YKSEPooQZ6+vDF56cwm5t67h1i7ZoXIQKp3wATe+aWSutgr/OV251t1K7j8g== x-ms-office365-filtering-correlation-id: b6b2d6e5-fd5f-4adf-d707-08d653823d0a x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(14444005)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 9fOrL89h3LERkmiS7UH3MJjMD51JXGuHWv9M+i32NpJQE91ScKYTe0beuTuMXfnpXFGbz19HFP98RAqJiDUbai+nu4jmWyAWxz7mjzhczfsGpYzLMDN+GtcClmE4lnVpt8qjygxq6mQsk8+R1BtnijTNTg1EyevQ5NXOHmG2reyBotyLWNqNYcl9YJZOjtUhMLM68xetQXgpBEydhxwE2j+u4Ti/7r6Po19qvKjxI+FWWV0MQS0wxcPMZawVal3w3NE+6qhNAwhAuyqTsV16jCHp2I84tbHyjMes2UPEydXwzAuJQxOj7jLJqZYkaZCk/WDNbVY3lnfrzXow0ocK8tbOFaDDWNIcFXQmcWo/xeg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6b2d6e5-fd5f-4adf-d707-08d653823d0a X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:35.8853 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 89 ++++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 2 +- 2 files changed, 90 insertions(+), 1 deletion(-) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 3590d18ac44d..3b42843d7017 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -281,6 +281,57 @@ static int aqc111_set_mac_addr(struct net_device *net, void *p) ETH_ALEN, net->dev_addr); } +static int aqc111_vlan_rx_kill_vid(struct net_device *net, + __be16 proto, u16 vid) +{ + struct usbnet *dev = netdev_priv(net); + u8 vlan_ctrl = 0; + u16 reg16 = 0; + u8 reg8 = 0; + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + vlan_ctrl = reg8; + + /* Address */ + reg8 = (vid / 16); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_ADDRESS, 1, 1, ®8); + /* Data */ + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_RD; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg16 &= ~(1 << (vid % 16)); + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_WE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + + return 0; +} + +static int aqc111_vlan_rx_add_vid(struct net_device *net, __be16 proto, u16 vid) +{ + struct usbnet *dev = netdev_priv(net); + u8 vlan_ctrl = 0; + u16 reg16 = 0; + u8 reg8 = 0; + + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + vlan_ctrl = reg8; + + /* Address */ + reg8 = (vid / 16); + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_ADDRESS, 1, 1, ®8); + /* Data */ + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_RD; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + aqc111_read16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg16 |= (1 << (vid % 16)); + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_DATA0, 2, ®16); + reg8 = vlan_ctrl | SFR_VLAN_CONTROL_WE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); + + return 0; +} + static void aqc111_set_rx_mode(struct net_device *net) { struct usbnet *dev = netdev_priv(net); @@ -324,6 +375,7 @@ static int aqc111_set_features(struct net_device *net, struct usbnet *dev = netdev_priv(net); struct aqc111_data *aqc111_data = dev->driver_priv; netdev_features_t changed = net->features ^ features; + u16 reg16 = 0; u8 reg8 = 0; if (changed & NETIF_F_IP_CSUM) { @@ -355,6 +407,39 @@ static int aqc111_set_features(struct net_device *net, aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_RXCOE_CTL, 1, 1, ®8); } + if (changed & NETIF_F_HW_VLAN_CTAG_FILTER) { + if (features & NETIF_F_HW_VLAN_CTAG_FILTER) { + u16 i = 0; + + for (i = 0; i < 256; i++) { + /* Address */ + reg8 = i; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_ADDRESS, + 1, 1, ®8); + /* Data */ + aqc111_write16_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_DATA0, + 2, ®16); + reg8 = SFR_VLAN_CONTROL_WE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + } + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + reg8 |= SFR_VLAN_CONTROL_VFE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_CONTROL, 1, 1, ®8); + } else { + aqc111_read_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, + 1, 1, ®8); + reg8 &= ~SFR_VLAN_CONTROL_VFE; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, + SFR_VLAN_ID_CONTROL, 1, 1, ®8); + } + } + return 0; } @@ -367,6 +452,8 @@ static const struct net_device_ops aqc111_netdev_ops = { .ndo_change_mtu = aqc111_change_mtu, .ndo_set_mac_address = aqc111_set_mac_addr, .ndo_validate_addr = eth_validate_addr, + .ndo_vlan_rx_add_vid = aqc111_vlan_rx_add_vid, + .ndo_vlan_rx_kill_vid = aqc111_vlan_rx_kill_vid, .ndo_set_rx_mode = aqc111_set_rx_mode, .ndo_set_features = aqc111_set_features, }; @@ -627,6 +714,8 @@ static int aqc111_link_reset(struct usbnet *dev) /* Vlan Tag Filter */ reg8 = SFR_VLAN_CONTROL_VSO; + if (dev->net->features & NETIF_F_HW_VLAN_CTAG_FILTER) + reg8 |= SFR_VLAN_CONTROL_VFE; aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_VLAN_ID_CONTROL, 1, 1, ®8); diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index d09326d46273..0ce23a741211 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -31,7 +31,7 @@ #define AQ_SUPPORT_HW_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ - NETIF_F_TSO) + NETIF_F_TSO | NETIF_F_HW_VLAN_CTAG_FILTER) #define AQ_SUPPORT_VLAN_FEATURE (NETIF_F_SG | NETIF_F_IP_CSUM |\ NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM |\ From patchwork Mon Nov 26 09:33:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003083 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="R2a+hKf1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDR0tcSz9s3C for ; Mon, 26 Nov 2018 20:33:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726509AbeKZU1M (ORCPT ); Mon, 26 Nov 2018 15:27:12 -0500 Received: from mail-eopbgr710071.outbound.protection.outlook.com ([40.107.71.71]:11008 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726266AbeKZU1L (ORCPT ); Mon, 26 Nov 2018 15:27:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PSezwCg4qt7D3MVYpaZNNyf7f/4nXoRTXSUklHj7tC8=; b=R2a+hKf10GU52MwVGuAikp2strG03kbjabdz0lkxjj3mD1yjQJYoURPvu0zKFeOPK4kt0Z2VsgDDEhC1bvITqdg9beNaUyeIkNPW3R6ZIFn6IsDK+YvW5vB5dxy7CUAmGKopFGgKgQVijm3iG/B2hTqcGZ+rnAJMT7/yiww9pyI= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:38 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:38 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 17/21] net: usb: aqc111: Initialize ethtool_ops structure Thread-Topic: [PATCH v4 net-next 17/21] net: usb: aqc111: Initialize ethtool_ops structure Thread-Index: AQHUhWsc7W+pWS5ICk6yDAYxz12N8A== Date: Mon, 26 Nov 2018 09:33:38 +0000 Message-ID: <393b443f043354b8e3cceb9ea20d19195766a2cc.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:3JKPD+M9KRh/RwghEAuqJ8KNlAQHGRIt8mjMTAzK79LaARQBzOBOf5xx+K8Abco9yVS61RbQu+uIuhHAxxfKzdsTHZSve4GjCvFLkwW24wMsuBx2/mQdTmginDuoh4g0Xh3xSG52UdVP8QuGznQSwgfmTGRRNugD8EX8bp221Ieb8Nbt7/WmNbm9Z3DrCxfOk46AG2MxxHTdvZEmDPigsuLvAZJtW6qQ32yfiOwSECs2Z+iPknCAXkjyXmmBsetkMjMBQgOb7JSobKzoooRT7aOWrH2/f/B19o2dAqBJ/t12aS/+WW6HNADJVTLCEIho4bUhPCe5xD02wW0U5vYpCsVjx6AmA9kcZf5MNXceqbM1nWFdWpttwsjbeco89ClyJj4bJK5LLjJJ8lAn6f9vHAbnmbj7a/RpuseeXYv6QcyZMfVwGHjjaBGdeNlERFjf3mcyfNSX5O0/IywzvaGlDg==; 5:3MqRLj/vl2wxhjGzpewNzL5vqxpZQco4rtSTX5nLg08d5Cq165sQExsiKo5u2KRQAFY3eRtyLM0h70ejHBHkMQ3ry7ZS5dMNK2fpMnpkUawkCGqRJ8khz3ePUdg5zzFF0MDmc98/kAuVRY7zCFhspG9OPfZxA64WK7P3Fmbx+2I=; 7:oW//Krn0Uf9x2vht6780liem/0p/Lf9ylR4H7kKTAET8TX31Uu5eW8HHdbXKkb3X8TcgmRi7szO/K8RUTlB43BnnkRKOMhHNkFYA8rCSqy+tRm2IH70mplSbqMXvw6wCcO4+jYfjADwonKMv8N6PVg== x-ms-office365-filtering-correlation-id: 1765d080-ecb9-42dd-4123-08d653823e75 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: Gc9kjbZ8inkAOtrek+x+20Bhy4G/pI27GuFryG5O6LsU1pOpnLVX2cJnBMa/8g8EJ+AYYcUIYUDGLoxhUSmh5T5jovrEpphzpC5UfiPKeKSceZ398aY4npIFAZKwKcVizwukuV607FV8XE3v9C7ahlDM3ZShwIPcQKT1ysIhgmeLWcGSAuLsI1/E2N2gsAeVHR2oUqqo2Jyv+qsO6ez/PGKnkyIB7eVdKo9BewpM6EENhzrY0mBX9sPiCuwNs7JAC3yZmXdMN8RO8c4E3FWsjLnASiN61KTohnqELEFpWmFWcR1MwvtLrz2kVO81Q1S8ZxFqNpVrWjhTcm+nauPBCGMjO2EP2tCMnT1SV40nnjY= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1765d080-ecb9-42dd-4123-08d653823e75 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:38.2604 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Implement get_drvinfo, set/get_msglevel, get_link callbacks Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 3b42843d7017..9fc036d5354b 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -18,6 +19,8 @@ #include "aqc111.h" +#define DRIVER_NAME "aqc111" + static int aqc111_read_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, u16 index, u16 size, void *data) { @@ -178,6 +181,23 @@ static int aqc111_write16_cmd_async(struct usbnet *dev, u8 cmd, u16 value, sizeof(tmp), &tmp); } +static void aqc111_get_drvinfo(struct net_device *net, + struct ethtool_drvinfo *info) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + + /* Inherit standard device info */ + usbnet_get_drvinfo(net, info); + strlcpy(info->driver, DRIVER_NAME, sizeof(info->driver)); + snprintf(info->fw_version, sizeof(info->fw_version), "%u.%u.%u", + aqc111_data->fw_ver.major, + aqc111_data->fw_ver.minor, + aqc111_data->fw_ver.rev); + info->eedump_len = 0x00; + info->regdump_len = 0x00; +} + static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) { struct aqc111_data *aqc111_data = dev->driver_priv; @@ -225,6 +245,13 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); } +static const struct ethtool_ops aqc111_ethtool_ops = { + .get_drvinfo = aqc111_get_drvinfo, + .get_msglevel = usbnet_get_msglevel, + .set_msglevel = usbnet_set_msglevel, + .get_link = ethtool_op_get_link, +}; + static int aqc111_change_mtu(struct net_device *net, int new_mtu) { struct usbnet *dev = netdev_priv(net); @@ -533,6 +560,7 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) dev->net->max_mtu = 16334; dev->net->netdev_ops = &aqc111_netdev_ops; + dev->net->ethtool_ops = &aqc111_ethtool_ops; if (usb_device_no_sg_constraint(dev->udev)) dev->can_dma_sg = 1; From patchwork Mon Nov 26 09:33:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003084 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="eNJS46+k"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDX05bsz9s3C for ; Mon, 26 Nov 2018 20:33:48 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726523AbeKZU1R (ORCPT ); Mon, 26 Nov 2018 15:27:17 -0500 Received: from mail-eopbgr710057.outbound.protection.outlook.com ([40.107.71.57]:52766 "EHLO NAM05-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726266AbeKZU1R (ORCPT ); Mon, 26 Nov 2018 15:27:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1OF/wJc9GaRORi+FYMJtaQKdsCUlOIc/nQNC8wZvv4w=; b=eNJS46+ke8xXsxXCI+xEHjVVUdxIHWRAg1+V93WSo9HpV/9f5yTScyrrz6MyJYRFlCY3FCGfqu04Y1KZbSJtjqXg4/REirDyto988iJGSaSEL7PkUaKZGeuO6CbwptufSJWRRp7eIQQuBfxMJ2HYIuZepmRJOXmwFI3shey/FGY= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1894.namprd07.prod.outlook.com (10.162.143.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.18; Mon, 26 Nov 2018 09:33:42 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:42 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 18/21] net: usb: aqc111: Implement get/set_link_ksettings callbacks Thread-Topic: [PATCH v4 net-next 18/21] net: usb: aqc111: Implement get/set_link_ksettings callbacks Thread-Index: AQHUhWseMXesdXz82UunNYyB4OGR1w== Date: Mon, 26 Nov 2018 09:33:42 +0000 Message-ID: <554064ea483929cc9eea9818b729d75b7de34250.1543224254.git.igor.russkikh@aquantia.com> References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1894; 6:qdncK3PS2Gsa4D2xUtjYtGMHdJk+9TxWpX9hfe49CBrG3Kx7mEusGzNiRNRGEavE+7X0rj/t7vjf3NPpM6jLPWpEViNW/PpvPAm40qJmdOcI/BR2X5iDxXBU2Xs3TDUDvMSus8kO7VZ3vUyFB5twzuM9IR7+xd8AhqcZLFfbJvsV/z8wYGOM8uBx6q+U8EIgAWgt1KqR8+cFSntloLZjfj1Cn9F9sVzGfVXx/5M6wa+5pTteXyfH6p3631rkm26o5O5JrigEcj0NZw0K/7mej+i6ONbwpe0aeZ/VhYt33mmFBlmFGaCdvGg5k9Um3GpCq5AX3Rt0D+6tbigsg4Us4IukOMpxcFm7qwUxXVS2pqTNhL5pF1dqP/PTp9LlTmB8zsABfzBOS/t+z6Hd1pEO2NY6E7Grt5bUwqKX2mEqthJUgx5nqBxiZ6EhXSZTLm3TGs3bMjcWgisv+BApUXLFzg==; 5:uglnglDQFW8YaF7Whnp9RrsCEEsVMZW9HdpmRDFSckz/86mmw3YaO6sCF4Gi9Fsv/jIB7IpTx2nM8LQ3kq8twhxN3UJVltJfeBPu6sZM2NKv+94nX9fk29KdjgRZNJIvy3c4f+nhugnAXvqyszcgQ0KfIw7kiiFvryQFgd5qtTo=; 7:0n66hCWTH6qOrXlt3D9SijW4lZufF3iX5QZqKdUh+qbfNu6wVwcswuRcvosKABD8B47MbLf5eW/UmfSAimoIUnMNxT4aMplkig/7gbOqfmToR1atb4OVdq2ThBUuRVRrrAh+/FUcAQUqDU0VdSVaWA== x-ms-office365-filtering-correlation-id: 72285a7c-936c-48b9-ab43-08d653823fdf x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1894; x-ms-traffictypediagnostic: BY1PR0701MB1894: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3002001)(3231443)(944501410)(52105112)(10201501046)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123560045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1894; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1894; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(39840400004)(376002)(396003)(136003)(366004)(346002)(199004)(189003)(14454004)(102836004)(97736004)(71200400001)(71190400001)(54906003)(6436002)(72206003)(105586002)(110136005)(11346002)(446003)(186003)(486006)(25786009)(2906002)(7736002)(86362001)(5660300001)(316002)(305945005)(2201001)(2501003)(53936002)(99286004)(36756003)(52116002)(6506007)(6116002)(76176011)(386003)(4326008)(3846002)(68736007)(6512007)(107886003)(476003)(81166006)(478600001)(118296001)(26005)(106356001)(8676002)(256004)(81156014)(2616005)(6486002)(66066001)(44832011)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1894; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 47xtnfsEz1msnrzdkGO3p2cg3NPdcSsOhO0id2taCC9MdKn6soSsrp4PlUnnG1A82U34ReFXOzUaKGM16LVDd77R2jnmq5F2TQnfrQVOO4yK+2CcyCjqxw1+kZWdLnTU1+uYY6IJpZke/QkVfR2pRzPE6Wx1It/BV4hqLcUMJpvDhYk32HHc+gmIjgz0CDIZoaiWRFWvwPSsetSwIimC1T9l+ZUE8OdWpc4eJGUTWNI6+2atH3ZpF4qi+NPCYOD8LRZUz3xm/wjCyxwTJwQ5859juFBL9ZJyaCvsEu7PxQQAMRcboZ6SpzNWJw6AxCKLuuWxK8l96HP4X19TAQvCPClVtfNxPPyXVQTgM+r0+zI= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 72285a7c-936c-48b9-ab43-08d653823fdf X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:42.7138 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1894 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 124 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 9fc036d5354b..650cea33f1a3 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "aqc111.h" @@ -198,6 +199,84 @@ static void aqc111_get_drvinfo(struct net_device *net, info->regdump_len = 0x00; } +static void aqc111_speed_to_link_mode(u32 speed, + struct ethtool_link_ksettings *elk) +{ + switch (speed) { + case SPEED_5000: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 5000baseT_Full); + break; + case SPEED_2500: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 2500baseT_Full); + break; + case SPEED_1000: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 1000baseT_Full); + break; + case SPEED_100: + ethtool_link_ksettings_add_link_mode(elk, advertising, + 100baseT_Full); + break; + } +} + +static int aqc111_get_link_ksettings(struct net_device *net, + struct ethtool_link_ksettings *elk) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + enum usb_device_speed usb_speed = dev->udev->speed; + u32 speed = SPEED_UNKNOWN; + + ethtool_link_ksettings_zero_link_mode(elk, supported); + ethtool_link_ksettings_add_link_mode(elk, supported, + 100baseT_Full); + ethtool_link_ksettings_add_link_mode(elk, supported, + 1000baseT_Full); + if (usb_speed == USB_SPEED_SUPER) { + ethtool_link_ksettings_add_link_mode(elk, supported, + 2500baseT_Full); + ethtool_link_ksettings_add_link_mode(elk, supported, + 5000baseT_Full); + } + ethtool_link_ksettings_add_link_mode(elk, supported, TP); + ethtool_link_ksettings_add_link_mode(elk, supported, Autoneg); + + elk->base.port = PORT_TP; + elk->base.transceiver = XCVR_INTERNAL; + + elk->base.mdio_support = 0x00; /*Not supported*/ + + if (aqc111_data->autoneg) + linkmode_copy(elk->link_modes.advertising, + elk->link_modes.supported); + else + aqc111_speed_to_link_mode(aqc111_data->advertised_speed, elk); + + elk->base.autoneg = aqc111_data->autoneg; + + switch (aqc111_data->link_speed) { + case AQ_INT_SPEED_5G: + speed = SPEED_5000; + break; + case AQ_INT_SPEED_2_5G: + speed = SPEED_2500; + break; + case AQ_INT_SPEED_1G: + speed = SPEED_1000; + break; + case AQ_INT_SPEED_100M: + speed = SPEED_100; + break; + } + elk->base.duplex = DUPLEX_FULL; + elk->base.speed = speed; + + return 0; +} + static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) { struct aqc111_data *aqc111_data = dev->driver_priv; @@ -245,11 +324,56 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, &aqc111_data->phy_cfg); } +static int aqc111_set_link_ksettings(struct net_device *net, + const struct ethtool_link_ksettings *elk) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + enum usb_device_speed usb_speed = dev->udev->speed; + u8 autoneg = elk->base.autoneg; + u32 speed = elk->base.speed; + + if (autoneg == AUTONEG_ENABLE) { + if (aqc111_data->autoneg != AUTONEG_ENABLE) { + aqc111_data->autoneg = AUTONEG_ENABLE; + aqc111_data->advertised_speed = + (usb_speed == USB_SPEED_SUPER) ? + SPEED_5000 : SPEED_1000; + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + } + } else { + if (speed != SPEED_100 && + speed != SPEED_1000 && + speed != SPEED_2500 && + speed != SPEED_5000 && + speed != SPEED_UNKNOWN) + return -EINVAL; + + if (elk->base.duplex != DUPLEX_FULL) + return -EINVAL; + + if (usb_speed != USB_SPEED_SUPER && speed > SPEED_1000) + return -EINVAL; + + aqc111_data->autoneg = AUTONEG_DISABLE; + if (speed != SPEED_UNKNOWN) + aqc111_data->advertised_speed = speed; + + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + } + + return 0; +} + static const struct ethtool_ops aqc111_ethtool_ops = { .get_drvinfo = aqc111_get_drvinfo, .get_msglevel = usbnet_get_msglevel, .set_msglevel = usbnet_set_msglevel, .get_link = ethtool_op_get_link, + .get_link_ksettings = aqc111_get_link_ksettings, + .set_link_ksettings = aqc111_set_link_ksettings }; static int aqc111_change_mtu(struct net_device *net, int new_mtu) From patchwork Mon Nov 26 09:33:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003087 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="iCDe4n6H"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDr5ysLz9s3C for ; Mon, 26 Nov 2018 20:34:04 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726543AbeKZU1X (ORCPT ); Mon, 26 Nov 2018 15:27:23 -0500 Received: from mail-eopbgr750049.outbound.protection.outlook.com ([40.107.75.49]:49408 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726266AbeKZU1W (ORCPT ); Mon, 26 Nov 2018 15:27:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=PuDBVFlQv972qtwBbgt8MzVdFkZxiB6jJ21fnvYN6FI=; b=iCDe4n6Hp9I/D3DoB7s5bL5XtQkOSeVzxVMxgpKVq2vygJn6LsC1qfUDMPddZBm298GraC6Y3HzDgJhjdXPDPsjlyVqc6uhQrkQBggnBmYrTZDD5Om0e80jk4jc3h2X/7bIJsW0Uol9c4LtEL70ZeShpUBIum/Wx/bxN3D1DBK4= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1238.namprd07.prod.outlook.com (10.160.105.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.19; Mon, 26 Nov 2018 09:33:45 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:45 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 19/21] net: usb: aqc111: Add support for wake on LAN by MAGIC packet Thread-Topic: [PATCH v4 net-next 19/21] net: usb: aqc111: Add support for wake on LAN by MAGIC packet Thread-Index: AQHUhWsgl9YYA3KXFES2joERylkuUA== Date: Mon, 26 Nov 2018 09:33:45 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1238; 6:Ht1Czehi4XsUxpD3qy5xIqkI+GIYZwb4o2w8T96KwQ7hUa5gmFM6qo812UzqMlpBJRnMXP2JMjdpt3cuqbMVcLBGwowY0mYxhajPrPX+Muuy3iVEmaFgznJhZ7joTvfNSA1hqU9ZvK8FAMItFqVcbNDX1Lx2nk3Av1oV54oqXVCN5f3XjAo/dOAcW08wgK3Cf9s3bvZn05uvmHQG0UiA0SzaMD//wVMQevEO3OyTzi7cN/bZ1WDubNeIrzSuzsGGmks47hZUH0M4oSnG4ZurSAPrcNzHbt4xjftGzBqVEeg5tNRYf8ZDrS+ZlCemIEPeLiFx5ZfN8HJw5o14zaIX0V1/eCh7LBz5XHbHjR0004zfj+jQq4ob4Rp/+9qr3rnY8f5HqFqk25gNVButQjcqSIUUv5b9KXT92zO3TeV1i9JaiY3s7iqRaC1FQfnrfXtOKtWNa5ADpS3rIKjXxxk8IA==; 5:wLh/6EeRpQWlJ8zFkzclpKb4JjfZkXU2Up7h3jhsCKmU8j2Clup21Yqy5TxPEjNBNE4eE1B0NzWFleTVB4rfhnEREvxuLsFyDLXkljuiIzoqt/frZSVbxer+yoZB+VqPHOCKb1+f2TZnszTdZjF3wscCG6aDETVe1fvLna6CPWY=; 7:Ewfl1fvhzYIKbDZ9p7mlohHusgHq4j4cYVrBX9HmjPFOSrPm5wfTEgGuTxwAr/WQyHIUXL9hH2EAIegc2vpq8pNsWK9y/L6aaGs2D5ajlEmrmwPuHOP7JnmzHopBbuQQXyHtGmvroy8JqXcOcfBLFw== x-ms-office365-filtering-correlation-id: 43504896-3982-42e7-324a-08d653824287 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1238; x-ms-traffictypediagnostic: BY1PR0701MB1238: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231443)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1238; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1238; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(346002)(39840400004)(366004)(376002)(199004)(189003)(446003)(44832011)(71200400001)(71190400001)(476003)(11346002)(2616005)(486006)(305945005)(7736002)(3846002)(6116002)(5660300001)(2906002)(2501003)(97736004)(316002)(54906003)(36756003)(110136005)(68736007)(8936002)(81166006)(81156014)(118296001)(106356001)(8676002)(105586002)(6506007)(386003)(52116002)(102836004)(76176011)(186003)(26005)(72206003)(14454004)(25786009)(478600001)(14444005)(256004)(66066001)(4326008)(107886003)(86362001)(575784001)(2201001)(6486002)(53936002)(6436002)(6512007)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1238; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: HXmY3oX9e11Vuy0UsDGPS04fa/R9O1FWTIsDfqTbiX4F5KUesHEuDeWByMg2BVG450VWcspg7wgY6j2q+NjP8qN7jT80b3sfubEmMAcMtPI7rsISRcpVylufY3U8OU0jYgU+Psfa0UVQQDr/9htaOD4qyYr57zcZ6K8wvzQZJonn1hUsb8Mq7+0b2kug+pzyb65G0pL7ealzC9ghmmhipadfOA4a+iEsYuFGFO0zrzODPlQGOKzl/RPa5y+vYXqGKn5ghKSoSbnb+hLNrz0XmAoOw37LkOsH85o4gzPZmqEwOhxY7CmPGZIM0JsgNYDVTV9wETi3JaXxU99EqBHQCpgww9xtNaTUe/SfPFPXHBU= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 43504896-3982-42e7-324a-08d653824287 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:45.1045 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1238 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 180 +++++++++++++++++++++++++++++++++++++++ drivers/net/usb/aqc111.h | 12 +++ 2 files changed, 192 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 650cea33f1a3..7c859b9417f1 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -54,6 +54,17 @@ static int aqc111_read_cmd(struct usbnet *dev, u8 cmd, u16 value, return ret; } +static int aqc111_read16_cmd_nopm(struct usbnet *dev, u8 cmd, u16 value, + u16 index, u16 *data) +{ + int ret = 0; + + ret = aqc111_read_cmd_nopm(dev, cmd, value, index, sizeof(*data), data); + le16_to_cpus(data); + + return ret; +} + static int aqc111_read16_cmd(struct usbnet *dev, u8 cmd, u16 value, u16 index, u16 *data) { @@ -199,6 +210,35 @@ static void aqc111_get_drvinfo(struct net_device *net, info->regdump_len = 0x00; } +static void aqc111_get_wol(struct net_device *net, + struct ethtool_wolinfo *wolinfo) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + + wolinfo->supported = WAKE_MAGIC; + wolinfo->wolopts = 0; + + if (aqc111_data->wol_flags & AQ_WOL_FLAG_MP) + wolinfo->wolopts |= WAKE_MAGIC; +} + +static int aqc111_set_wol(struct net_device *net, + struct ethtool_wolinfo *wolinfo) +{ + struct usbnet *dev = netdev_priv(net); + struct aqc111_data *aqc111_data = dev->driver_priv; + + if (wolinfo->wolopts & ~WAKE_MAGIC) + return -EINVAL; + + aqc111_data->wol_flags = 0; + if (wolinfo->wolopts & WAKE_MAGIC) + aqc111_data->wol_flags |= AQ_WOL_FLAG_MP; + + return 0; +} + static void aqc111_speed_to_link_mode(u32 speed, struct ethtool_link_ksettings *elk) { @@ -369,6 +409,8 @@ static int aqc111_set_link_ksettings(struct net_device *net, static const struct ethtool_ops aqc111_ethtool_ops = { .get_drvinfo = aqc111_get_drvinfo, + .get_wol = aqc111_get_wol, + .set_wol = aqc111_set_wol, .get_msglevel = usbnet_get_msglevel, .set_msglevel = usbnet_set_msglevel, .get_link = ethtool_op_get_link, @@ -1207,6 +1249,142 @@ static const struct driver_info aqc111_info = { .tx_fixup = aqc111_tx_fixup, }; +static int aqc111_suspend(struct usb_interface *intf, pm_message_t message) +{ + struct usbnet *dev = usb_get_intfdata(intf); + struct aqc111_data *aqc111_data = dev->driver_priv; + u16 temp_rx_ctrl = 0x00; + u16 reg16; + u8 reg8; + + usbnet_suspend(intf, message); + + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + temp_rx_ctrl = reg16; + /* Stop RX operations*/ + reg16 &= ~SFR_RX_CTL_START; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + /* Force bz */ + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); + reg16 |= SFR_PHYPWR_RSTCTL_BZ; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_PHYPWR_RSTCTL, + 2, ®16); + + reg8 = SFR_BULK_OUT_EFF_EN; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BULK_OUT_CTRL, + 1, 1, ®8); + + temp_rx_ctrl &= ~(SFR_RX_CTL_START | SFR_RX_CTL_RF_WAK | + SFR_RX_CTL_AP | SFR_RX_CTL_AM); + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &temp_rx_ctrl); + + reg8 = 0x00; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + + if (aqc111_data->wol_flags) { + struct aqc111_wol_cfg wol_cfg = { 0 }; + + aqc111_data->phy_cfg |= AQ_WOL; + ether_addr_copy(wol_cfg.hw_addr, dev->net->dev_addr); + wol_cfg.flags = aqc111_data->wol_flags; + + temp_rx_ctrl |= (SFR_RX_CTL_AB | SFR_RX_CTL_START); + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, + 2, &temp_rx_ctrl); + reg8 = 0x00; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, + 1, 1, ®8); + reg8 = SFR_BMRX_DMA_EN; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BMRX_DMA_CONTROL, + 1, 1, ®8); + reg8 = SFR_RX_PATH_READY; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + reg8 = 0x07; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QCTRL, + 1, 1, ®8); + reg8 = 0x00; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_RX_BULKIN_QTIMR_LOW, 1, 1, ®8); + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_RX_BULKIN_QTIMR_HIGH, 1, 1, ®8); + reg8 = 0xFF; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QSIZE, + 1, 1, ®8); + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_BULKIN_QIFG, + 1, 1, ®8); + + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + reg16 |= SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + + aqc111_write_cmd(dev, AQ_WOL_CFG, 0, 0, + WOL_CFG_SIZE, &wol_cfg); + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + } else { + aqc111_data->phy_cfg |= AQ_LOW_POWER; + aqc111_write32_cmd(dev, AQ_PHY_OPS, 0, 0, + &aqc111_data->phy_cfg); + + /* Disable RX path */ + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + reg16 &= ~SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, + SFR_MEDIUM_STATUS_MODE, 2, ®16); + } + + return 0; +} + +static int aqc111_resume(struct usb_interface *intf) +{ + struct usbnet *dev = usb_get_intfdata(intf); + struct aqc111_data *aqc111_data = dev->driver_priv; + u16 reg16; + u8 reg8; + + netif_carrier_off(dev->net); + + /* Power up ethernet PHY */ + aqc111_data->phy_cfg |= AQ_PHY_POWER_EN; + aqc111_data->phy_cfg &= ~AQ_LOW_POWER; + aqc111_data->phy_cfg &= ~AQ_WOL; + + reg8 = 0xFF; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_BM_INT_MASK, + 1, 1, ®8); + /* Configure RX control register => start operation */ + reg16 = aqc111_data->rxctl; + reg16 &= ~SFR_RX_CTL_START; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + reg16 |= SFR_RX_CTL_START; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_RX_CTL, 2, ®16); + + aqc111_set_phy_speed(dev, aqc111_data->autoneg, + aqc111_data->advertised_speed); + + aqc111_read16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg16 |= SFR_MEDIUM_RECEIVE_EN; + aqc111_write16_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_MEDIUM_STATUS_MODE, + 2, ®16); + reg8 = SFR_RX_PATH_READY; + aqc111_write_cmd_nopm(dev, AQ_ACCESS_MAC, SFR_ETH_MAC_PATH, + 1, 1, ®8); + reg8 = 0x0; + aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_BMRX_DMA_CONTROL, 1, 1, ®8); + + return usbnet_resume(intf); +} + #define AQC111_USB_ETH_DEV(vid, pid, table) \ USB_DEVICE_INTERFACE_CLASS((vid), (pid), USB_CLASS_VENDOR_SPEC), \ .driver_info = (unsigned long)&(table) \ @@ -1228,6 +1406,8 @@ static struct usb_driver aq_driver = { .name = "aqc111", .id_table = products, .probe = usbnet_probe, + .suspend = aqc111_suspend, + .resume = aqc111_resume, .disconnect = usbnet_disconnect, }; diff --git a/drivers/net/usb/aqc111.h b/drivers/net/usb/aqc111.h index 0ce23a741211..4d68b3a6067c 100644 --- a/drivers/net/usb/aqc111.h +++ b/drivers/net/usb/aqc111.h @@ -18,6 +18,7 @@ #define AQ_ACCESS_MAC 0x01 #define AQ_FLASH_PARAMETERS 0x20 #define AQ_PHY_POWER 0x31 +#define AQ_WOL_CFG 0x60 #define AQ_PHY_OPS 0x61 #define AQ_USB_PHY_SET_TIMEOUT 10000 @@ -145,8 +146,18 @@ #define AQ_DSH_RETRIES_SHIFT 0x18 #define AQ_DSH_RETRIES_MASK 0xF000000 +#define AQ_WOL_FLAG_MP 0x2 + /******************************************************************************/ +struct aqc111_wol_cfg { + u8 hw_addr[6]; + u8 flags; + u8 rsvd[283]; +} __packed; + +#define WOL_CFG_SIZE sizeof(struct aqc111_wol_cfg) + struct aqc111_data { u16 rxctl; u8 rx_checksum; @@ -160,6 +171,7 @@ struct aqc111_data { u8 rev; } fw_ver; u32 phy_cfg; + u8 wol_flags; }; #define AQ_LS_MASK 0x8000 From patchwork Mon Nov 26 09:33:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003085 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="iXfsiw4y"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDf1dq3z9s3C for ; Mon, 26 Nov 2018 20:33:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726552AbeKZU1Y (ORCPT ); Mon, 26 Nov 2018 15:27:24 -0500 Received: from mail-eopbgr750049.outbound.protection.outlook.com ([40.107.75.49]:49408 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726532AbeKZU1X (ORCPT ); Mon, 26 Nov 2018 15:27:23 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=npu0Zld4FUvRWol9kCA2kEuf7n0w8NG8uvpQdZ4nYow=; b=iXfsiw4yiMWLtE152K2FQRFFQx18a234STM6x0g4HpI1lJmn3eimY4H2Vj8gMEgaUiZYCSgZrs+skxUhuAo6ym3/P9vk3JSDRE5hJ1eSCLK09iqZdl2G1PdYSwp1ojW8vUK5Dny/fqm0kdTQFxdCvwtehdLg/Ow4z6s4nizMqrE= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1238.namprd07.prod.outlook.com (10.160.105.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.19; Mon, 26 Nov 2018 09:33:47 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:47 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 20/21] net: usb: aqc111: Add ASIX's HW ids Thread-Topic: [PATCH v4 net-next 20/21] net: usb: aqc111: Add ASIX's HW ids Thread-Index: AQHUhWsh51rDBzrpU0eomZs1eKqmzg== Date: Mon, 26 Nov 2018 09:33:47 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1238; 6:1kZdEdD3ThJ0Tv1+8lcKeC0jxkf9g9/8ngm40svh/KDdh90ZtdgRdG/asfXkVjIP5xU5QGNGADOA6CmvtybkvOL1GdtkqPczIOuCGdpy2u7VZvTzOHM0oWEHn9cGua27e0EMwzIPFJRtOSM6TTngZckvr+MReQYLA+Wza14AHEusVGHJsWRcLhUeZU79b9CNKP5maG6IfNaiQwMP1SY/DeZcNvtlTo4B/ZWsKQbgWPGeU0a74OXdP7PTwA39f/7lEHEtPtuAb+11H5ijVtYyLwuO++mSPjnKS03xu0fPklVgRcHJNddxkMwke2zoqsYIs5a7zbbuypUfU+MRPrqNWM9KbfjehcGD2hQimfoQSGthJQM2X8tBpUsiwqgjyZWpW3oFJdXkBJfpbBtzqOQYfYAEZBoH6dCmfvaga+wll9M38+jXg4KeJjJg5gsX3tjSOmqoxECMwyV9R5YgnbhqsQ==; 5:wv4PuTKV1M99L5yDTFZ94tOq69eV4bH959jaUWEA7rwf0xPkwYG9K+P5Jm9F8JO4/OuCiI66loTibykC5Gpy4ZpLflwBnm9eqfdfhiIOpQ6N6543NmDld5mnEr2uvsly9akFubab1WR19ukWDTWfGI0vBdllwPJsp8gkauw1Mro=; 7:2YlGFbtBGAwqfetIHcCpYx0yFT+f0nyoBA+ImC8qT9Yswejhkm+zSslx8w/SG5ttoaAZv15IxcmRCTEta3s85FFwVyKb88eN9x9+pjMNfFFFdAknUf8CERkk9sY4Onv4EsI5BHB75WbE2qzu1+kzGA== x-ms-office365-filtering-correlation-id: bc872ecf-71f7-4d00-612a-08d6538243f6 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1238; x-ms-traffictypediagnostic: BY1PR0701MB1238: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231443)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1238; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1238; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(346002)(39840400004)(366004)(376002)(199004)(189003)(446003)(44832011)(71200400001)(71190400001)(476003)(11346002)(2616005)(486006)(305945005)(7736002)(3846002)(6116002)(5660300001)(2906002)(2501003)(97736004)(316002)(54906003)(36756003)(110136005)(68736007)(8936002)(81166006)(81156014)(118296001)(106356001)(8676002)(105586002)(6506007)(386003)(52116002)(102836004)(76176011)(186003)(26005)(72206003)(14454004)(25786009)(478600001)(14444005)(256004)(66066001)(4326008)(107886003)(86362001)(575784001)(2201001)(6486002)(53936002)(6436002)(6512007)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1238; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 3rib6DPzF+udpX1k3ehjSr4CGWckMc8rHzkzlWzIZwidsw3MkRSkTC3fLf5o7NVUlNnhpNfDfF4htzb6ct5Tfw3e4KTT/1TiFgjBLuieLjOCV88I0xwDwUvZ4UT0zHQ61Py2kZ+sxO3+xTgdho5S17yO+JO3yUQ/SyxU2AHjSUXI+eURWo8ThYeYEILP186R8kIzhq9rx2OKOpOtB8XdlWXv1KQuK1vu0hEkbiMPyGUqlVAWVV4HM5pIqSBE3ye4RstVlzQw+UyZbaCrTOmQPeQ7+QH2uZLjA6yBqvS62TtjTH4qHiLVXe/jKNUBINGotskA0crwN18f1UwzTWKTZfUY1RycAV6F0mMOyXThL9w= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: bc872ecf-71f7-4d00-612a-08d6538243f6 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:47.5734 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1238 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov It enables driver for ASIX products which are also based on aqc111/112U chips. Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/aqc111.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index 7c859b9417f1..f69d566bd523 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -1249,6 +1249,44 @@ static const struct driver_info aqc111_info = { .tx_fixup = aqc111_tx_fixup, }; +#define ASIX111_DESC \ +"ASIX USB 3.1 Gen1 to 5G Multi-Gigabit Ethernet Adapter" + +static const struct driver_info asix111_info = { + .description = ASIX111_DESC, + .bind = aqc111_bind, + .unbind = aqc111_unbind, + .status = aqc111_status, + .link_reset = aqc111_link_reset, + .reset = aqc111_reset, + .stop = aqc111_stop, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | + FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .rx_fixup = aqc111_rx_fixup, + .tx_fixup = aqc111_tx_fixup, +}; + +#undef ASIX111_DESC + +#define ASIX112_DESC \ +"ASIX USB 3.1 Gen1 to 2.5G Multi-Gigabit Ethernet Adapter" + +static const struct driver_info asix112_info = { + .description = ASIX112_DESC, + .bind = aqc111_bind, + .unbind = aqc111_unbind, + .status = aqc111_status, + .link_reset = aqc111_link_reset, + .reset = aqc111_reset, + .stop = aqc111_stop, + .flags = FLAG_ETHER | FLAG_FRAMING_AX | + FLAG_AVOID_UNLINK_URBS | FLAG_MULTI_PACKET, + .rx_fixup = aqc111_rx_fixup, + .tx_fixup = aqc111_tx_fixup, +}; + +#undef ASIX112_DESC + static int aqc111_suspend(struct usb_interface *intf, pm_message_t message) { struct usbnet *dev = usb_get_intfdata(intf); @@ -1398,6 +1436,8 @@ static int aqc111_resume(struct usb_interface *intf) static const struct usb_device_id products[] = { {AQC111_USB_ETH_DEV(0x2eca, 0xc101, aqc111_info)}, + {AQC111_USB_ETH_DEV(0x0b95, 0x2790, asix111_info)}, + {AQC111_USB_ETH_DEV(0x0b95, 0x2791, asix112_info)}, { },/* END */ }; MODULE_DEVICE_TABLE(usb, products); From patchwork Mon Nov 26 09:33:50 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Igor Russkikh X-Patchwork-Id: 1003086 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=aquantia.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=AQUANTIA1COM.onmicrosoft.com header.i=@AQUANTIA1COM.onmicrosoft.com header.b="S13REZBR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 433MDg08HYz9s3q for ; Mon, 26 Nov 2018 20:33:55 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726579AbeKZU1Z (ORCPT ); Mon, 26 Nov 2018 15:27:25 -0500 Received: from mail-eopbgr750049.outbound.protection.outlook.com ([40.107.75.49]:49408 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726266AbeKZU1Y (ORCPT ); Mon, 26 Nov 2018 15:27:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=AQUANTIA1COM.onmicrosoft.com; s=selector1-aquantia-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=iS4KGUZsJ4AvvDCIOMz9ZcdPx2KfYHm7mKlO7BIhq50=; b=S13REZBRTcFkRl9yh7h8MNKs3eD48Drw5gmxCkbqnZuNsXit0NqVfS1hjsqwBlZVJd108VniuZ+d2WmCVUHfYX7LD+tvLt2NvlYl6YX0oQCSI5hjTE7ume2R4NGYvbXZk6GV0dba41n9FdoSdYv61sSEuyuwBtkgUHppv9XtCBQ= Received: from BY1PR0701MB1660.namprd07.prod.outlook.com (10.162.110.22) by BY1PR0701MB1238.namprd07.prod.outlook.com (10.160.105.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1361.19; Mon, 26 Nov 2018 09:33:50 +0000 Received: from BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd]) by BY1PR0701MB1660.namprd07.prod.outlook.com ([fe80::f8ee:2260:e410:fffd%3]) with mapi id 15.20.1361.019; Mon, 26 Nov 2018 09:33:50 +0000 From: Igor Russkikh To: "linux-usb@vger.kernel.org" , "davem@davemloft.net" , "netdev@vger.kernel.org" CC: "andrew@lunn.ch" , Dmitry Bezrukov , Igor Russkikh Subject: [PATCH v4 net-next 21/21] net: usb: aqc111: Extend cdc_ether blacklist Thread-Topic: [PATCH v4 net-next 21/21] net: usb: aqc111: Extend cdc_ether blacklist Thread-Index: AQHUhWsj+Hew7yQfhk+3KEFG9Ej+8w== Date: Mon, 26 Nov 2018 09:33:50 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: AM6PR03CA0024.eurprd03.prod.outlook.com (2603:10a6:20b::37) To BY1PR0701MB1660.namprd07.prod.outlook.com (2a01:111:e400:522a::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Igor.Russkikh@aquantia.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [95.79.108.179] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BY1PR0701MB1238; 6:bVAvq6Q4x0nDc/ZqZrQkbf8g9TP36niZHNYqZ87cPikanJJToREHrea2gPxxy0I56O5Qb4mx14xp8phODgtkS8bTBEKGZK3Y6ay3sW+LmC0JSGvDcdMqHa5lgUn8lf8TV4SMlce/X/2r060X3NuKBpYLMzy8n6D5TTW+5HXBuAB0SUHwDTHM6sqZMj5lSmXMsv+HeUGMB4etOYDESmKu/1HKMJz6Pwshe4YtP1yOHqObuiFto0fD4YewXSCBV+XYvCvYn8cIknrxTlUuSG9jfCDaIyb3IkV8QUNZXiG6iXSLhGnOFCtFJARdt9YQS/EQrSI2su2USAH4Ui+zhr3LJbcVNRreJ15THWGwN05trlcoPdMsNrO1Wou8ATvCQq0/8xc9Rhf/WVIM5BgdSxUBTgkW7L8tLrZ9HxhcrIXxSuYH36MPUIGfnFpzdHvrTJFPrBW9ptNSyAnvpMaHkv01qw==; 5:iIGMHiPvEGA31TQz2ykpPfh7SyCavnKy/HEHuSTgeZSUBL9QSs6QLmzPhQ1E57X4N2CTbMqx86GNm7aXQdLSt94/NwnvpDlLd+RZ58Q4oxEprdTrwCf+MlBjhtdPFkwC6kqwoqhRXdMi71dxGaMqia8/3oOQTNvYKX/5z/7q2K8=; 7:+RZTmCl3VHhMWNLHi9VWgZkfMb+rJYu/WWtlHs3MAc+vIsV8Lovu5D1R/rBp+eyi2g3bMnKzSZiY2YAL2xe4wNGaWw0o4gezn8TAG+Otl3MjbXkcWqd5Q5rEbVybQqs9whjjdmBY1lQ77qcg/zKLvg== x-ms-office365-filtering-correlation-id: 19eee80c-cc6e-431e-a31d-08d653824578 x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:BY1PR0701MB1238; x-ms-traffictypediagnostic: BY1PR0701MB1238: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(5005006)(8121501046)(3002001)(10201501046)(3231443)(944501410)(52105112)(93006095)(93001095)(148016)(149066)(150057)(6041310)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:BY1PR0701MB1238; BCL:0; PCL:0; RULEID:; SRVR:BY1PR0701MB1238; x-forefront-prvs: 086831DFB4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(396003)(346002)(39840400004)(366004)(376002)(199004)(189003)(446003)(44832011)(71200400001)(71190400001)(476003)(11346002)(2616005)(486006)(305945005)(7736002)(3846002)(6116002)(5660300001)(2906002)(2501003)(97736004)(316002)(54906003)(36756003)(110136005)(68736007)(8936002)(81166006)(81156014)(118296001)(106356001)(8676002)(105586002)(6506007)(386003)(52116002)(102836004)(76176011)(186003)(26005)(72206003)(14454004)(25786009)(45080400002)(478600001)(256004)(66066001)(4326008)(107886003)(86362001)(575784001)(2201001)(6486002)(53936002)(6436002)(6512007)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:BY1PR0701MB1238; H:BY1PR0701MB1660.namprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: aquantia.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: oHjbKX+j0aXBKhfrfQykl2HQC/rJWqTVxbxZQHncQ2GRxVK9GZtfR7vYsg4w+g6+CH6v6kQ2/3WwDqcUTvrB6EmyB4gZ+jSXaQOar1atZlik/N5Y12cjFkMxkUPyhtSMLBuESE4d1UpzAKVi4hhvOot3dkZRp7GwuyuXT9ahs6C0bW+nApzwvVkAFxVMrEFvBhMlXyd3IA44F5OOtic7zQPz8egUIURbAh7DKh9LM4b1zDTgtOIMwrYPqBKMpWVg89fQwT6EvMlGCdOzGiMu06aWvnkyR/Pk/oNumt1g3o78r3+HbkwlelcGrr4TJHtgLVaXD/82hiNJlu+MyDfzttkZzc22NUlQ50tlIXNJHsM= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: aquantia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19eee80c-cc6e-431e-a31d-08d653824578 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Nov 2018 09:33:50.0423 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 83e2e134-991c-4ede-8ced-34d47e38e6b1 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR0701MB1238 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Dmitry Bezrukov Added Aquantia and ASIX device IDs to prevent loading cdc_ether for these devices. Our firmware reports CDC configuration simultaneously with vendor specific. Signed-off-by: Dmitry Bezrukov Signed-off-by: Igor Russkikh --- drivers/net/usb/cdc_ether.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 5c42cf81a08b..b3b3c05903a1 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -562,6 +562,8 @@ static const struct driver_info wwan_info = { #define MICROSOFT_VENDOR_ID 0x045e #define UBLOX_VENDOR_ID 0x1546 #define TPLINK_VENDOR_ID 0x2357 +#define AQUANTIA_VENDOR_ID 0x2eca +#define ASIX_VENDOR_ID 0x0b95 static const struct usb_device_id products[] = { /* BLACKLIST !! @@ -821,6 +823,30 @@ static const struct usb_device_id products[] = { .driver_info = 0, }, +/* Aquantia AQtion USB to 5GbE Controller (based on AQC111U) */ +{ + USB_DEVICE_AND_INTERFACE_INFO(AQUANTIA_VENDOR_ID, 0xc101, + USB_CLASS_COMM, USB_CDC_SUBCLASS_ETHERNET, + USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + +/* ASIX USB 3.1 Gen1 to 5G Multi-Gigabit Ethernet Adapter(based on AQC111U) */ +{ + USB_DEVICE_AND_INTERFACE_INFO(ASIX_VENDOR_ID, 0x2790, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, + USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + +/* ASIX USB 3.1 Gen1 to 2.5G Multi-Gigabit Ethernet Adapter(based on AQC112U) */ +{ + USB_DEVICE_AND_INTERFACE_INFO(ASIX_VENDOR_ID, 0x2791, USB_CLASS_COMM, + USB_CDC_SUBCLASS_ETHERNET, + USB_CDC_PROTO_NONE), + .driver_info = 0, +}, + /* WHITELIST!!! * * CDC Ether uses two interfaces, not necessarily consecutive.