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 --- 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 +L: netdev@vger.kernel.org +S: Supported +F: include/linux/hpe +F: drivers/net/ethernet/hpe + HEWLETT-PACKARD SMART ARRAY RAID DRIVER (hpsa) M: Don Brace L: storagedev@microchip.com 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