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 application | LTSSM enable, reset, mode, interrupt | SoC APB clock와 power domain | chip ID 또는 documented reset value | 모든 값 0, write가 반영되지 않음 |
| DWC DBI | Type-1 config, PCIe capability, Port Logic | DBI clock, DWC core reset 해제 | Vendor/Device ID, VERSION_NUMBER | 0xffffffff, AXI abort, 값이 매번 변함 |
| DWC DBI2 | BAR mask/shadow config | 해당 IP 옵션과 aperture 존재 | glue driver가 제공한 dbi2 base | DBI 값을 DBI2로 오해하거나 mirror처럼 보임 |
| DWC iATU | outbound/inbound address translation | viewport 또는 unrolled mode 확인 | REGION_CTRL2 enable readback | 엉뚱한 region index가 바뀜 |
| PHY APB | PLL, lane, Rx/Tx, calibration | PHY rail, refclock, APB clock, reset 해제 | PHY revision/ID 또는 calibration state | 0, timeout, APB error |
| PHY analog/test | eye, BER, margin, debug mux | vendor unlock/diagnostic 절차 | 문서화된 ready/status | normal operation을 깨뜨리거나 값이 latch되지 않음 |
bring-up 기록지에 반드시 남길 식별자
| 식별자 | 어디서 얻나 | 왜 필요한가 | 잘못 생략했을 때 |
|---|---|---|---|
| DWC version/type | 0x8f8/0x8fc 또는 integration 문서 | iATU 방식과 quirk 분기 | 다른 release의 offset/bit를 적용 |
| Root Port/Endpoint mode | application mode strap와 Header Type | DBI header와 LTSSM 역할 결정 | EP 절차를 RC에 적용 |
| 합성 lane 수 | IP configuration report | x1/x2/x4/x8 mode field 상한 | 존재하지 않는 lane을 기다림 |
| 연결 lane 수 | schematic와 package ball map | 실제 routing과 lane reversal 확인 | synthesis 값만 믿고 board 오류를 놓침 |
| PIPE generation/width | integration guide | PCS 책임과 clock/data interface 해석 | PIPE status의 단위를 잘못 읽음 |
| PHY release/process | PHY databook와 fuse/revision | tuning register와 errata 선택 | 다른 공정의 preset을 복사 |
| REFCLK architecture | schematic/clock tree | Common Clock, SRNS, SRIS 정책 | SSC와 latency 가정을 틀림 |
| Linux compatible/glue | live DT와 bound driver | 누가 reset/PHY/LTSSM을 제어하는지 결정 | 공통 DWC 코드만 수정 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | DBI, application, PHY physical base를 device tree와 SoC address map에서 각각 적습니다. | 세 base가 겹치지 않고 resource 이름과 크기가 일치 | 주소 창 하나를 다른 bank로 오인하지 않음 |
| 2 | reset asserted 상태와 deasserted 상태에서 안전한 ID register만 읽습니다. | reset 전후 값의 차이와 bus fault 여부 | clock/reset dependency를 먼저 증명 |
| 3 | DWC VERSION_NUMBER와 VERSION_TYPE을 raw hex와 ASCII 해석 두 형태로 저장합니다. | 동일 silicon에서 재부팅해도 같은 값 | version 기반 iATU/quirk 선택 가능 |
| 4 | PHY 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 complete solution
Controller, PHY, verification IP가 별도 구성요소이며 PIPE 5.x와 SerDes architecture를 지원한다는 공개 제품 범위
Synopsys PCIe 5.0 PHY
PHY가 담당하는 SerDes, equalization, lane margining과 진단 기능의 공개 범위
Synopsys PIPE 5.1 SerDes architecture
기존 PIPE와 SerDes architecture에서 PCS 책임이 이동하는 이유
Linux v6.18.37 DWC header
DWC Port Logic, link debug, iATU와 eDMA 공개 register offset
Linux DWC Devicetree binding
clock, reset, PHY, lane, speed와 DWC resource description