====== PCIe ======
---- datatable ----
cols : %pageid%, abbreviation, descr_wiki, tags_tags
headers : Page, Abbreviation, Description, Tags
filter : %class%=abbreviation
filter : tags_tags~~pcie
sort : ^pageid
----
===== Docs =====
| https://xilinx.github.io/pcie-debug-kmap/pciedebug/build/html/docs/PCIe_Collaterals/index.html | PCIE DEBUG (GENERAL) |
| https://support.xilinx.com/s/article/56616?language=en_US | 56616 - 7 Series Integrated Block for PCI Express - Link Training Debug Guide |
| https://support.xilinx.com/s/article/73361?language=en_US | 73361 - Xilinx PCI Express Gen3 Link Training Debugging Guide for UltraScale and UltraScale+ Devices |
| https://support.xilinx.com/s/article/71355?language=en_US | 71355 - Vivado ILA Usage Guide for UltraScale FPGA Gen3 Integrated Block for PCI Express |
| https://support.xilinx.com/s/article/1097525?language=en_US | Debugging PCI Express Link Training Issues with Integrated Debugging Features in the IP |
| https://github.com/Xilinx/chipscopy/tree/master | ILA, JTAG, DDR, PROGRAM |
===== Connectors =====
===== Xilinx =====
==== Artix Ultrascale+ =====
PCIe корка стартует нормально только если прошивка быстро загружается из флешки.
Вариант конфигурации через JTAG, а потом ребут компа или пауза в u-boot и потом загрузка Linux не прокатывают.
Возможно, это можно как-то обойти (более глубоко сбрасывать трансиверы - PERST недостаточно)
===== SMARC =====
{{drawio>smarc_pcie.png}}
===== LTSSM =====
[[https://www.oreilly.com/library/view/pci-express-system/0321156307/0321156307_ch14lev1sec6.html|link]]
{{:wiki:if:pcie:ltssm.jpg?240&direct}}
#define LTSSM_DETECT 0
#define LTSSM_POLLING 1
#define LTSSM_CONFIG 2
#define LTSSM_RECOVERY 3
#define LTSSM_DISABLED 4
#define LTSSM_HOTRESET 5
#define LTSSM_LOOPBACK 6
#define LTSSM_L0 7
#define LTSSM_L0s 8
#define LTSSM_L1 9
#define LTSSM_L2 10
detect.quiet", /* 0x00 */
detect.active", /* 0x01 */
polling.active", /* 0x02 */
polling.compliance", /* 0x03 */
polling.configuration", /* 0x04 */
config.linkwidthstart", /* 0x05 */
config.linkwidthaccept", /* 0x06 */
config.lanenumwait", /* 0x07 */
config.lanenumaccept", /* 0x08 */
config.complete", /* 0x09 */
config.idle", /* 0x0A */
recovery.receiverlock", /* 0x0B */
recovery.equalization", /* 0x0C */
recovery.speed", /* 0x0D */
recovery.receiverconfig", /* 0x0E */
recovery.idle", /* 0x0F */
L0", /* 0x10 */
L0s", /* 0x11 */
L1.entry", /* 0x12 */
L1.idle", /* 0x13 */
L2.idle", /* 0x14 */
L2.transmitwake", /* 0x15 */
disable", /* 0x16 */
loopback.entry", /* 0x17 */
loopback.active", /* 0x18 */
loopback.exit", /* 0x19 */
hotreset", /* 0x1A */
Xilinx Xore:
00: Detect.Quiet
01: Detect.Active
02: Polling.Active
03: Polling.Compliance
04: Polling.Configuration
05: Configuration.Linkwidth.Start
06: Configuration.Linkwidth.Accept
07: Configuration.Lanenum.Accept
08: Configuration.Lanenum.Wait
09: Configuration.Complete
0A: Configuration.Idle
0B: Recovery.RcvrLock
0C: Recovery.Speed
0D: Recovery.RcvrCfg
0E: Recovery.Idle
10: L0
11-16: Reserved
17: L1.Entry
18: L1.Idle
19-1A: Reserved
20: Disabled
21: Loopback_Entry_Master
22: Loopback_Active_Master
23: Loopback_Exit_Master
24: Loopback_Entry_Slave
25: Loopback_Active_Slave
26: Loopback_Exit_Slave
27: Hot_Reset
28: Recovery_Equalization_Phase0
29: Recovery_Equalization_Phase1
2a: Recovery_Equalization_Phase2
2b: Recovery_Equalization_Phase3