2013-08-04 7 views
0

PowerPC 리눅스에서 DMA 엔진이 올바르게 응답하지 않습니다. 내 PCIe 장치가 호스트에 읽기/쓰기 요청을 보내면 시간 초과가 발생합니다. 낮은 주소 범위에 1GB의 RAM이 있습니다. 나는 다음과 같은 기능DMA 엔진이 PowerPC Linux에서 올바르게 응답하지 않습니다.

pci_device_enable() 
pci_set_master() 

DMA 메모리가 0x0F00_0000에 할당 된 호스트의 사용자 공간에서이 메모리에 액세스 할 수 있어요 불리는했다. 이 문제를 어떻게 디버깅 할 수 있습니까? 그 이유는 무엇일까요?

답변

0

PCIe 장치가 DMA 메모리에 올바른 주소를 사용하고 있는지 확인하십시오. 하나의 주소 만 언급하지만 사용자 및 커널 공간에있는 DMA 메모리의 주소는 PCIe 버스에서 볼 때 DMA 메모리의 주소와 다를 수 있습니다.

DMA 메모리를 할당하는 방법을 말하지 않았으며 몇 가지 다른 방법이 있습니다. 예를 들어 다음 호출을 사용하여 DMA 메모리를 가져 오는 경우 dma_addr_t는 PCIe 장치에서 사용할 주소 입니다.

void *pci_alloc_consistent(struct pci_dev *dev, size_t size, 
       dma_addr_t *dma_handle); 
0

커널 구성의 CONFIG_FSL_DMA 부분을 정의하여 DMA 드라이버를 컴파일했는지 확인하십시오. 또한 장치 트리에 DMA 장치에 대한 항목이 있는지 확인하십시오.