← PCIe 상세 목차DUJINLABS.COM

Hardware · PCIe detailed manual 08 · Linux v6.18.37

8. DWC eDMA를 endpoint의 DMA engine과 분리한다

DWC eDMA는 IP에 선택적으로 합성되는 local DMA engine입니다. NVMe, Ethernet 또는 accelerator endpoint가 자체 queue와 DMA를 가지는 것과 별개입니다. Linux DWC common code는 mode와 channel 수를 detect한 뒤 dw-edma core에 등록합니다.

상세 표
3
검증 행
25
절차
4 checkpoints
기준
PCIe · Linux v6.18.37

CHAPTER 08

8. DWC eDMA를 endpoint의 DMA engine과 분리한다

DWC eDMA는 IP에 선택적으로 합성되는 local DMA engine입니다. NVMe, Ethernet 또는 accelerator endpoint가 자체 queue와 DMA를 가지는 것과 별개입니다. Linux DWC common code는 mode와 channel 수를 detect한 뒤 dw-edma core에 등록합니다.

Linux DWC eDMA detection 순서

순서함수/값판정실패 시 의미
1dw_pcie_edma_init_dataplatform이 준 mf/ops 또는 defaultintegration 정보 준비
2dw_pcie_edma_find_mfLegacy viewport/Unroll/HDMA moderegister layout 미확정
3PCIE_DMA_VIEWPORT_BASE + CTRLviewport register read 유효성unrolled 여부 선택
4PCIE_DMA_UNROLL_BASEunrolled register baseDBI DMA offset와 mapping
5PCIE_DMA_CTRLwrite/read channel count field0 또는 상한 초과면 미지원/오류
6dw_pcie_edma_irq_verifychannel IRQ resource 수IRQ topology 불일치
7dw_pcie_edma_ll_alloclinked-list memory/resourceLL aperture/size 문제
8dw_edma_probeDMA engine 등록DMAengine consumer 사용 가능

eDMA와 endpoint bus-master DMA 비교

항목DWC eDMAEndpoint 자체 DMA
위치Root Port/Endpoint DWC IP 내부 optionEndpoint function 내부
registerDWC DMA viewport/unrolled bankendpoint BAR register
Linux driverdw-edma/DWC commonNVMe/NIC/accelerator driver
channel합성된 read/write channeldevice queue/channel
descriptorDWC eDMA linked listdevice-specific descriptor
interrupteDMA channel IRQMSI/MSI-X 또는 device IRQ
주소 경로local/remote eDMA 설정PCI bus-master TLP + IOMMU
사용 목적SoC/EP data movement optiondevice datapath 핵심

eDMA register 위치 식별값

Macro의미검증
PCIE_DMA_VIEWPORT_BASE0x970legacy viewport baseviewport mode에서만
PCIE_DMA_UNROLL_BASE0x80000unrolled register baseDBI aperture size 확인
PCIE_DMA_CTRL0x008channel capabilityraw value 보존
PCIE_DMA_NUM_WR_CHANbits 3:0write channel count1..EDMA_MAX_WR_CH
PCIE_DMA_NUM_RD_CHANbits 19:16read channel count1..EDMA_MAX_RD_CH
그림 1. 8. DWC eDMA를 endpoint의 DMA engine과 분리한다의 실행 순서왼쪽에서 오른쪽으로 실제 소유권과 관찰 지점이 이동합니다.
01 DWC version/resource
02 eDMA mode detect
03 channel count
04 IRQ verify
05 linked-list allocation
06 dw-edma probe
07 DMAengine channel
08 descriptor/doorbell
09 completion IRQ

실제 검증 절차

순서실행남길 증거판정 목적
1IP configuration report에서 eDMA option과 channel 수를 먼저 확인합니다.silicon 합성값과 Linux detect 일치없는 engine의 register를 해석하지 않음
2viewport/unrolled base가 mapped DBI resource 안에 있는지 확인합니다.access가 bus fault 없이 documented value잘못된 aperture 크기 발견
3channel count와 IRQ resource 수를 비교합니다.각 read/write channel이 지원되는 IRQ topologyprobe 후 특정 channel만 무응답 방지
4eDMA test와 endpoint driver DMA test를 별도 이름으로 기록합니다.어느 engine이 TLP를 생성했는지 명확두 DMA engine의 fault 혼합 방지

주의PCIE_DMA_CTRL field가 읽힌다는 사실만으로 eDMA가 실사용 가능하다고 판정하지 않습니다. channel IRQ, linked-list memory와 platform integration까지 통과해야 합니다.

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

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