mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
bf2a952d31
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: Serge Semin <fancer.lancer@gmail.com> Acked-by: Allen Hubbe <Allen.Hubbe@dell.com> Signed-off-by: Jon Mason <jdmason@kudzu.us>
32 lines
1.4 KiB
Plaintext
32 lines
1.4 KiB
Plaintext
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.
|
|
|