From: "Xin Tian" <tianx@yunsilicon.com>
To: "Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Jason Gunthorpe" <jgg@ziepe.ca>,
"Leon Romanovsky" <leon@kernel.org>,
"Junxian Huang" <huangjunxian6@hisilicon.com>
Cc: <weihg@yunsilicon.com>, <linux-kernel@vger.kernel.org>,
<netdev@vger.kernel.org>, <linux-rdma@vger.kernel.org>
Subject: [PATCH v1 00/15] Yunsilicon XSC ethernet and RDMA drivers
Date: Wed, 04 Nov 2026 23:57:31 +0800 [thread overview]
Message-ID: <20261104155650.37053-1-tianx@yunsilicon.com> (raw)
Hi all,
This is a new submission from Yunsilicon to upstream our converged
network adapter driver. The hardware is a dual-function PCIe device
(PCI vendor 0x1f67) that supports both ethernet and RDMA operations.
The series adds three drivers, which share the xsc prefix. A shared PCI
core driver binds to the physical function, brings up the command queue,
the event queues and the interrupt handling, and publishes one auxiliary
device per function. The ethernet and RDMA drivers bind to that
auxiliary device instead of driving the PCI function themselves, so the
two personalities share a single probe and resource set.
1. xsc_pci - the PCI core driver (CONFIG_YUNSILICON_XSC_PCI).
Owns the PCI function, the command queue, the event queues, the
interrupt vectors, the register access layer and the CQ/QP/SRQ
resource pools. Patches 02-06.
2. xsc_eth - the ethernet driver (CONFIG_YUNSILICON_XSC_ETH).
Registers the netdev, implements the TX/RX packet paths with NAPI
and page_pool, RSS, checksum offloads and statistics. Patches
07-09, on top of the core.
3. xsc_ib - the RDMA driver (CONFIG_INFINIBAND_XSC).
Registers the ib_device and provides the PD/MR, CQ/SRQ/AH and QP
verbs including the send/receive data paths, plus RDMA counters and
sysfs attributes. Patches 10-15, on top of the core and the
ethernet driver (the netdev supplies port state and GID).
Patch 01 adds the MAINTAINERS entry.
The series is split so that every commit builds: the core patches
introduce the register access, the command queue, the event queues and
the resource pools incrementally, and the ethernet and RDMA patches only
start creating queues once their dependencies are in place. Patch 06
(core CQ/QP pools) is deliberately shared by both upper drivers; that is
why it precedes the ethernet patches.
The RDMA device is registered at patch 10, before all verbs exist, so
kverbs_provider stays false until the last mandatory verb (post_send)
appears in patch 14. This keeps each intermediate tree compilable.
Please review.
Thanks,
Xin Tian
Changes since v0 (https://lore.kernel.org/netdev/20261012114352.2471317-1-tianx@yunsilicon.com/):
- Register access helpers take explicit u32 values instead of void *
and memcpy (patch 3).
- Dropped the one-line xsc_free_cmd() wrapper (patch 4).
- Dropped the redundant memsets and comments in query_device, the
redundant rdma_roce_rescan_device() call and stray blank lines
(patch 10).
- Derived port state with ib_get_curr_port_state() and MTU with
iboe_get_mtu() instead of open-coding both (patch 10).
- Replaced the driver's get_netdev op and netdevice notifier with
ib_device_set_netdev() and the core's event handling (patch 10).
- Stopped replicating the core's private ib_mad structures (patch 10).
- Ran Sashiko locally and fixed or triaged the findings.
Xin Tian (15):
MAINTAINERS: add the Yunsilicon XSC drivers
net/xsc: add PCI core driver skeleton
net/xsc: add the register HAL
net/xsc: add the command queue
net/xsc: add event queues, interrupts and the auxiliary bus
net/xsc: add the CQ and QP resource pools
net/xsc: add ethernet netdev registration
net/xsc: add ethernet TX path
net/xsc: add ethernet RX path and statistics
RDMA/xsc: add RDMA device support
RDMA/xsc: add RDMA PD/MR
RDMA/xsc: add RDMA CQ/SRQ/AH
RDMA/xsc: add QP verbs
RDMA/xsc: add the RDMA send path
RDMA/xsc: add RDMA counters and sysfs
MAINTAINERS | 9 +
drivers/infiniband/Kconfig | 1 +
drivers/infiniband/hw/Makefile | 1 +
drivers/infiniband/hw/xsc/Kconfig | 17 +
drivers/infiniband/hw/xsc/Makefile | 10 +
drivers/infiniband/hw/xsc/ah.c | 144 +
drivers/infiniband/hw/xsc/counters.c | 134 +
drivers/infiniband/hw/xsc/cq.c | 954 +++++++
drivers/infiniband/hw/xsc/main.c | 801 ++++++
drivers/infiniband/hw/xsc/mem.c | 160 ++
drivers/infiniband/hw/xsc/mr.c | 335 +++
drivers/infiniband/hw/xsc/qp.c | 2347 +++++++++++++++++
drivers/infiniband/hw/xsc/srq.c | 462 ++++
drivers/infiniband/hw/xsc/xsc_ib.h | 489 ++++
drivers/infiniband/hw/xsc/xsc_ib_sysfs.c | 50 +
drivers/net/ethernet/Kconfig | 1 +
drivers/net/ethernet/Makefile | 1 +
drivers/net/ethernet/yunsilicon/Kconfig | 26 +
drivers/net/ethernet/yunsilicon/Makefile | 8 +
.../net/ethernet/yunsilicon/xsc/common/cq.h | 26 +
.../ethernet/yunsilicon/xsc/common/driver.h | 95 +
.../net/ethernet/yunsilicon/xsc/common/qp.h | 104 +
.../net/ethernet/yunsilicon/xsc/common/srq.h | 54 +
.../ethernet/yunsilicon/xsc/common/xsc_cmd.h | 1025 +++++++
.../yunsilicon/xsc/common/xsc_cmd_api.h | 25 +
.../ethernet/yunsilicon/xsc/common/xsc_cmdq.h | 192 ++
.../ethernet/yunsilicon/xsc/common/xsc_core.h | 663 +++++
.../yunsilicon/xsc/common/xsc_device.h | 94 +
.../ethernet/yunsilicon/xsc/common/xsc_hsi.h | 123 +
.../ethernet/yunsilicon/xsc/common/xsc_reg.h | 28 +
.../net/ethernet/yunsilicon/xsc/net/Kconfig | 17 +
.../net/ethernet/yunsilicon/xsc/net/Makefile | 9 +
.../net/ethernet/yunsilicon/xsc/net/main.c | 1742 ++++++++++++
.../net/ethernet/yunsilicon/xsc/net/xsc_eth.h | 43 +
.../yunsilicon/xsc/net/xsc_eth_common.h | 123 +
.../ethernet/yunsilicon/xsc/net/xsc_eth_rx.c | 556 ++++
.../yunsilicon/xsc/net/xsc_eth_stats.c | 40 +
.../yunsilicon/xsc/net/xsc_eth_stats.h | 35 +
.../ethernet/yunsilicon/xsc/net/xsc_eth_tx.c | 345 +++
.../yunsilicon/xsc/net/xsc_eth_txrx.c | 156 ++
.../yunsilicon/xsc/net/xsc_eth_txrx.h | 92 +
.../ethernet/yunsilicon/xsc/net/xsc_eth_wq.c | 80 +
.../ethernet/yunsilicon/xsc/net/xsc_eth_wq.h | 185 ++
.../net/ethernet/yunsilicon/xsc/net/xsc_pp.h | 38 +
.../net/ethernet/yunsilicon/xsc/net/xsc_pph.h | 42 +
.../ethernet/yunsilicon/xsc/net/xsc_queue.h | 183 ++
.../net/ethernet/yunsilicon/xsc/pci/Kconfig | 15 +
.../net/ethernet/yunsilicon/xsc/pci/Makefile | 10 +
.../net/ethernet/yunsilicon/xsc/pci/adev.c | 142 +
.../net/ethernet/yunsilicon/xsc/pci/adev.h | 17 +
.../net/ethernet/yunsilicon/xsc/pci/alloc.c | 237 ++
.../net/ethernet/yunsilicon/xsc/pci/alloc.h | 17 +
.../net/ethernet/yunsilicon/xsc/pci/cmdq.c | 1244 +++++++++
drivers/net/ethernet/yunsilicon/xsc/pci/cq.c | 319 +++
drivers/net/ethernet/yunsilicon/xsc/pci/cq.h | 17 +
drivers/net/ethernet/yunsilicon/xsc/pci/eq.c | 318 +++
drivers/net/ethernet/yunsilicon/xsc/pci/eq.h | 39 +
.../yunsilicon/xsc/pci/hal/andes_impl.c | 629 +++++
.../yunsilicon/xsc/pci/hal/andes_reg.h | 43 +
.../ethernet/yunsilicon/xsc/pci/hal/xsc_hal.h | 60 +
drivers/net/ethernet/yunsilicon/xsc/pci/hw.c | 316 +++
drivers/net/ethernet/yunsilicon/xsc/pci/hw.h | 18 +
.../net/ethernet/yunsilicon/xsc/pci/link.c | 34 +
.../net/ethernet/yunsilicon/xsc/pci/main.c | 350 +++
drivers/net/ethernet/yunsilicon/xsc/pci/mr.c | 202 ++
drivers/net/ethernet/yunsilicon/xsc/pci/mr.h | 18 +
.../net/ethernet/yunsilicon/xsc/pci/pci_irq.c | 493 ++++
.../net/ethernet/yunsilicon/xsc/pci/pci_irq.h | 18 +
drivers/net/ethernet/yunsilicon/xsc/pci/pd.c | 49 +
drivers/net/ethernet/yunsilicon/xsc/pci/pd.h | 14 +
drivers/net/ethernet/yunsilicon/xsc/pci/qp.c | 355 +++
drivers/net/ethernet/yunsilicon/xsc/pci/qp.h | 28 +
drivers/net/ethernet/yunsilicon/xsc/pci/srq.c | 92 +
drivers/net/ethernet/yunsilicon/xsc/pci/srq.h | 16 +
.../net/ethernet/yunsilicon/xsc/pci/vport.c | 36 +
include/uapi/rdma/ib_user_ioctl_verbs.h | 1 +
include/uapi/rdma/xsc-abi.h | 290 ++
77 files changed, 17502 insertions(+)
create mode 100644 drivers/infiniband/hw/xsc/Kconfig
create mode 100644 drivers/infiniband/hw/xsc/Makefile
create mode 100644 drivers/infiniband/hw/xsc/ah.c
create mode 100644 drivers/infiniband/hw/xsc/counters.c
create mode 100644 drivers/infiniband/hw/xsc/cq.c
create mode 100644 drivers/infiniband/hw/xsc/main.c
create mode 100644 drivers/infiniband/hw/xsc/mem.c
create mode 100644 drivers/infiniband/hw/xsc/mr.c
create mode 100644 drivers/infiniband/hw/xsc/qp.c
create mode 100644 drivers/infiniband/hw/xsc/srq.c
create mode 100644 drivers/infiniband/hw/xsc/xsc_ib.h
create mode 100644 drivers/infiniband/hw/xsc/xsc_ib_sysfs.c
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/cq.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/driver.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/qp.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/srq.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_cmd.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_cmd_api.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_hsi.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/common/xsc_reg.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_pp.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/adev.c
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/adev.h
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/hal/andes_impl.c
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/hal/andes_reg.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/hal/xsc_hal.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/link.c
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/main.c
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/mr.c
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/mr.h
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/pd.c
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/pd.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/srq.c
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/srq.h
create mode 100644 drivers/net/ethernet/yunsilicon/xsc/pci/vport.c
create mode 100644 include/uapi/rdma/xsc-abi.h
--
2.18.4
next reply other threads:[~2026-11-04 15:57 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 15:57 Xin Tian [this message]
2026-11-04 15:56 ` [PATCH v1 01/15] MAINTAINERS: add the Yunsilicon XSC drivers Xin Tian
2026-11-04 15:56 ` [PATCH v1 02/15] net/xsc: add PCI core driver skeleton Xin Tian
2026-11-04 15:56 ` [PATCH v1 03/15] net/xsc: add the register HAL Xin Tian
2026-11-04 15:57 ` [PATCH v1 04/15] net/xsc: add the command queue Xin Tian
2026-11-04 15:57 ` [PATCH v1 05/15] net/xsc: add event queues, interrupts and the Xin Tian
2026-11-04 15:57 ` [PATCH v1 06/15] net/xsc: add the CQ and QP resource pools Xin Tian
2026-11-04 15:57 ` [PATCH v1 07/15] net/xsc: add ethernet netdev registration Xin Tian
2026-11-07 21:03 ` Andrew Lunn
2026-11-04 15:57 ` [PATCH v1 08/15] net/xsc: add ethernet TX path Xin Tian
2026-11-04 15:57 ` [PATCH v1 09/15] net/xsc: add ethernet RX path and statistics Xin Tian
2026-11-04 15:57 ` [PATCH v1 10/15] RDMA/xsc: add RDMA device support Xin Tian
2026-11-04 15:57 ` [PATCH v1 11/15] RDMA/xsc: add RDMA PD/MR Xin Tian
2026-11-04 15:57 ` [PATCH v1 12/15] RDMA/xsc: add RDMA CQ/SRQ/AH Xin Tian
2026-11-04 15:57 ` [PATCH v1 13/15] RDMA/xsc: add QP verbs Xin Tian
2026-11-04 15:57 ` [PATCH v1 14/15] RDMA/xsc: add the RDMA send path Xin Tian
2026-11-04 15:57 ` [PATCH v1 15/15] RDMA/xsc: add RDMA counters and sysfs Xin Tian
2026-11-10 18:48 ` [PATCH v1 00/15] Yunsilicon XSC ethernet and RDMA drivers Jakub Kicinski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261104155650.37053-1-tianx@yunsilicon.com \
--to=tianx@yunsilicon.com \
--cc=andrew+netdev@lunn.ch \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=huangjunxian6@hisilicon.com \
--cc=jgg@ziepe.ca \
--cc=kuba@kernel.org \
--cc=leon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=weihg@yunsilicon.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®