From patchwork Mon Dec 30 10:15:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: tianx X-Patchwork-Id: 13923204 Received: from va-2-48.ptr.blmpb.com (va-2-48.ptr.blmpb.com [209.127.231.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 54BA21A76B0 for ; Mon, 30 Dec 2024 10:15:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.127.231.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735553757; cv=none; b=stjzOf8twFlE4Y81TeX/CRQfUnye/5Wkw+1SG13Md2VAemt+MIrybVneZenAZSHP7nYLwmxpBWGIuEWLOYVqXwFEu3kzdURahKtA/BWNht7KhDLsdCucoYYhF2itDHDDIa5hETfmaQ+K0K18dF6wJiRbXaPOa/atDrQKBEer8x8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1735553757; c=relaxed/simple; bh=SVwBffjXv/oDGEYx9A4KLYy77rTmkFAZXHd9D9gr0HY=; h=Message-Id:Mime-Version:To:Cc:From:Subject:Date:Content-Type; b=RS1SujiSJJsC/jEQhjIzO0ZPJhIWb/tZLE2DUpmvZgyDdYvMMhPzGwSGUquR1klUDLraeFayVIvdr+zYVoiQKH0H5uVLTM7f6vCSmyWgUq+aVxB9P6RWkib9Z5EsVRnzILh8HllUfseZPT1uygYovtObEBRE71X86P5Byld/coU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=yunsilicon.com; spf=pass smtp.mailfrom=yunsilicon.com; dkim=pass (2048-bit key) header.d=yunsilicon.com header.i=@yunsilicon.com header.b=TA6ho31W; arc=none smtp.client-ip=209.127.231.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=yunsilicon.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=yunsilicon.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=yunsilicon.com header.i=@yunsilicon.com header.b="TA6ho31W" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=feishu2403070942; d=yunsilicon.com; t=1735553749; h=from:subject: mime-version:from:date:message-id:subject:to:cc:reply-to:content-type: mime-version:in-reply-to:message-id; bh=SVQrxWI7adYfTo+DT4saaVME0w4T2w7ctN6jrjOnthI=; b=TA6ho31WWi946jdK7tAV2jN+nDVu1NbnP3BKDe+gZJGAuzVyNPJi+DTQoO2MvARgp2KJET UY/90d5htbOaSQW7kVyNTwRiWTq+4DcZ+OVGrwo7IeB6PJ0SEO1nkvP1TxhVTfuaemFcXW sb4L77kz3EHl3ldWF0a3UWllaxuOGfRhZk805i79plYYN/SNEOSP+8dMmQzS1sRNJegXt7 spmyuWX/3Wg8twhOlZDkWm7EHJ/2DzvSKwfCaQcO5j1FSStjIf/XEGo8XvmpKlYTAfUIgO s9o70bWRWPqOYGeo9DlcJm2obfvgimv0UXJ0hvP+6Z+PW23gwfmTCwMohXOA8w== Message-Id: <20241230101513.3836531-1-tianx@yunsilicon.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Lms-Return-Path: To: Cc: , , , , , , , , From: "Xin Tian" X-Original-From: Xin Tian X-Mailer: git-send-email 2.25.1 Subject: [PATCH v2 00/14] net-next/yunsilicon: ADD Yunsilicon XSC Ethernet Driver Date: Mon, 30 Dec 2024 18:15:46 +0800 Received: from ubuntu-liun.yunsilicon.com ([58.34.192.114]) by smtp.feishu.cn with ESMTPS; Mon, 30 Dec 2024 18:15:46 +0800 The patch series adds the xsc driver, which will support the YunSilicon MS/MC/MV series of network cards. These network cards offer support for high-speed Ethernet and RDMA networking, with speeds of up to 200Gbps. The Ethernet functionality is implemented by two modules. One is a PCI driver(xsc_pci), which provides PCIe configuration, CMDQ service (communication with firmware), interrupt handling, hardware resource management, and other services, while offering common interfaces for Ethernet and future InfiniBand drivers to utilize hardware resources. The other is an Ethernet driver(xsc_eth), which handles Ethernet interface configuration and data transmission/reception. - Patches 1-7 implement the PCI driver - Patches 8-14 implement the Ethernet driver This submission is the first phase, which includes the PF-based Ethernet transmit and receive functionality. Once this is merged, we will submit additional patches to implement support for other features, such as SR-IOV, ethtool support, and a new RDMA driver. Changed v1->v2: Link to v1: https://lore.kernel.org/netdev/20241218105023.2237645-1-tianx@yunsilicon.com/ 1. Remove the last two patches to reduce the total code submitted. - Jakub Kicinski comments 2. Remove the custom logging interfaces and switch to using pci_xxx/netdev_xxx logging interfaces. Delete the related module parameters. 3. No use of inline functions in .c files. 4. Remove unnecessary license information. 5. Remove unnecessary void casts. - Andrew Lunn comments 6. Use double underscore (__) for header file macros. 7. Fix the depend field in Kconfig. 8. Add sign-off for co-developers. 9. use string directly in MODULE_DESCRIPTION 10. Fix poor formatting issues in the code. 11. Modify some macros that don’t use the XSC_ prefix. 12. Remove unused code from xsc_cmd.h that is not part of this patch series. 13. No comma after items in a complete enum. 14. Use the BIT() macro to define constants related to bit operations. 15. Add comments to clarify names like ver, cqe, eqn, pas, etc. - Przemek Kitszel comments Changes v0->v1: 1. name xsc_core_device as xdev instead of dev 2. modify Signed-off-by tag to Co-developed-by 3. remove some obvious comments 4. remove unnecessary zero-init and NULL-init 5. modify bad-named goto labels 6. reordered variable declarations according to the RCT rule - Przemek Kitszel comments 7. add MODULE_DESCRIPTION() - Jeff Johnson comments 8. remove unnecessary dev_info logs 9. replace these magic numbers with #defines in xsc_eth_common.h 10. move code to right place 11. delete unlikely() used in probe 12. remove unnecessary reboot callbacks - Andrew Lunn comments Xin Tian (14): net-next/yunsilicon: Add xsc driver basic framework net-next/yunsilicon: Enable CMDQ net-next/yunsilicon: Add hardware setup APIs net-next/yunsilicon: Add qp and cq management net-next/yunsilicon: Add eq and alloc net-next/yunsilicon: Add pci irq net-next/yunsilicon: Device and interface management net-next/yunsilicon: Add ethernet interface net-next/yunsilicon: Init net device net-next/yunsilicon: Add eth needed qp and cq apis net-next/yunsilicon: ndo_open and ndo_stop net-next/yunsilicon: Add ndo_start_xmit net-next/yunsilicon: Add eth rx net-next/yunsilicon: add ndo_get_stats64 drivers/net/ethernet/Kconfig | 1 + drivers/net/ethernet/Makefile | 1 + drivers/net/ethernet/yunsilicon/Kconfig | 26 + drivers/net/ethernet/yunsilicon/Makefile | 8 + .../yunsilicon/xsc/common/xsc_auto_hw.h | 94 + .../ethernet/yunsilicon/xsc/common/xsc_cmd.h | 632 ++++++ .../ethernet/yunsilicon/xsc/common/xsc_cmdq.h | 215 ++ .../ethernet/yunsilicon/xsc/common/xsc_core.h | 577 +++++ .../yunsilicon/xsc/common/xsc_device.h | 77 + .../yunsilicon/xsc/common/xsc_driver.h | 25 + .../ethernet/yunsilicon/xsc/common/xsc_pp.h | 38 + .../net/ethernet/yunsilicon/xsc/net/Kconfig | 17 + .../net/ethernet/yunsilicon/xsc/net/Makefile | 9 + .../net/ethernet/yunsilicon/xsc/net/main.c | 1943 +++++++++++++++++ .../net/ethernet/yunsilicon/xsc/net/xsc_eth.h | 56 + .../yunsilicon/xsc/net/xsc_eth_common.h | 239 ++ .../ethernet/yunsilicon/xsc/net/xsc_eth_rx.c | 557 +++++ .../yunsilicon/xsc/net/xsc_eth_stats.c | 42 + .../yunsilicon/xsc/net/xsc_eth_stats.h | 33 + .../ethernet/yunsilicon/xsc/net/xsc_eth_tx.c | 310 +++ .../yunsilicon/xsc/net/xsc_eth_txrx.c | 185 ++ .../yunsilicon/xsc/net/xsc_eth_txrx.h | 90 + .../ethernet/yunsilicon/xsc/net/xsc_eth_wq.c | 83 + .../ethernet/yunsilicon/xsc/net/xsc_eth_wq.h | 179 ++ .../net/ethernet/yunsilicon/xsc/net/xsc_pph.h | 176 ++ .../ethernet/yunsilicon/xsc/net/xsc_queue.h | 203 ++ .../net/ethernet/yunsilicon/xsc/pci/Kconfig | 16 + .../net/ethernet/yunsilicon/xsc/pci/Makefile | 10 + .../net/ethernet/yunsilicon/xsc/pci/alloc.c | 225 ++ .../net/ethernet/yunsilicon/xsc/pci/alloc.h | 15 + .../net/ethernet/yunsilicon/xsc/pci/cmdq.c | 1555 +++++++++++++ drivers/net/ethernet/yunsilicon/xsc/pci/cq.c | 151 ++ drivers/net/ethernet/yunsilicon/xsc/pci/cq.h | 14 + drivers/net/ethernet/yunsilicon/xsc/pci/eq.c | 334 +++ drivers/net/ethernet/yunsilicon/xsc/pci/eq.h | 46 + drivers/net/ethernet/yunsilicon/xsc/pci/hw.c | 266 +++ drivers/net/ethernet/yunsilicon/xsc/pci/hw.h | 18 + .../net/ethernet/yunsilicon/xsc/pci/intf.c | 251 +++ .../net/ethernet/yunsilicon/xsc/pci/intf.h | 22 + .../net/ethernet/yunsilicon/xsc/pci/main.c | 408 ++++ .../net/ethernet/yunsilicon/xsc/pci/pci_irq.c | 422 ++++ .../net/ethernet/yunsilicon/xsc/pci/pci_irq.h | 14 + drivers/net/ethernet/yunsilicon/xsc/pci/qp.c | 189 ++ drivers/net/ethernet/yunsilicon/xsc/pci/qp.h | 15 + .../net/ethernet/yunsilicon/xsc/pci/vport.c | 30 + 45 files changed, 9817 insertions(+) create mode 100644 drivers/net/ethernet/yunsilicon/Kconfig create mode 100644 drivers/net/ethernet/yunsilicon/Makefile create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_auto_hw.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_cmd.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_cmdq.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_core.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_device.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_driver.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_pp.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/Kconfig create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/Makefile create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/main.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_common.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_rx.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_stats.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_stats.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_tx.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_txrx.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_txrx.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_wq.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_eth_wq.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_pph.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/net/xsc_queue.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/Kconfig create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/Makefile create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/alloc.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/alloc.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/cmdq.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/cq.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/cq.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/eq.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/eq.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/hw.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/hw.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/intf.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/intf.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/main.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/pci_irq.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/pci_irq.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/qp.c create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/qp.h create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/vport.c