Hi,
Here's the background: We have a full device PCB design almost ready for production and at the same time we're currently developing DSP code using TMDSEVM6678L EVM with a PLX3380 USB 3.0 extension board connected through PCIe. USB 3.0 connectivity is a crucial element of our design, therefore we decided to verify it in a simplified environment before going forward with the whole device manufacturing. The system works well transferring data over USB 3.0 lines as expected expect from the transfer rate - we're not able to run the configuration in PCIe Gen2 mode. We're trying to configure the PCIe module of the DSP according to the guide in "SPRUGS6C", but after link training we're stuck with Gen1 mode at 2.5 GT/s link speed. The first thing, which may be an issue is the REG_LINK_CAP (0x7C) register. According to the documentation, this register is "read-only". We found out, that leaving this register not set or writing any value other than 0x01 causes the link to train successfully, however later reads from the data register show random values. The only way to get proper data after training - is to write 0x01 to the REG_LINK_CAP register, even though the register is officially not R/W. Appart from REG_LINK_CAP, in order to obtain Gen2 speed we also set PL_GEN2 (0x80C) BIT DIR_SPD (17) and LINK_CTRL2 (0xA0) TGT_SPEED to 0x02, before link training. This seems to follow the documentation. So far, no matter what we do, the negotiated mode remains Gen1. Any ideas what may be missing or wrong? Is there anything else we should set? The PLX3380 chip supports Gen2 mode and we're even able to run the same extension board trained to Gen2 speed when connected to a PCIe slot of an Intel Ivy Bridge based PC motherboard. Is there any chance, that TMS320C6678 is more demanding and won't successfully train because of PCB track lengths or connector impedances, even though PC chipset is able to achieve 5GT/s in the same configuration? Is there any way to verify if Gen2 training attempt happened? Please advice.