← Ethernet 상세 목차DUJINLABS.COM

Hardware · Ethernet detailed manual 08 · Linux v6.18.37

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의 설정 순서에 맞춰 확인합니다.

상세 표
2
검증 행
18
절차
5 checkpoints
기준
IEEE 802.3 · phylib/phylink · Linux v6.18.37

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/PHYID2Clause 22 0x02/0x03OUI, model, revision0x2000a23x 계열과 driver match주소 충돌, reset 또는 다른 PHY
PHYCR/PHYSTSC22 0x10/0x11FIFO, interface와 resolved link statusDT와 speed/duplex 결과 일치FIFO/interface mode 불일치
MICR/ISRC22 0x12/0x13interrupt enable와 latched sourcelink/speed/AN 사건에 대응INT pin polarity, ack 또는 mask 오류
CFG2/CFG3/CFG4C22/MMD extendeddownshift, SGMII AN, robust Auto-MDIX, lane mirror운용 정책과 readback 일치strap 잔존 또는 잘못된 quirk
RGMIIDCTL 0x0086MMD 0x1fRX/TX delay code요구 ns가 정확한 code로 readbackDT enum을 ns로 오해하거나 nibble 위치 반전
RGMIICTL 0x0032MMD 0x1fRX/TX clock delay enablephy-mode 책임과 일치delay code만 설정하고 enable 누락
IO_MUX_CFG 0x0170MMD 0x1fI/O impedance와 CLKOUT muxboard SI/clock 정책과 일치기본 impedance 가정 오류

증상에서 첫 실패 경계를 찾는 표

관측 증상직전 통과 증거우선 확인반증 시험판정
ID는 정상인데 1G CRC 증가MDIO와 copper AN 성공RGMIIDCTL/RGMIICTL과 PCB skewdelay code sweep과 scope setup/hold 측정RGMII timing 경계
cold boot마다 mode가 달라짐warm 상태에서는 안정strap sampling과 reset risereset 파형과 strap latch dumpstrap/reset 경계
1G가 100M으로 downshift100M traffic 정상CFG2 downshift와 pair qualitydownshift count 및 cable diagnostic 비교cable/MDI 또는 정책
INT pin은 변하지만 IRQ 0MICR/ISR source setGPIO trigger/polarity와 ISR ackpolling mode로 link event 비교PHY→SoC interrupt 경계
RGMII_ID인데 delay가 0DT live node 확인TI delay 속성과 driver probeconfig_init 전후 0x86/0x32 difffirmware→driver 설정 경계
CLKOUT 설정 뒤 link 불안기본 CLKOUT에서는 정상IO_MUX_CFG와 board clock topologyCLKOUT off/default 비교clock mux 또는 loading
그림 1. 8. TI DP83867을 strap, RGMII delay와 Linux 초기화 순서로 읽는다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 rail/reset
02 strap latch
03 PHY ID match
04 dp83867_probe/DT parse
05 config_init
06 FIFO·impedance
07 RGMII delay
08 AN/link
09 interrupt

실제 검증 절차

순서실행남길 증거판정 목적
1reset 직후 strap status와 0x32, 0x86, 0x170을 저장합니다.power-on baselinestrap 결과 보존
2Linux config_init 뒤 같은 register를 다시 읽어 DT 적용값과 비교합니다.before/after diffdriver write 증명
3TI timing budget 식으로 PCB skew와 선택 delay의 setup/hold margin을 계산합니다.방향별 margin설정 근거 확보
41G 양방향 traffic에서 delay code를 제한 범위 안에서 sweep합니다.code별 CRC/packet lossmargin 중심 확인
5cable, temperature, cold/warm 조건에서 downshift와 ISR을 함께 기록합니다.조건별 raw statusRGMII와 MDI 문제 분리

주의데이터시트의 delay code와 device tree binding의 enum을 임의의 ns 정수로 바꾸지 않습니다. 사용 중인 kernel의 dt-binding 상수와 driver 변환을 함께 확인합니다.

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

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

Linux phylink

PHY, fixed-link, in-band PCS와 MAC callback의 관계