Lorsque vous exécutez dmatest pour DMAC dans Intel® Stratix® FPGA SoC 10 ou Intel Agilex® FPGA SoC 7, il est possible que vous trouviez l’erreur suivante lors de la modification du test_buf_size vers une valeur supérieure (la valeur par défaut de test_buf_size est de 16 Ko) :
root@agilex:~# > /sys/module/dmatest/parameters/run
[149.931113] plus dmatest : aucun canal configuré, continuez avec les
[ 149.937236] plus dmatest : Ajout de 1 thread à l’aide de dma0chan0
[ 149.942349] dmatest : a commencé 1 threads à l’aide de dma0chan0
root@agilex:~# [ 149.963288] dma-pl330 ffda0000.pdma : swiotlb buffer est complet (sz : 2097152 octets), total 32768 (emplacements), utilisé 1024 (emplacements)
[ 149.974096] dma-pl330 ffda0000.pdma : dépassement 0x00000003ebc00000+2097152 du masque DMA masque ffffffff bus masque 0
[ 149.983622] ------------ [ coupé ici ] ------------
La cause principale est que la largeur d’adresse DMAC 330 n’est que de 32 bits ; la taille de la mémoire tampon par défaut SWIOTLB n’est pas suffisante pour que DMAC 330 accède à toute la gamme de DDR.
Pour contourner ce problème, vous pouvez utiliser une des solutions suivantes :
- Configurer Linux n’utilisera que les 2 premiers Go de DDR ; DMAC peut accéder à la plage de mémoire de 2 Go avec une adresse largeur de 32 bits afin que la mémoire tampon SWIOTLB n’est pas nécessaire pour augmenter.
- Modifiez la source du noyau et la ligne de commande U-boot pour agrandir la mémoire tampon SWIOTLB :
Dans /include/linux/swiotlb.h, changez de IO_TLB_SEGSIZE à un plus grand nombre (devrait être une puissance de 2) ; par exemple, #define IO_TLB_SEGSIZE 1024
Modifiez l’environnement U-boot pour ajouter de la valeur swiotlb personnalisée ; par exemple, setenv bootargs earlycon console=ttyPS0,115200 swiotlb=32768