CHAPTER 08
8. TI DP83867을 strap, RGMII delay와 Linux 초기화 순서로 읽는다
DP83867IR/CR 계열을 기준으로 PHY ID, RX_CTRL과 mode strap, Clause 22 기본 register, MMD device address 0x1f의 extended register, RGMII internal delay, FIFO depth, I/O impedance, interrupt와 downshift를 Linux dp83867 driver의 설정 순서에 맞춰 확인합니다.
PHY ID
Linux driver는 DP83867 PHY ID 0x2000a231을 revision 하위 bit mask와 함께 사용합니다. PHYID1/2 raw 값과 실제 package variant를 같이 기록합니다.
RGMII delay
RGMIIDCTL 0x0086에서 RX/TX delay code를 선택하고 RGMIICTL 0x0032에서 delay enable을 제어합니다. TI 자료는 0ns부터 4ns까지 0.25ns 단계 조정을 설명합니다.
DT 입력
`ti,rx-internal-delay`, `ti,tx-internal-delay`, `ti,fifo-depth`, impedance와 CLKOUT 속성이 driver private state로 들어간 뒤 config_init에서 register에 반영됩니다.
strap과 software
strap latch 값과 Linux가 덮어쓴 최종값을 분리합니다. RX_CTRL strap mode와 lane swap, port mirroring, clock output 같은 항목은 reset 직후와 config_init 이후를 비교합니다.
레지스터와 관측값을 함께 읽는 표
| 항목 | 소유 블록 | 설정 또는 의미 | 정상 증거 | 실패 해석 |
|---|---|---|---|---|
| PHYID1/PHYID2 | Clause 22 0x02/0x03 | OUI, model, revision | 0x2000a23x 계열과 driver match | 주소 충돌, reset 또는 다른 PHY |
| PHYCR/PHYSTS | C22 0x10/0x11 | FIFO, interface와 resolved link status | DT와 speed/duplex 결과 일치 | FIFO/interface mode 불일치 |
| MICR/ISR | C22 0x12/0x13 | interrupt enable와 latched source | link/speed/AN 사건에 대응 | INT pin polarity, ack 또는 mask 오류 |
| CFG2/CFG3/CFG4 | C22/MMD extended | downshift, SGMII AN, robust Auto-MDIX, lane mirror | 운용 정책과 readback 일치 | strap 잔존 또는 잘못된 quirk |
| RGMIIDCTL 0x0086 | MMD 0x1f | RX/TX delay code | 요구 ns가 정확한 code로 readback | DT enum을 ns로 오해하거나 nibble 위치 반전 |
| RGMIICTL 0x0032 | MMD 0x1f | RX/TX clock delay enable | phy-mode 책임과 일치 | delay code만 설정하고 enable 누락 |
| IO_MUX_CFG 0x0170 | MMD 0x1f | I/O impedance와 CLKOUT mux | board SI/clock 정책과 일치 | 기본 impedance 가정 오류 |
증상에서 첫 실패 경계를 찾는 표
| 관측 증상 | 직전 통과 증거 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| ID는 정상인데 1G CRC 증가 | MDIO와 copper AN 성공 | RGMIIDCTL/RGMIICTL과 PCB skew | delay code sweep과 scope setup/hold 측정 | RGMII timing 경계 |
| cold boot마다 mode가 달라짐 | warm 상태에서는 안정 | strap sampling과 reset rise | reset 파형과 strap latch dump | strap/reset 경계 |
| 1G가 100M으로 downshift | 100M traffic 정상 | CFG2 downshift와 pair quality | downshift count 및 cable diagnostic 비교 | cable/MDI 또는 정책 |
| INT pin은 변하지만 IRQ 0 | MICR/ISR source set | GPIO trigger/polarity와 ISR ack | polling mode로 link event 비교 | PHY→SoC interrupt 경계 |
| RGMII_ID인데 delay가 0 | DT live node 확인 | TI delay 속성과 driver probe | config_init 전후 0x86/0x32 diff | firmware→driver 설정 경계 |
| CLKOUT 설정 뒤 link 불안 | 기본 CLKOUT에서는 정상 | IO_MUX_CFG와 board clock topology | CLKOUT off/default 비교 | clock mux 또는 loading |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | reset 직후 strap status와 0x32, 0x86, 0x170을 저장합니다. | power-on baseline | strap 결과 보존 |
| 2 | Linux config_init 뒤 같은 register를 다시 읽어 DT 적용값과 비교합니다. | before/after diff | driver write 증명 |
| 3 | TI timing budget 식으로 PCB skew와 선택 delay의 setup/hold margin을 계산합니다. | 방향별 margin | 설정 근거 확보 |
| 4 | 1G 양방향 traffic에서 delay code를 제한 범위 안에서 sweep합니다. | code별 CRC/packet loss | margin 중심 확인 |
| 5 | cable, temperature, cold/warm 조건에서 downshift와 ISR을 함께 기록합니다. | 조건별 raw status | RGMII와 MDI 문제 분리 |
주의데이터시트의 delay code와 device tree binding의 enum을 임의의 ns 정수로 바꾸지 않습니다. 사용 중인 kernel의 dt-binding 상수와 driver 변환을 함께 확인합니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
Linux PHY Abstraction Layer
PHY 장치, MDIO, link 상태와 PHY driver의 공개 Linux 계약
Linux phylink
PHY, fixed-link, in-band PCS와 MAC callback의 관계
Linux Ethernet controller binding
phy-mode, phy-handle, fixed-link와 managed 속성
Linux v6.18.37 phy_device.c
PHY 장치 생성, attach, start/stop과 상태 갱신
Linux v6.18.37 phylink.c
link resolve, MAC config, link up/down 실행 경로
TI DP83867IR/CR datasheet
strap, RGMII/SGMII, extended register, clock, interrupt와 진단 기능
TI DP83867 RGMII timing budget
0.25ns 단계 internal delay와 setup/hold margin 계산 및 측정 절차
Linux DP83867 driver
DT 속성, RGMIIDCTL, FIFO, impedance, interrupt와 downshift 초기화
Linux RTL8211F driver
paged register, RGMII TX/RX delay, ALDPS, CLKOUT, EEE, WOL과 interrupt 처리
Microchip LAN8841 product and datasheet
RGMII, IEEE 1588v2, cable diagnostics와 제조사 데이터시트
Linux LAN8841 driver in micrel.c
KSZ9131 공통 초기화, LAN8841 errata, PTP, interrupt와 cable test 경로