← PCIe 상세 목차DUJINLABS.COM

Hardware · PCIe detailed manual 01 · Linux v6.18.37

1. 먼저 register bank의 주인을 확정한다

DWC 기반 SoC에서 'PCIe register'라는 말은 하나의 주소 공간을 뜻하지 않습니다. 최소한 SoC application logic, DWC DBI, DWC Port Logic, iATU, PHY APB, PHY analog test bank가 분리됩니다. 값을 읽기 전에 CPU physical base, 접근 폭, clock/reset 의존성, read side effect와 소유 블록을 기록해야 합니다.

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

CHAPTER 01

1. 먼저 register bank의 주인을 확정한다

DWC 기반 SoC에서 'PCIe register'라는 말은 하나의 주소 공간을 뜻하지 않습니다. 최소한 SoC application logic, DWC DBI, DWC Port Logic, iATU, PHY APB, PHY analog test bank가 분리됩니다. 값을 읽기 전에 CPU physical base, 접근 폭, clock/reset 의존성, read side effect와 소유 블록을 기록해야 합니다.

DBI

Root Port의 Type-1 Configuration Space와 DWC 내부 capability를 CPU가 읽고 쓰는 창입니다. PCI_VENDOR_ID, PCI_COMMAND, PCI_PRIMARY_BUS 같은 표준 header와 Port Logic register가 같은 DBI aperture 안에 보일 수 있습니다.

DBI2

Endpoint shadow configuration 또는 BAR mask를 별도 aperture로 노출하는 합성 구성이 있습니다. 모든 Root Complex 통합에 DBI2가 필요한 것은 아니며, platform driver가 dbi_base2를 제공하는지 먼저 확인합니다.

Application register

LTSSM enable, device type, PERST# GPIO, clock gate, reset mux, interrupt aggregation처럼 SoC 업체가 DWC 바깥에 붙인 logic입니다. 같은 DWC version이어도 offset과 bit 의미가 달라집니다.

PHY register

PLL, CDR, receiver detect, Tx swing, de-emphasis, CTLE, DFE, lane calibration과 eye monitor를 제어합니다. 공정과 PHY release에 종속되므로 DWC Port Logic offset으로 대체할 수 없습니다.

PCS/PMA 경계

PCS는 encoding, block alignment, elastic buffering 같은 digital physical coding을, PMA는 serializer, deserializer, PLL, CDR와 analog front-end를 담당합니다. PIPE 세대에 따라 일부 PCS 책임이 controller 쪽으로 이동할 수 있습니다.

접근 실패의 의미

모든 bit가 0이면 기능이 꺼졌다고 단정하지 않습니다. 해당 bank clock이 꺼졌거나 reset 상태이거나 AXI/APB decode가 열리지 않았을 수 있습니다. bus fault, 0xffffffff, 안정된 reset value를 구분합니다.

주소 창별 소유권과 첫 확인값

주소 창주요 내용접근 전제정상성을 확인할 첫 값잘못 읽었을 때 전형적 모습
SoC applicationLTSSM enable, reset, mode, interruptSoC APB clock와 power domainchip ID 또는 documented reset value모든 값 0, write가 반영되지 않음
DWC DBIType-1 config, PCIe capability, Port LogicDBI clock, DWC core reset 해제Vendor/Device ID, VERSION_NUMBER0xffffffff, AXI abort, 값이 매번 변함
DWC DBI2BAR mask/shadow config해당 IP 옵션과 aperture 존재glue driver가 제공한 dbi2 baseDBI 값을 DBI2로 오해하거나 mirror처럼 보임
DWC iATUoutbound/inbound address translationviewport 또는 unrolled mode 확인REGION_CTRL2 enable readback엉뚱한 region index가 바뀜
PHY APBPLL, lane, Rx/Tx, calibrationPHY rail, refclock, APB clock, reset 해제PHY revision/ID 또는 calibration state0, timeout, APB error
PHY analog/testeye, BER, margin, debug muxvendor unlock/diagnostic 절차문서화된 ready/statusnormal operation을 깨뜨리거나 값이 latch되지 않음

bring-up 기록지에 반드시 남길 식별자

식별자어디서 얻나왜 필요한가잘못 생략했을 때
DWC version/type0x8f8/0x8fc 또는 integration 문서iATU 방식과 quirk 분기다른 release의 offset/bit를 적용
Root Port/Endpoint modeapplication mode strap와 Header TypeDBI header와 LTSSM 역할 결정EP 절차를 RC에 적용
합성 lane 수IP configuration reportx1/x2/x4/x8 mode field 상한존재하지 않는 lane을 기다림
연결 lane 수schematic와 package ball map실제 routing과 lane reversal 확인synthesis 값만 믿고 board 오류를 놓침
PIPE generation/widthintegration guidePCS 책임과 clock/data interface 해석PIPE status의 단위를 잘못 읽음
PHY release/processPHY databook와 fuse/revisiontuning register와 errata 선택다른 공정의 preset을 복사
REFCLK architectureschematic/clock treeCommon Clock, SRNS, SRIS 정책SSC와 latency 가정을 틀림
Linux compatible/gluelive DT와 bound driver누가 reset/PHY/LTSSM을 제어하는지 결정공통 DWC 코드만 수정
그림 1. 1. 먼저 register bank의 주인을 확정한다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 SoC/TRM에서 base 수집
02 clock/reset dependency 표 작성
03 ID/reset value 읽기
04 DWC version 확정
05 PHY release 확정
06 각 bank dump 분리 저장

실제 검증 절차

순서실행남길 증거판정 목적
1DBI, application, PHY physical base를 device tree와 SoC address map에서 각각 적습니다.세 base가 겹치지 않고 resource 이름과 크기가 일치주소 창 하나를 다른 bank로 오인하지 않음
2reset asserted 상태와 deasserted 상태에서 안전한 ID register만 읽습니다.reset 전후 값의 차이와 bus fault 여부clock/reset dependency를 먼저 증명
3DWC VERSION_NUMBER와 VERSION_TYPE을 raw hex와 ASCII 해석 두 형태로 저장합니다.동일 silicon에서 재부팅해도 같은 값version 기반 iATU/quirk 선택 가능
4PHY databook의 revision register 또는 SoC fuse를 읽습니다.board lot가 달라도 예상 release 범위tuning table 선택 근거 확보

주의Linux의 pcie-designware.h에 보이는 offset은 DWC digital controller의 공개 register 정의입니다. PHY analog register offset으로 사용하면 안 됩니다.

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

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

Synopsys PCIe 5.0 PHY

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