Setting Max Payload Size of End Point in correspondence with Max Payload Size of Root Complex
Device: Intel Denverton NS (C3955 stepping B1) on Harcuvar CRB
Coreboot revision: 4.9
FSP build: 0015.D99 (provided as the package "565490-denverto-fsp-kit-pv004-v1-51")
OS: VxWorks 7 SR0540
During coreboot integration with Intel Denverton FSP I have found that PCIe bus enumeration doesn't care of matching Max Payload Size (MPS) of End Point (EP) and Root Complex (RC) as advised by PCIe standard.
FSP initializes MPS of RC to 512B whereas MPS of EP is left at default value 128B. As result EP device stops working correctly and reports uncorrectable error - Malformed TLP.
In my case EP is PCIe LAN Controller 82574L GEI (8086:10D3).
I have fixed this problem by adding new routine "pciexp_set_max_payload_size" that is called from "pciexp_tune_dev".
The updated files pciexp_device.c and pciexp.h are attached.