[PATCH 23/23] net: hpe: wire up the Slingshot NIC drivers

From: Doug Ledford

Date: Fri Oct 30 2026 - 17:09:01 EST


Hook the SBL, SL and SS1 drivers into the build and add the MAINTAINERS
entry.

- NET_VENDOR_HPE gates the vendor menu; CONFIG_HPE_SS1 builds cxi-ss1
(the core driver) and cxi-eth (the Ethernet personality) and
selects HPE_SBL (cxi-sbl, 200 Gb/s link) and HPE_SL (cxi-sl, 400 Gb/s
link), because the core driver picks the link layer at run time
according to the NIC generation
- the module names keep the cxi- prefix used by the existing user
space tools and udev rules

checkpatch --strict (100 columns) still reports the following in this
patch. They need coordination with the internal repositories this code
is maintained in and will be fixed in V2:
- WARNING: MAINTAINERS_STYLE (1)

Signed-off-by: Doug Ledford <doug.ledford@xxxxxxx>
---
MAINTAINERS | 7 ++
drivers/net/ethernet/Kconfig | 1 +
drivers/net/ethernet/Makefile | 1 +
drivers/net/ethernet/hpe/Kconfig | 26 +++++++
drivers/net/ethernet/hpe/Makefile | 8 ++
drivers/net/ethernet/hpe/sbl/Kconfig | 15 ++++
drivers/net/ethernet/hpe/sbl/Makefile | 21 +++++
drivers/net/ethernet/hpe/sl/Kconfig | 15 ++++
drivers/net/ethernet/hpe/sl/Makefile | 140 ++++++++++++++++++++++++++++++++++
drivers/net/ethernet/hpe/ss1/Kconfig | 35 +++++++++
drivers/net/ethernet/hpe/ss1/Makefile | 28 +++++++
11 files changed, 297 insertions(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index 7336600952c8..4974717d22c1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -11608,6 +11608,13 @@ S: Supported
F: Documentation/watchdog/hpwdt.rst
F: drivers/watchdog/hpwdt.c

+HEWLETT PACKARD ENTERPRISE SLINGSHOT NIC DRIVER
+M: Slingshot Open Source Team <slingshot-os-team@xxxxxxxxxxxxxxxxxx>
+L: netdev@xxxxxxxxxxxxxxx
+S: Supported
+F: include/linux/hpe
+F: drivers/net/ethernet/hpe
+
HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa)
M: Don Brace <don.brace@xxxxxxxxxxxxx>
L: storagedev@xxxxxxxxxxxxx
diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig
index c2b0161d0bec..c6f3c722ca98 100644
--- a/drivers/net/ethernet/Kconfig
+++ b/drivers/net/ethernet/Kconfig
@@ -65,6 +65,7 @@ source "drivers/net/ethernet/freescale/Kconfig"
source "drivers/net/ethernet/fungible/Kconfig"
source "drivers/net/ethernet/google/Kconfig"
source "drivers/net/ethernet/hisilicon/Kconfig"
+source "drivers/net/ethernet/hpe/Kconfig"
source "drivers/net/ethernet/huawei/Kconfig"
source "drivers/net/ethernet/i825xx/Kconfig"
source "drivers/net/ethernet/ibm/Kconfig"
diff --git a/drivers/net/ethernet/Makefile b/drivers/net/ethernet/Makefile
index a306dae23bcb..65e00a93049b 100644
--- a/drivers/net/ethernet/Makefile
+++ b/drivers/net/ethernet/Makefile
@@ -44,6 +44,7 @@ obj-$(CONFIG_NET_VENDOR_FREESCALE) += freescale/
obj-$(CONFIG_NET_VENDOR_FUNGIBLE) += fungible/
obj-$(CONFIG_NET_VENDOR_GOOGLE) += google/
obj-$(CONFIG_NET_VENDOR_HISILICON) += hisilicon/
+obj-$(CONFIG_NET_VENDOR_HPE) += hpe/
obj-$(CONFIG_NET_VENDOR_HUAWEI) += huawei/
obj-$(CONFIG_NET_VENDOR_IBM) += ibm/
obj-$(CONFIG_NET_VENDOR_INTEL) += intel/
diff --git a/drivers/net/ethernet/hpe/Kconfig b/drivers/net/ethernet/hpe/Kconfig
new file mode 100644
index 000000000000..c43172a62cf6
--- /dev/null
+++ b/drivers/net/ethernet/hpe/Kconfig
@@ -0,0 +1,26 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# HPE/Cray driver configuration
+# Copyright 2025 Hewlett Packard Enterprise Development LP
+
+config NET_VENDOR_HPE
+ bool "Hewlett Packard Enterprise/Cray devices"
+ default n
+ depends on PCI
+ help
+ If you have a network (Ethernet or RDMA) manufactured by HPE/Cray,
+ say Y.
+
+ Note that the answer to this question doesn't directly affect the
+ kernel: saying N will just cause the configurator to skip all
+ the questions about HPE cards. If you say Y, you will be asked
+ for your specific card in the following questions.
+
+if NET_VENDOR_HPE
+
+source "drivers/net/ethernet/hpe/sbl/Kconfig"
+source "drivers/net/ethernet/hpe/sl/Kconfig"
+source "drivers/net/ethernet/hpe/ss1/Kconfig"
+
+
+endif # NET_VENDOR_HPE
diff --git a/drivers/net/ethernet/hpe/Makefile b/drivers/net/ethernet/hpe/Makefile
new file mode 100644
index 000000000000..692886cac9ef
--- /dev/null
+++ b/drivers/net/ethernet/hpe/Makefile
@@ -0,0 +1,8 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Makefile for HPE/Cray device drivers.
+# Copyright 2025 Hewlett Packard Enterprise Development LP
+
+obj-$(CONFIG_HPE_SBL) += sbl/
+obj-$(CONFIG_HPE_SL) += sl/
+obj-$(CONFIG_HPE_SS1) += ss1/
diff --git a/drivers/net/ethernet/hpe/sbl/Kconfig b/drivers/net/ethernet/hpe/sbl/Kconfig
new file mode 100644
index 000000000000..929224e44a43
--- /dev/null
+++ b/drivers/net/ethernet/hpe/sbl/Kconfig
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-2.0
+
+#
+# Slingshot base link module Kconfig
+#
+
+config HPE_SBL
+ tristate "HPE/Cray Slingshot 200Gbs Link Support"
+ depends on HPE_SS1
+ help
+ Compile the cxi-sbl module, which provides link management support
+ for Slingshot 200Gbs devices/fabrics.
+
+ The cxi-ss1 driver automatically enables this driver whenever
+ it is enabled.
diff --git a/drivers/net/ethernet/hpe/sbl/Makefile b/drivers/net/ethernet/hpe/sbl/Makefile
new file mode 100644
index 000000000000..9f61e04fe7bf
--- /dev/null
+++ b/drivers/net/ethernet/hpe/sbl/Makefile
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Slingshot base link 200Gbs module
+#
+
+subdir-ccflags-y := -I$(src)
+
+obj-$(CONFIG_HPE_SBL) := cxi-sbl.o
+
+# These base modules work for both NIC and Switch parts
+cxi-sbl-$(CONFIG_HPE_SBL) := sbl_pml_pcs.o sbl_link.o \
+ sbl_link_an.o sbl_media.o sbl_pml.o sbl_pml_mac.o \
+ sbl_pml_llr.o sbl_timers.o sbl_debug.o sbl_serdes_fn.o \
+ sbl_test.o sbl_sbm_serdes.o sbl_counters.o sbl_fec.o \
+ sbl_serdes.o sbl_inst.o sbl_pml_serdes_op.o sbl_misc.o \
+ sbl_internal.o
+# Everything after here is specific to NICs
+cxi-sbl-$(CONFIG_HPE_SBL) += \
+ sbl_pml_pcs_nic.o sbl_module_nic.o sbl_link_nic.o \
+ sbl_media_nic.o sbl_inst_nic.o sbl_sbm_serdes_nic.o \
+ sbl_fec_nic.o sbl_link_an_nic.o sbl_pml_llr_nic.o
diff --git a/drivers/net/ethernet/hpe/sl/Kconfig b/drivers/net/ethernet/hpe/sl/Kconfig
new file mode 100644
index 000000000000..2935fec855f8
--- /dev/null
+++ b/drivers/net/ethernet/hpe/sl/Kconfig
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-2.0
+
+#
+# Slingshot link 400Gbs module Kconfig
+#
+
+config HPE_SL
+ tristate "HPE/Cray Slingshot 400Gbs Link Support"
+ depends on HPE_SS1
+ help
+ Compile the cxi-sl module, which provides link management support
+ for Slingshot 400Gbs devices/fabrics.
+
+ The cxi-ss1 driver automatically enables this driver whenever
+ it is enabled.
diff --git a/drivers/net/ethernet/hpe/sl/Makefile b/drivers/net/ethernet/hpe/sl/Makefile
new file mode 100644
index 000000000000..1930da475e59
--- /dev/null
+++ b/drivers/net/ethernet/hpe/sl/Makefile
@@ -0,0 +1,140 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Slingshot base link 400Gbs module makefile
+#
+
+CAS_DEFINES := -DCONFIG_SL_BUILD_NAME="cassini" -DSL_NAME=cxi-sl
+
+subdir-ccflags-y += -I$(src) -I$(src)/nic -I$(src)/core/hw/nic \
+ -I$(src)/log -I$(src)/media -I$(src)/ctrl -I$(src)/sysfs \
+ -I$(src)/core $(CAS_DEFINES)
+
+obj-$(CONFIG_HPE_SL) := cxi-sl.o
+
+# These base modules work for both NIC and Switch parts
+cxi-sl-$(CONFIG_HPE_SL) := sl_module.o sl_ldev.o sl_lgrp.o sl_link.o \
+ sl_llr.o sl_mac.o sl_media.o sl_fec.o
+cxi-sl-$(CONFIG_HPE_SL) += media/sl_media_lgrp.o \
+ media/sl_media_ldev.o \
+ media/sl_media_jack.o \
+ media/data/sl_media_data_ldev.o \
+ media/data/sl_media_data_lgrp.o \
+ media/data/sl_media_data_lgrp_trace.o \
+ media/data/sl_media_data_jack.o \
+ media/data/sl_media_data_cable_db_ops.o \
+ media/base/sl_media_eeprom.o
+cxi-sl-$(CONFIG_HPE_SL) += core/sl_core_ldev.o \
+ core/sl_core_lgrp.o \
+ core/sl_core_link.o \
+ core/sl_core_link_an.o \
+ core/sl_core_link_fec.o \
+ core/sl_core_mac.o \
+ core/sl_core_llr.o \
+ core/sl_core_str.o \
+ core/base/sl_core_timer_link.o \
+ core/base/sl_core_timer_llr.o \
+ core/data/sl_core_data_ldev.o \
+ core/data/sl_core_data_lgrp.o \
+ core/data/sl_core_data_lgrp_trace.o \
+ core/data/sl_core_data_link.o \
+ core/data/sl_core_data_llr.o \
+ core/data/sl_core_data_mac.o \
+ core/hw/sl_core_hw_intr.o \
+ core/hw/sl_core_hw_intr_llr.o \
+ core/hw/sl_core_hw_sbus.o \
+ core/hw/sl_core_hw_pmi.o \
+ core/hw/sl_core_hw_sbus_pmi.o \
+ core/hw/sl_core_hw_uc_ram.o \
+ core/hw/sl_core_hw_serdes.o \
+ core/hw/sl_core_hw_serdes_fw.o \
+ core/hw/sl_core_hw_serdes_core.o \
+ core/hw/sl_core_hw_serdes_link.o \
+ core/hw/sl_core_hw_serdes_lane.o \
+ core/hw/sl_core_hw_serdes_lane_tx.o \
+ core/hw/sl_core_hw_serdes_lane_rx.o \
+ core/hw/sl_core_hw_link.o \
+ core/hw/sl_core_hw_an.o \
+ core/hw/sl_core_hw_an_lp.o \
+ core/hw/sl_core_hw_an_up.o \
+ core/hw/sl_core_hw_pcs.o \
+ core/hw/sl_core_hw_mac.o \
+ core/hw/sl_core_hw_llr.o \
+ core/hw/sl_core_hw_reset.o
+
+cxi-sl-$(CONFIG_HPE_SL) += ctrl/sl_ctrl_ldev.o \
+ ctrl/sl_ctrl_lgrp.o \
+ ctrl/sl_ctrl_lgrp_notif.o \
+ ctrl/sl_ctrl_link.o \
+ ctrl/sl_ctrl_link_priv.o \
+ ctrl/sl_ctrl_link_fec.o \
+ ctrl/sl_ctrl_link_fec_priv.o \
+ ctrl/sl_ctrl_link_counters.o \
+ ctrl/sl_ctrl_mac.o \
+ ctrl/sl_ctrl_mac_counters.o \
+ ctrl/sl_ctrl_llr.o \
+ ctrl/sl_ctrl_llr_counters.o \
+ ctrl/sl_ctrl_media_counters.o \
+ ctrl/data/sl_ctrl_data_lgrp.o \
+ ctrl/data/sl_ctrl_data_lgrp_trace.o \
+ ctrl/data/sl_ctrl_data_link.o \
+ ctrl/data/sl_ctrl_data_llr.o
+
+cxi-sl-$(CONFIG_HPE_SL) += log/sl_log.o \
+ sysfs/sl_sysfs_ldev.o \
+ sysfs/sl_sysfs_lgrp.o \
+ sysfs/sl_sysfs_lgrp_policy.o \
+ sysfs/sl_sysfs_lgrp_config.o \
+ sysfs/sl_sysfs_link.o \
+ sysfs/sl_sysfs_link_policy.o \
+ sysfs/sl_sysfs_link_fec_mon_check.o \
+ sysfs/sl_sysfs_link_fec_up_check.o \
+ sysfs/sl_sysfs_link_config.o \
+ sysfs/sl_sysfs_link_degrade.o \
+ sysfs/sl_sysfs_link_pml_rec.o \
+ sysfs/sl_sysfs_link_caps.o \
+ sysfs/sl_sysfs_link_fec.o \
+ sysfs/sl_sysfs_link_fec_current.o \
+ sysfs/sl_sysfs_link_fec_up.o \
+ sysfs/sl_sysfs_link_fec_down.o \
+ sysfs/sl_sysfs_link_counters.o \
+ sysfs/sl_sysfs_pmi.o \
+ sysfs/sl_sysfs_pmi_rd.o \
+ sysfs/sl_sysfs_pmi_wr.o \
+ sysfs/sl_sysfs_sbus.o \
+ sysfs/sl_sysfs_sbus_rd.o \
+ sysfs/sl_sysfs_sbus_wr.o \
+ sysfs/sl_sysfs_sbus_rst.o \
+ sysfs/sl_sysfs_sbus_pmi.o \
+ sysfs/sl_sysfs_sbus_pmi_rd.o \
+ sysfs/sl_sysfs_sbus_pmi_wr.o \
+ sysfs/sl_sysfs_serdes.o \
+ sysfs/sl_sysfs_serdes_settings.o \
+ sysfs/sl_sysfs_serdes_eye.o \
+ sysfs/sl_sysfs_serdes_lol.o \
+ sysfs/sl_sysfs_serdes_los.o \
+ sysfs/sl_sysfs_serdes_state.o \
+ sysfs/sl_sysfs_serdes_swizzle.o \
+ sysfs/sl_sysfs_llr.o \
+ sysfs/sl_sysfs_llr_config.o \
+ sysfs/sl_sysfs_llr_counters.o \
+ sysfs/sl_sysfs_llr_policy.o \
+ sysfs/sl_sysfs_llr_loop_time.o \
+ sysfs/sl_sysfs_mac.o \
+ sysfs/sl_sysfs_mac_counters.o \
+ sysfs/sl_sysfs_media.o \
+ sysfs/sl_sysfs_media_counters.o
+
+# Everything after here is specific to NICs
+cxi-sl-$(CONFIG_HPE_SL) += nic/sl_ldev.o nic/sl_media.o \
+ media/nic/sl_media_io.o media/nic/sl_media_jack.o \
+ media/nic/sl_media_ldev.o \
+ media/data/nic/sl_media_data_ldev.o \
+ media/data/nic/sl_media_data_jack.o \
+ media/data/nic/sl_media_data_jack_emu.o \
+ core/hw/nic/sl_core_hw_fec.o \
+ core/hw/nic/sl_core_hw_llr.o \
+ core/hw/nic/sl_core_hw_an.o \
+ core/hw/nic/sl_core_hw_mac.o \
+ core/hw/nic/sl_core_hw_pcs.o \
+ core/data/nic/sl_core_data_link.o \
+ core/data/nic/sl_core_data_mac.o
diff --git a/drivers/net/ethernet/hpe/ss1/Kconfig b/drivers/net/ethernet/hpe/ss1/Kconfig
new file mode 100644
index 000000000000..d154506749d1
--- /dev/null
+++ b/drivers/net/ethernet/hpe/ss1/Kconfig
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Kernel config for HPE/Cray Net Cassini Slingshot 200/400Gbs hardware
+# Copyright 2025 Hewlett Packard Enterprise Development LP
+
+config HPE_SS1
+ tristate "HPE/Cray Slingshot 200/400Gbs NIC driver"
+ depends on PCI && ETHERNET && NETDEVICES && INET
+ depends on (ARM64 && CPU_LITTLE_ENDIAN) || X86_64
+ select HPE_SBL
+ select HPE_SL
+ select CONFIGFS_FS
+ select AUXILIARY_BUS
+ help
+ Core and Ethernet driver for the HPE/Cray Cassini network
+ interface cards, used with Slingshot 200 and 400 Gbs fabrics.
+
+ This builds the cxi-ss1 core driver and the cxi-eth Ethernet
+ personality. The link layer modules cxi-sbl (200 Gbs) and
+ cxi-sl (400 Gbs) are selected as well. Other drivers, such as
+ the CXI RDMA driver, attach to cxi-ss1 as auxiliary devices.
+
+ To compile this driver as modules, choose M here: the modules
+ will be called cxi-ss1 and cxi-eth. If unsure, say N.
+
+config HPE_SS1_P2P_DMABUF
+ bool "Enable Peer-2-Peer dmabuf support"
+ depends on HPE_SS1 && PCI_P2PDMA
+ help
+ Enable PCI Peer-2-Peer dmabuf support. This allows the NIC to
+ DMA directly to and from device memory, such as GPU memory,
+ that is exported through dma-buf, without staging it in
+ host memory. It requires a PCI P2P DMA capable platform.
+
+ If unsure, say N.
diff --git a/drivers/net/ethernet/hpe/ss1/Makefile b/drivers/net/ethernet/hpe/ss1/Makefile
new file mode 100644
index 000000000000..538ac762cff2
--- /dev/null
+++ b/drivers/net/ethernet/hpe/ss1/Makefile
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Makefile for HPE/Cray Net Cassini Slingshot version 200/400Gbs hardware
+# Copyright 2025 Hewlett Packard Enterprise Development LP
+
+subdir-ccflags-y += -I$(src)
+
+obj-$(CONFIG_HPE_SS1) += cxi-ss1.o cxi-eth.o
+
+cxi-ss1-objs := cxi_core.o cass_core.o cass_lni.o cass_rmu.o cass_eq.o \
+ cass_cpt.o cass_cq.o cass_pt.o cass_atu.o cass_ct.o \
+ cass_errors.o cass_sriov.o cass_nta.o cass_ptp.o \
+ cass_hni.o cass_eth.o cass_rmu_eth.o cass_ats.o cass_uc.o \
+ cass_hmm.o cxi_qos_profiles.o cass_tc.o cass_svc.o \
+ cass_telem.o cxi_link.o cass_sbl.o cass_sl.o \
+ cass_sl_io.o cass_sysfs.o cass_sbus.o cass_phy.o \
+ cass_dmac.o cass_link.o cass_link_misc.o cass_port_misc.o \
+ cass_lmon.o cass_ixe.o cass_irq.o cass_cable.o \
+ cass_odp_decouple.o cass_ats_inval.o cass_pcie_mon.o \
+ cxi_ac_entry_list.o cass_dev_info.o cxi_rxtx_profile_list.o \
+ cass_rx_tx_profile.o cxi_rxtx_profile.o cxi_config.o \
+ cxi_rx_profile.o cxi_tx_profile.o \
+ cass_rgroup.o cxi_rgroup.o cass_rgid.o cxi_aux_dev.o cass_vf_notif.o \
+ cass_vf.o
+cxi-ss1-$(CONFIG_DEBUG_FS) += cass_ss1_debugfs.o
+cxi-ss1-$(CONFIG_HPE_SS1_P2P_DMABUF) += cass_p2p.o cass_dma_buf.o
+cxi-eth-objs := cxi_eth.o cxi_eth_ops.o cxi_ethtool.o cxi_eth_ioctl.o
+cxi-eth-$(CONFIG_DEBUG_FS) += cxi_eth_debugfs.o

--
2.56.0