CHAPTER 03
3. Auto-Negotiation을 advertisement부터 resolved mode까지 추적한다
AN complete bit 하나가 아니라 local advertisement, link partner ability, common technology, duplex, pause resolution, 1000BASE-T master/slave와 fault를 같은 시점에 읽습니다.
능력과 광고
PHY가 지원하는 능력과 지금 광고하도록 설정한 능력은 다릅니다. `supported`, `advertising`, `lp_advertising`을 분리합니다.
duplex mismatch
한쪽을 강제하고 다른 쪽을 AN으로 두면 parallel detection 때문에 speed만 맞고 duplex가 어긋날 수 있습니다.
Pause
symmetric/asymmetric pause는 양쪽 advertisement의 조합으로 Rx/Tx pause가 결정됩니다. MAC flow control 설정까지 반영돼야 합니다.
1000BASE-T master/slave
clock master 역할을 협상하며 resolution fault가 link 실패 원인이 될 수 있습니다. 단순 speed bit와 별도입니다.
레지스터와 관측값을 함께 읽는 표
| 항목 | 소유 블록 | 설정 또는 의미 | 정상 증거 | 실패 해석 |
|---|---|---|---|---|
| ANAR | local PHY AN | 10/100, pause, selector | 운영 정책과 ethtool advertising 일치 | 지원 능력과 광고 능력 혼동 |
| ANLPAR | partner snapshot | 상대 10/100, pause | 상대 ethtool 결과와 대칭 | old page/latch 또는 cable 중간장치 |
| 1000BASE-T control | local PHY | 1000 advertise, manual master/slave | 정책과 일치 | force bit와 preferred bit 혼동 |
| 1000BASE-T status | resolved result | partner ability, master/slave, fault | fault 0, 역할이 한쪽씩 분리 | 양쪽 force master 등 구성 충돌 |
| AN expansion/status | AN state | page receive, parallel detect, complete | complete 후 resolved mode 안정 | restart loop 또는 next-page 불일치 |
| MAC flow control | MAC | Rx/Tx pause enable와 quanta | resolved pause와 동일 방향 | PHY 협상은 맞지만 MAC 적용 누락 |
증상에서 첫 실패 경계를 찾는 표
| 관측 증상 | 직전 통과 증거 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| AN complete가 안 됨 | signal detect와 link pulse 존재 | local/partner common ability | 10/100만 광고해 최소 공통 mode 시험 | advertisement 또는 pair 품질 |
| 1G에서만 실패 | 100M AN 성공 | 네 pair와 master/slave status | short cable, forced role 비교 | pair 또는 clock role 경계 |
| 속도는 맞고 packet loss | link와 speed 정상 | duplex와 pause resolution | 양쪽 AN 복원 후 collision/pause counter 비교 | force/AN 혼용 문제 |
| pause storm | frame/FCS 정상 | pause advertisement와 MAC quanta | pause를 양쪽에서 끄고 재현 | flow-control policy 경계 |
| 주기적 link restart | rail과 cable 안정 | AN fault/restart 원인 | restart bit writer와 PHY interrupt trace | software가 AN을 반복 재시작 |
| 상대 교체 시 mode 달라짐 | local 설정 동일 | partner advertisement | 상대 raw register와 공통능력 계산 | 정상적인 policy 결과인지 판정 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | AN 시작 전 local advertisement raw 값을 저장합니다. | ANAR와 1000 control | 입력 정책 고정 |
| 2 | 완료 직후 partner ability와 fault를 연속 읽습니다. | ANLPAR, 1000 status, expansion | 협상 결과 증명 |
| 3 | pause resolution 표를 계산해 MAC Rx/Tx enable과 비교합니다. | 계산값과 MAC register | PHY-MAC 정책 연결 |
| 4 | 10/100/1000과 서로 다른 partner를 조합해 반복합니다. | 조합별 resolved tuple | 상대 의존성 검증 |
주의강제 속도 시험은 진단용으로만 사용합니다. 한쪽만 force한 결과를 정상 운용 설정으로 채택하면 duplex mismatch를 만들 수 있습니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 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 경로