← PCIe 상세 목차DUJINLABS.COM

Hardware · PCIe detailed manual 06 · Linux v6.18.37

6. Linux에 공개된 DWC Port Logic field를 bit 단위로 읽는다

Linux v6.18.37의 pcie-designware.h에서 공개적으로 확인 가능한 field만 정리합니다. 실제 IP databook에는 더 많은 register가 있지만, 여기 적지 않은 bit를 이름만 추측해서 사용하지 않습니다.

상세 표
2
검증 행
26
절차
4 checkpoints
기준
PCIe · Linux v6.18.37

CHAPTER 06

6. Linux에 공개된 DWC Port Logic field를 bit 단위로 읽는다

Linux v6.18.37의 pcie-designware.h에서 공개적으로 확인 가능한 field만 정리합니다. 실제 IP databook에는 더 많은 register가 있지만, 여기 적지 않은 bit를 이름만 추측해서 사용하지 않습니다.

DWC link 관련 공개 register

OffsetMacro/fieldBit의미bring-up에서 읽는 방법
0x710PCIE_PORT_LINK_CONTROLregisterPort Link Control원본 raw와 설정 전후 값을 모두 저장
0x710PORT_LINK_DLL_LINK_EN5Data Link Layer link enableLTSSM enable과 혼동하지 않음
0x710PORT_LINK_FAST_LINK_MODE7fast link mode 관련 제어production 설정을 임의 변경하지 않음
0x710PORT_LINK_MODE_MASK21:16synthesis/설정 link modex1=0x1, x2=0x3, x4=0x7, x8=0xf, x16=0x1f encoding
0x714PCIE_PORT_LANE_SKEWregisterlane skew 관련 Port Logicdatabook의 bit 정의와 함께 사용
0x728PCIE_PORT_DEBUG05:0LTSSM state mask단발 값보다 transition/history로 수집
0x72cPCIE_PORT_DEBUG1_LINK_UP4DWC가 판단한 link-up표준 LNKSTA와 함께 비교
0x72cLINK_IN_TRAINING29link training 진행speed change 중 일시 set과 stuck을 구분
0x80cPORT_LOGIC_SPEED_CHANGE17directed speed change trigger/status오래 set이면 Recovery.Speed/PHY rate 확인
0x80cPORT_LOGIC_LINK_WIDTH_MASK12:8target link widthnegotiated width는 PCIe LNKSTA에서 읽음
0x890GEN3_EQ_DISABLE16Gen3 equalization disable controlquirk 없이 임의 disable하지 않음
0x890RATE_SHADOW_SEL25:24rate별 shadow 선택IP version과 programming sequence 확인
0x8f8PCIE_VERSION_NUMBER32bitDWC component versionraw hex 보존 후 version helper와 대조
0x8fcPCIE_VERSION_TYPE32bitDWC component typeSoC model이 아닌 IP 구성 식별

서로 다른 'link width/speed' 값

위치무엇을 뜻하나언제 달라질 수 있나
합성 max lanesIP configuration reporthardware가 구현한 최대 lanesilicon에서 고정
DT num-lanesfirmwareboard가 사용할 lane 정책board variant마다 다름
Port Link mode0x710 21:16controller programming modedriver 초기화로 변경
Target width0x80c 12:8retrain에 요청하는 widthretrain/quirk에서 변경
Negotiated widthPCI_EXP_LNKSTA NLW실제로 합의된 active lanelane failure/retrain마다 변동
Max link speedLink Capabilityadvertised controller 상한DBI RO write 구간에 programming
Target speedLink Control 2 TLS다음 retrain 목표software 정책으로 변경
Current speedLink Status CLS현재 L0에서 사용 중인 rateRecovery 후 변동
그림 1. 6. Linux에 공개된 DWC Port Logic field를 bit 단위로 읽는다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 VERSION 확인
02 lane synthesis/DT 대조
03 0x710 mode 확인
04 0x80c target 확인
05 LTSSM trace
06 LNKSTA current speed/width
07 AER/replay 안정성

실제 검증 절차

순서실행남길 증거판정 목적
1모든 register를 32bit raw로 먼저 덤프하고 field decode를 별도 열에 둡니다.원본값과 해석값 동시 보존decode script 오류를 재검증 가능
2링크 시작 전, training 중, L0 후 세 시점의 dump를 저장합니다.변화해야 할 bit와 고정 bit 구분reset value와 runtime state 혼동 방지
3표준 PCIe Capability의 LNKCAP/LNKCTL/LNKSTA/LNKCTL2와 Port Logic을 한 행에 놓습니다.target, capability, current 값의 관계한 register만 보고 속도 판정하지 않음
4실패 boot와 성공 boot의 bit diff를 DWC version별로 분류합니다.동일 version/board끼리 비교다른 silicon revision을 섞지 않음

주의Port Logic register는 일부 bit가 implementation-defined이거나 version별로 달라질 수 있습니다. Linux가 정의하지 않은 bit는 해당 DWC databook을 확인한 뒤에만 이름을 붙입니다.

공개적으로 다시 확인할 수 있는 자료

공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.

Synopsys PCIe 5.0 PHY

PHY가 담당하는 SerDes, equalization, lane margining과 진단 기능의 공개 범위