forked from mirrors/linux
		
	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 <dan.carpenter@oracle.com>: don't invert error codes] [Christophe JAILLET <christophe.jaillet@wanadoo.fr>: fix switchtec_dev_open() error handling] Tested-by: Krishna Dhulipala <krishnad@fb.com> Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Stephen Bates <stephen.bates@microsemi.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Wei Zhang <wzhang@fb.com> Reviewed-by: Jens Axboe <axboe@fb.com> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									c1ae3cfa0e
								
							
						
					
					
						commit
						080b47def5
					
				
					 6 changed files with 1030 additions and 0 deletions
				
			
		| 
						 | 
					@ -9655,6 +9655,14 @@ S:	Maintained
 | 
				
			||||||
F:	Documentation/devicetree/bindings/pci/aardvark-pci.txt
 | 
					F:	Documentation/devicetree/bindings/pci/aardvark-pci.txt
 | 
				
			||||||
F:	drivers/pci/host/pci-aardvark.c
 | 
					F:	drivers/pci/host/pci-aardvark.c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PCI DRIVER FOR MICROSEMI SWITCHTEC
 | 
				
			||||||
 | 
					M:	Kurt Schwemmer <kurt.schwemmer@microsemi.com>
 | 
				
			||||||
 | 
					M:	Stephen Bates <stephen.bates@microsemi.com>
 | 
				
			||||||
 | 
					M:	Logan Gunthorpe <logang@deltatee.com>
 | 
				
			||||||
 | 
					L:	linux-pci@vger.kernel.org
 | 
				
			||||||
 | 
					S:	Maintained
 | 
				
			||||||
 | 
					F:	drivers/pci/switch/switchtec*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PCI DRIVER FOR NVIDIA TEGRA
 | 
					PCI DRIVER FOR NVIDIA TEGRA
 | 
				
			||||||
M:	Thierry Reding <thierry.reding@gmail.com>
 | 
					M:	Thierry Reding <thierry.reding@gmail.com>
 | 
				
			||||||
L:	linux-tegra@vger.kernel.org
 | 
					L:	linux-tegra@vger.kernel.org
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -134,3 +134,4 @@ config PCI_HYPERV
 | 
				
			||||||
source "drivers/pci/hotplug/Kconfig"
 | 
					source "drivers/pci/hotplug/Kconfig"
 | 
				
			||||||
source "drivers/pci/dwc/Kconfig"
 | 
					source "drivers/pci/dwc/Kconfig"
 | 
				
			||||||
source "drivers/pci/host/Kconfig"
 | 
					source "drivers/pci/host/Kconfig"
 | 
				
			||||||
 | 
					source "drivers/pci/switch/Kconfig"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,3 +68,4 @@ ccflags-$(CONFIG_PCI_DEBUG) := -DDEBUG
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# PCI host controller drivers
 | 
					# PCI host controller drivers
 | 
				
			||||||
obj-y += host/
 | 
					obj-y += host/
 | 
				
			||||||
 | 
					obj-y += switch/
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										13
									
								
								drivers/pci/switch/Kconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								drivers/pci/switch/Kconfig
									
									
									
									
									
										Normal 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
									
								
								drivers/pci/switch/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								drivers/pci/switch/Makefile
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					obj-$(CONFIG_PCI_SW_SWITCHTEC) += switchtec.o
 | 
				
			||||||
							
								
								
									
										1006
									
								
								drivers/pci/switch/switchtec.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1006
									
								
								drivers/pci/switch/switchtec.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
		Loading…
	
		Reference in a new issue