CHAPTER 09
9. Realtek RTL8211F의 paged register와 RGMII delay를 읽는다
RTL8211F PHY ID 0x001cc916과 Linux realtek driver를 기준으로 page select, RGMII TX/RX delay, ALDPS, CLKOUT, PHY-mode EEE, interrupt, WOL과 LED 설정을 살펴봅니다. 공개 문서로 의미가 확인되지 않는 vendor magic value는 이름을 만들어 설명하지 않습니다.
paged access
RTL8211F vendor register는 page select 0x1f를 통해 접근합니다. Linux의 phy_read_paged/phy_modify_paged helper가 원래 page 복원과 bus lock을 담당합니다.
RGMII page
Linux driver는 page 0xd08의 TXCR 0x11 bit 8과 RXCR 0x15 bit 3으로 TX/RX delay를 독립 제어합니다.
초기화 순서
rtl8211f_config_init은 ALDPS 설정, RGMII delay, CLKOUT 설정을 적용하고 PHY-mode EEE를 꺼 LPI 처리를 MAC 쪽으로 넘깁니다.
모델 구분
RTL8211F, RTL8211F-VD와 다른 RTL8211 계열은 PHY ID와 일부 CLKOUT page가 다릅니다. 비슷한 이름의 register sequence를 그대로 복사하지 않습니다.
레지스터와 관측값을 함께 읽는 표
| 항목 | 소유 블록 | 설정 또는 의미 | 정상 증거 | 실패 해석 |
|---|---|---|---|---|
| PHYID1/PHYID2 | C22 0x02/0x03 | RTL8211F exact ID 0x001cc916 | Linux driver가 F 모델로 bind | E/FD/VD 또는 generic driver 오인 |
| PAGE_SELECT 0x1f | vendor page gateway | 현재 extended page | helper 종료 후 기존 page 복원 | 다른 thread가 잘못된 page read |
| TXCR 0x11 | page 0xd08 | TX delay bit 8 | rgmii-txid/id에서 set | TX timing 오류 또는 중복 delay |
| RXCR 0x15 | page 0xd08 | RX delay bit 3 | rgmii-rxid/id에서 set | RX CRC와 sampling margin |
| PHYCR1/PHYCR2 | RTL8211F PHY control page | ALDPS와 PHY EEE/CLKOUT 관련 상태 | firmware 속성과 driver 정책 일치 | 절전 후 link/clock 복귀 문제 |
| INER/INSR | interrupt page 0xa43 | link event enable/status | INT pin과 event가 대응 | ack되지 않은 latched status |
| WOL/LED pages | 0xd8a/0xd04 계열 | PME event와 3개 LED mode | 요청 기능만 enable | LED를 실제 link 증거로 오판 |
증상에서 첫 실패 경계를 찾는 표
| 관측 증상 | 직전 통과 증거 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| page read 값이 매번 다름 | C22 기본 register 정상 | page lock과 page restore | paged helper만 사용해 반복 read | MDIO 동시 접근/page 경계 |
| RX CRC만 증가 | copper symbol 정상 | 0xd08 RX delay와 phy-mode | RX delay bit on/off와 partner counter 비교 | RGMII RX timing |
| 상대에서만 CRC 증가 | local RX 정상 | 0xd08 TX delay | TX delay bit와 PCB skew 비교 | RGMII TX timing |
| suspend 후 crystal/link 복귀 실패 | cold boot 정상 | ALDPS/CLKOUT와 WOL policy | ALDPS off 및 wake source 비교 | PHY power lifecycle |
| EEE에서만 latency/link flap | EEE off 정상 | PHYCR2와 MAC LPI ownership | PHY-mode EEE/MAC EEE를 분리 시험 | EEE 책임 중복 |
| F용 설정이 VD에서 실패 | PHY family는 인식 | exact PHY ID와 CLKOUT page | ID별 driver entry/sequence 비교 | model variant 경계 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | PHY ID와 Linux bound driver 이름을 먼저 저장합니다. | exact model/revision | variant 구분 |
| 2 | page 0xd08의 TXCR/RXCR을 config_init 전후 비교합니다. | phy-mode→delay bit 대응 | RGMII 책임 확인 |
| 3 | 모든 vendor page read 뒤 page 0 복원 여부를 검증합니다. | page select trace | 동시 접근 안정성 |
| 4 | ALDPS, CLKOUT, EEE를 하나씩 바꾸며 suspend/resume와 link 시간을 측정합니다. | 기능별 latency/실패율 | power 경계 분리 |
| 5 | LED와 INSR이 아니라 MAC good/CRC와 PHY status로 최종 판정합니다. | counter ladder | 표시 기능 오판 방지 |
주의RTL8211F vendor page에는 공개 자료로 의미를 확정하기 어려운 값이 있습니다. Linux 소스가 'undocumented' 또는 magic value로 다루는 값에 임의의 bit 이름을 붙이지 않습니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 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 경로