← PCIe 상세 목차

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까지 통과해야 합니다.

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

공개되지 않은 제조사 레지스터나 제품별 오프셋은 추측하지 않았습니다. 아래의 제조사 자료, 아키텍처 문서, Linux v6.18.37 원본으로 확인할 수 있는 내용만 다뤘습니다.