Bei der Ausführung von dmatest für D STANDBY in Intel® Stratix® 10 SoC-FPGA oder Intel Agilex® 7 SoC-FPGA wird der folgende Fehler angezeigt, wenn die test_buf_size auf einen größeren Wert geändert wird (der Standardwert von test_buf_size beträgt 16 KB):
root@agilex:~# echo 1 > /sys/module/dmatest/parameters/run
[ 149.931113] dmatest: Keine Kanäle konfiguriert, mit beliebigen fortfahren
[ 149.937236] dmatest: 1 Threads mit dma0chan0 hinzugefügt
[ 149.942349] dmatest: 1 Threads mit dma0chan0 gestartet
root@agilex:~# [ 149.963288] dma-pl330 ffda0000.pdma: swiotlb-Puffer ist voll (2097152 Byte), insgesamt 32768 (Steckplätze), verwendet 1024 (Steckplätze)
[ 149.974096] dma-pl330 ffda0000.pdma: overflow 0x00000003ebc00000+2097152 der DMA-Mask ffffffffff bus mask 0
[ 149.983622] ------------[ hier durchtrennt ]------------
Die Ursache ist, dass DSDS 330 nur eine 32-Bit-Adressbreite hat; die Standardpuffergröße SWIOTLB reicht für DSDS 330 nicht aus, um auf die gesamte Ddr-Palette zuzugreifen.
Um dieses Problem zu beheben, können Sie eine der folgenden Lösungen verwenden:
- Konfigurieren Linux verwendet nur die ersten 2 GB DDR; D kann auf den 2-GB-Speicherbereich mit einer Adresse mit 32-Bit-Breite zugreifen, damit der SWIOTLB-Puffer nicht erhöht werden muss.
- Ändern Sie die Kernel-Quelle und die U-Boot-Befehlszeile, um den SWIOTLB-Puffer größer zu machen:
Ändern Sie in /include/linux/swiotlb.h IO_TLB_SEGSIZE in eine größere Zahl (sollte eine Leistung von2 sein); zum Beispiel #define IO_TLB_SEGSIZE 1024
Ändern Sie die U-Boot-Umgebung, um einen angepassten Swiotlb-Wert hinzuzufügen; zum Beispiel setenv bootargs earlycon console=ttyPS0,115200 swiotlb=32768