2013-08-04 2 views
0

Le moteur DMA ne répond pas correctement sur PowerPC linux. Lorsque mon périphérique PCIe envoie une demande de lecture/écriture à l'hôte, le délai d'attente se produit. J'ai 1 Go de RAM à la plage d'adresses inférieure. J'ai appelé les fonctions suivantesLe moteur DMA ne répond pas correctement sur PowerPC linux

pci_device_enable() 
pci_set_master() 

mémoire DMA est allouée à 0x0F00_0000 et je suis en mesure d'accéder à cette mémoire de l'espace utilisateur de l'hôte. Comment puis-je déboguer ce problème. Quelle pourrait être la raison?

Répondre

0

Veuillez vérifier si le périphérique PCIe utilise la bonne adresse pour la mémoire DMA. Vous ne mentionnez qu'une seule adresse, mais les adresses de la mémoire DMA dans l'espace utilisateur et noyau seront différentes de l'adresse de la mémoire DMA vue du bus PCIe.

Vous ne dites pas comment vous allouez la mémoire DMA et il existe plusieurs façons. Par exemple, si vous utilisez l'appel suivant pour obtenir la mémoire DMA, l'adresse dma_addr_t est l'adresse à utiliser dans le périphérique PCIe.

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

Vérifiez si vous avez défini une partie CONFIG_FSL_DMA de votre configuration du noyau pour compiler le pilote DMA. Assurez-vous également que l'arborescence de vos périphériques dispose d'une entrée pour le périphérique DMA sur puce.

Questions connexes