Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bf2a952d authored by Serge Semin's avatar Serge Semin Committed by Jon Mason
Browse files

NTB: Add IDT 89HPESxNTx PCIe-switches support



IDT 89HPESxNTx device series is PCIe-switches, which support
Non-Transparent bridging between domains connected to the device ports.
Since new NTB API exposes multi-port interface and messaging API, the
IDT NT-functions can be now supported in the kernel. This driver adds
the following functionality:
1) Multi-port NTB API to have information of possible NT-functions
activated in compliance with available device ports.
2) Memory windows of direct and look up table based address translation
with all possible combinations of BARs setup.
3) Traditional doorbell NTB API.
4) One-on-one messaging NTB API.

There are some IDT PCIe-switch setups, which must be done before any of
the NTB peers started. It can be performed either by system BIOS via
IDT SMBus-slave interface or by pre-initialized IDT PCIe-switch EEPROM:
1) NT-functions of corresponding ports must be activated using
SWPARTxCTL and SWPORTxCTL registers.
2) BAR0 must be configured to expose NT-function configuration
registers map.
3) The rest of the BARs must have at least one memory window
configured, otherwise the driver will just return an error.
Temperature sensor of IDT PCIe-switches can be also optionally
activated by BIOS or EEPROM.
(See IDT documentations for details of how the pre-initialization can
be done)

Signed-off-by: default avatarSerge Semin <fancer.lancer@gmail.com>
Acked-by: default avatarAllen Hubbe <Allen.Hubbe@dell.com>
Signed-off-by: default avatarJon Mason <jdmason@kudzu.us>
parent 48ea0218
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -9122,6 +9122,12 @@ F: include/linux/ntb.h
F:	include/linux/ntb_transport.h
F:	tools/testing/selftests/ntb/

NTB IDT DRIVER
M:	Serge Semin <fancer.lancer@gmail.com>
L:	linux-ntb@googlegroups.com
S:	Supported
F:	drivers/ntb/hw/idt/

NTB INTEL DRIVER
M:	Jon Mason <jdmason@kudzu.us>
M:	Dave Jiang <dave.jiang@intel.com>
+1 −0
Original line number Diff line number Diff line
source "drivers/ntb/hw/amd/Kconfig"
source "drivers/ntb/hw/idt/Kconfig"
source "drivers/ntb/hw/intel/Kconfig"
+1 −0
Original line number Diff line number Diff line
obj-$(CONFIG_NTB_AMD)	+= amd/
obj-$(CONFIG_NTB_IDT)	+= idt/
obj-$(CONFIG_NTB_INTEL)	+= intel/
+31 −0
Original line number Diff line number Diff line
config NTB_IDT
	tristate "IDT PCIe-switch Non-Transparent Bridge support"
	depends on PCI
	help
	 This driver supports NTB of cappable IDT PCIe-switches.

	 Some of the pre-initializations must be made before IDT PCIe-switch
	 exposes it NT-functions correctly. It should be done by either proper
	 initialisation of EEPROM connected to master smbus of the switch or
	 by BIOS using slave-SMBus interface changing corresponding registers
	 value. Evidently it must be done before PCI bus enumeration is
	 finished in Linux kernel.

	 First of all partitions must be activated and properly assigned to all
	 the ports with NT-functions intended to be activated (see SWPARTxCTL
	 and SWPORTxCTL registers). Then all NT-function BARs must be enabled
	 with chosen valid aperture. For memory windows related BARs the
	 aperture settings shall determine the maximum size of memory windows
	 accepted by a BAR. Note that BAR0 must map PCI configuration space
	 registers.

	 It's worth to note, that since a part of this driver relies on the
	 BAR settings of peer NT-functions, the BAR setups can't be done over
	 kernel PCI fixups. That's why the alternative pre-initialization
	 techniques like BIOS using SMBus interface or EEPROM should be
	 utilized. Additionally if one needs to have temperature sensor
	 information printed to system log, the corresponding registers must
	 be initialized within BIOS/EEPROM as well.

	 If unsure, say N.
+1 −0
Original line number Diff line number Diff line
obj-$(CONFIG_NTB_IDT) += ntb_hw_idt.o
Loading