在 Intel® Stratix® 10 SoC FPGA 或 Intel Agilex® 7 SoC FPGA中執行 DMAC 時,您可能會在將 test_buf_size 變更為更大的值時發現以下錯誤( test_buf_size 預設值為 16 KB):
root@agilex:~# 回聲 1 > /sys/模組/dmatest/參數/執行
[ 149.931113] dmatest:未設定任何通道,繼續執行任何
[ 149.937236] dmatest:使用 dma0chan0 新增 1 執行緒
[ 149.942349] dmatest:使用 dma0chan0 開始 1 執行緒
root@agilex:~# [ 149.963288] dma-pl330 ffda0000.pdma:swiotlb 緩衝區已滿 (sz:2097152位元組),總計 32768 (插槽),使用 1024 (插槽)
[ 149.974096] dma-pl330 ffda0000.pdma:溢流0x00000003ebc00000+2097152 DMA 口罩 ffffff 匯流排口罩 0
[ 149.983622] ------------[在此剪下 ]------------
根本原因在於 DMAC 330 只有 32 位位址寬度;SWIOTLB 預設緩衝區大小不足以讓 DMAC 330 存取整個 DDR 範圍。
若要解決這個問題,您可以使用下列解決方案之一:
- 配置 Linux 僅使用前 2 GB 的 DDR;DMAC 可使用 32 位寬度位址存取 2 GB 記憶體範圍,因此不需要增加 SWIOTLB 緩衝區。
- 修改 核心來源和 U-boot 命令列,使 SWIOTLB 緩衝區更大:
在/包括/linux/swiotlb.h 中,請將 IO_TLB_SEGSIZE 變更為較大的數位 (應為 2 的功率);例如, #define IO_TLB_SEGSIZE 1024
變更 U-boot 環境以增加自訂的 swiotlb 值;例如, setenv bootargs earlycon 主控台=ttyPS0,115200 swiotlb=32768