MicroSemi Switchtec management interface driver

Microsemi's "Switchtec" line of PCI switch devices is already well
supported by the kernel with standard PCI switch drivers.  However, the
Switchtec device advertises a special management endpoint with a separate
PCI function address and class code.  This endpoint enables some additional
functionality which includes:

 * Packet and Byte Counters
 * Switch Firmware Upgrades
 * Event and Error logs
 * Querying port link status
 * Custom user firmware commands

Add a switchtec kernel module which provides PCI driver that exposes a char
device.  The char device provides userspace access to this interface
through read, write and (optionally) poll calls.

A userspace tool and library which utilizes this interface is available
at [1].  This tool takes inspiration (and borrows some code) from
nvme-cli [2].  The tool is largely complete at this time but additional
features may be added in the future.

[1] https://github.com/sbates130272/switchtec-user
[2] https://github.com/linux-nvme/nvme-cli

[Dan Carpenter <[email protected]>: don't invert error codes]
[Christophe JAILLET <[email protected]>: fix
switchtec_dev_open() error handling]
Tested-by: Krishna Dhulipala <[email protected]>
Signed-off-by: Logan Gunthorpe <[email protected]>
Signed-off-by: Stephen Bates <[email protected]>
Signed-off-by: Bjorn Helgaas <[email protected]>
Reviewed-by: Wei Zhang <[email protected]>
Reviewed-by: Jens Axboe <[email protected]>
Reviewed-by: Greg Kroah-Hartman <[email protected]>
This commit is contained in:
Logan Gunthorpe authored and Bjorn Helgaas committed 2017-03-06 18:33:34 -06:00
1 parent c1ae3cfa0e
commit 080b47def5
6 files changed
+1030

No files matched your search

+8
View File
@@ -9655,6 +9655,14 @@ S: Maintained
F: Documentation/devicetree/bindings/pci/aardvark-pci.txt
F: drivers/pci/host/pci-aardvark.c
PCI DRIVER FOR MICROSEMI SWITCHTEC
M: Kurt Schwemmer <[email protected]>
M: Stephen Bates <[email protected]>
M: Logan Gunthorpe <[email protected]>
L: [email protected]
S: Maintained
F: drivers/pci/switch/switchtec*
PCI DRIVER FOR NVIDIA TEGRA
M: Thierry Reding <[email protected]>
L: [email protected]
+1
View File
@@ -134,3 +134,4 @@ config PCI_HYPERV
source "drivers/pci/hotplug/Kconfig"
source "drivers/pci/dwc/Kconfig"
source "drivers/pci/host/Kconfig"
source "drivers/pci/switch/Kconfig"
+1
View File
@@ -68,3 +68,4 @@ ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG
# PCI host controller drivers
obj-y += host/
obj-y += switch/
+13
View File
@@ -0,0 +1,13 @@
menu "PCI switch controller drivers"
depends on PCI
config PCI_SW_SWITCHTEC
tristate "MicroSemi Switchtec PCIe Switch Management Driver"
help
Enables support for the management interface for the MicroSemi
Switchtec series of PCIe switches. Supports userspace access
to submit MRPC commands to the switch via /dev/switchtecX
devices. See <file:Documentation/switchtec.txt> for more
information.
endmenu
+1
View File
@@ -0,0 +1 @@
obj-$(CONFIG_PCI_SW_SWITCHTEC) += switchtec.o
File diff suppressed because it is too large. Load diff