CHAPTER 01
1. DWMAC release와 합성 capability부터 확정한다
stmmac은 여러 세대의 Synopsys Ethernet IP를 지원합니다. MAC version, HW feature 0~3, DMA channel 수, queue 수, address width, enhanced descriptor와 offload 지원을 먼저 읽어 실제로 존재하는 register와 code path를 고릅니다.
세대
GMAC 3.x, GMAC4/5와 XGMAC은 register map과 descriptor semantics가 다릅니다. 이름이 비슷해도 offset을 섞지 않습니다.
합성 옵션
queue/channel, checksum, TSO, RSS, PTP, safety, eDMA와 address width는 integration 시 선택됩니다.
SoC glue
clock, reset, interface mux와 AXI burst는 DWMAC 공통 block 밖의 platform 코드가 설정할 수 있습니다.
capability override
firmware property나 platform data가 HW feature를 제한할 수 있습니다. raw register와 driver가 채운 `dma_cap`을 비교합니다.
레지스터와 관측값을 함께 읽는 표
| 항목 | 소유 블록 | 설정 또는 의미 | 정상 증거 | 실패 해석 |
|---|---|---|---|---|
| MAC_VERSION | DWMAC core | user/core version | driver 선택 세대와 일치 | 다른 register map 사용 가능성 |
| HW_FEATURE0 | DWMAC core | PHY interface, checksum, VLAN, timestamp | 사용 feature가 실제 set | DT 선언만 있고 hardware 미합성 |
| HW_FEATURE1 | DWMAC core | FIFO size, queue/channel count | queue 설정이 상한 이하 | 존재하지 않는 queue 접근 |
| HW_FEATURE2/3 | DWMAC core | address width, TSO, RSS, safety | DMA mask와 offload 정책 일치 | 고주소 truncate 또는 잘못된 offload |
| DMA_SYS_BUS_MODE | DMA global | burst, enhanced addressing, reset | software reset clear와 AXI 정책 반영 | AXI clock/reset 또는 burst incompatibility |
| MTL queue mapping | MTL | Tx/Rx queue와 DMA channel | driver queue topology와 일치 | traffic이 다른 channel로 감 |
증상에서 첫 실패 경계를 찾는 표
| 관측 증상 | 직전 통과 증거 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| MAC version 0/ffff | MMIO resource 존재 | clock/reset/address decode | 다른 ID register와 bus fault 비교 | DWMAC 접근 경계 |
| queue 1부터 timeout | queue 0 정상 | 합성 queue 수 | HW feature와 DT queue count 비교 | capability 초과 |
| 32-bit만 DMA 성공 | ring과 IRQ 정상 | address width와 DMA mask | buffer를 4GiB 아래로 제한 | 주소 폭 경계 |
| offload 켜면 corruption | 기본 frame 정상 | capability와 descriptor format | feature별 단독 disable | 합성/descriptor 해석 |
| 특정 SoC만 초기화 실패 | 공통 stmmac code 동일 | glue clock/reset/AXI | platform register snapshot 비교 | SoC integration 경계 |
| resume 뒤 feature 값 변화 | cold boot 정상 | power domain/context restore | suspend 전후 capability dump | 전원 복귀/clock 경계 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | MAC version과 모든 HW feature register를 raw hex로 저장합니다. | boot별 동일 snapshot | IP identity 확정 |
| 2 | driver `dma_cap`과 raw bit를 field별로 비교합니다. | override 차이 표 | software 해석 검증 |
| 3 | DT queue/channel 설정이 합성 상한을 넘지 않는지 확인합니다. | topology 대조표 | 잘못된 resource 배제 |
| 4 | offload를 하나씩 켜며 descriptor format과 결과를 기록합니다. | feature별 pass/fail | 문제 feature 격리 |
주의인터넷의 다른 DWMAC release register dump를 현재 SoC의 reset value 표처럼 사용하지 않습니다. 현재 MAC_VERSION과 integration databook이 기준입니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
Linux stmmac driver
Synopsys GMAC/GMAC4/XGMAC, descriptor, NAPI, PTP와 offload 공개 설명
Linux NAPI
schedule, poll budget, completion과 IRQ 재활성화 계약
Linux v6.18.37 stmmac_main.c
open, xmit, RX, ISR와 NAPI poll 원본
Linux v6.18.37 dwmac4_dma.c
DMA channel, ring length, tail pointer와 interrupt enable
Linux v6.18.37 net/core/dev.c
NAPI core, NET_RX_SOFTIRQ와 receive stack 진입
Linux DMA API HOWTO
descriptor와 packet buffer의 CPU/device ownership, mapping과 barrier