See also:
Malibu CN913x PCIe Support
The Marvell CN913x includes 3 PCI Express controllers with the following features:
- PCIe Gen 3.0
- supports 1, 2 and 4 lanes
- root complex and endpoint modes
- maximum payload size of 512 bytes
- lane polarity inversion/reversal support
- MSI/MSI-x suport
PCIe Pinout
Please see the user manual for the specific board model following the links here
PCIe Throughput
There are several factors that can affect PCIe performance. The most obvious factor is how many lanes (pairs of TX/RX SERDES channels) you have: 1x, 2x, 3x, 4x etc which are pure multipliers to the rates that can be achieved over a single lane. The next most obvious factor is what generation of PCIe your host controller (root complex or RC) and device (endpoint or EP) supports: Gen1, Gen2, Gen3 etc which factors into the transfer rate and data transfer overhead [1]. Digging deeper into the Transaction Layer Packet (TLP) overhead is not as obvious as RC's and EP's have varying max payload packet sizes.
The CN931x supports a Max Payload size of 512bytes but this will not be used unless you configure your kernel to do so.
On a given PCIe fabric, each device, bridge and root port can have a difference PCIe Maxium Payload Size (MPS). There is a sizable performance boost for having the largest possible maximum payload size on each PCIe device. However, if improperly configured fatal bus errors can occur. Therefore it is important to ensure that the PCIe payloads sent by a device are never larger than the MPS setting of all devices on the way to the destination.
By default Linux takes the conservative approach keeping the MPS set to the minimum value supported. If you want to set the device MPS to the largest allowable MPS based on its parent bus pass 'pci=pcie_bus_perf' via the kernel commandline arguments.
See also:
- [PCI: Set PCI-E Max Payload Size on fabric https://github.com/torvalds/linux/commit/b03e7495a8]
- [PCI: Disable MPS configuration by default https://github.com/torvalds/linux/commit/5f39e6705]
- [PCI: Document MPS parameters pci=pcie_bus_safe, pci=pcie_bus_perf, etc https://github.com/torvalds/linux/commit/fa2387124b1ac8177f7af33668ec98135fdd147f]