ID บทความ: 000088369 ประเภทข้อมูล: การแก้ไขปัญหา การตรวจสอบครั้งล่าสุด: 13/04/2023

ทําไม dmatest ถึงล้มเหลวเมื่อ test_buf_size เปลี่ยนเป็นค่าที่ใหญ่กว่าเมื่อ Intel® Stratix®FPGA SoC 10 ตัวหรือใช้ FPGA 7 SoC Intel Agilex®

สิ่งแวดล้อม

    Intel® Quartus® Prime Pro Edition
BUILT IN - ARTICLE INTRO SECOND COMPONENT
คำอธิบาย

เมื่อใช้งาน dmatest for DMAC ใน FPGA SoC Intel® Stratix® 10 หรือ Intel Agilex® 7 SoC FPGA คุณอาจพบข้อผิดพลาดต่อไปนี้เมื่อเปลี่ยน test_buf_size เป็นค่าที่มากกว่า (ค่าเริ่มต้นของ test_buf_size คือ 16 KB):

root@agilex:~# echo 1 > /sys/module/dmatest/parameters/run

[ 149.931113] dmatest: ไม่มีการกําหนดค่าแชนเนล ดําเนินการต่อกับทุก

[ 149.937236] dmatest: เพิ่ม 1 เธรดโดยใช้ dma0chan0

[ 149.942349] dmatest: เริ่มต้น 1 เธรดโดยใช้ dma0chan0

root@agilex:~# [ 149.963288] dma-pl330 ffda0000.pdma: swiotlb buffer เต็ม (sz: 2097152 ไบต์), รวม 32768 (ช่อง), ใช้ 1024 (ช่องเสียบ)

[ 149.974096] dma-pl330 ffda0000.pdma: overflow 0x00000003ebc00000+2097152 ของมาสก์ DMA ffffff bus mask 0

[ 149.983622] ------------[ ตัดที่นี่ ]------------

ความละเอียด

สาเหตุหลักคือ DMAC 330 มีความกว้างของแอดเดรส 32 บิตเท่านั้น ขนาดบัฟเฟอร์เริ่มต้น SWIOTLB ไม่เพียงพอสําหรับ DMAC 330 ในการเข้าถึง DDR ทั้งช่วง

ในการแก้ไขปัญหานี้ คุณสามารถใช้หนึ่งในวิธีแก้ปัญหาต่อไปนี้:

  1. ตั้ง ค่า คอน ฟิก Linux เพื่อใช้ DDR 2 GB แรกเท่านั้น DMAC สามารถเข้าถึงช่วงหน่วยความจํา 2 GB ด้วยแอดเดรสที่มีความกว้าง 32 บิต จึงไม่จําเป็นต้องเพิ่มบัฟเฟอร์ SWIOTLB
  2. ปรับเปลี่ยน แหล่งเคอร์เนลและบรรทัดคําสั่ง U-boot เพื่อทําให้บัฟเฟอร์ SWIOTLB ใหญ่ขึ้น:

ใน /include/linux/swiotlb.h เปลี่ยน IO_TLB_SEGSIZE เป็นตัวเลขที่ใหญ่กว่า (ควรเป็นพลังของ 2) ตัวอย่างเช่น #define IO_TLB_SEGSIZE 1024

เปลี่ยนสภาพแวดล้อม U-boot เพื่อเพิ่มมูลค่า Swiotlb ที่กําหนดเอง ตัวอย่างเช่น setenv bootargs earlycon console=ttyPS0,115200 swiotlb=32768

ผลิตภัณฑ์ที่เกี่ยวข้อง

บทความนี้จะนำไปใช้กับ 2 ผลิตภัณฑ์

เอฟพีจีเอและเอฟพีจีเอ SoC Intel® Agilex™ 7
Intel® Stratix® 10 FPGA และ SoC FPGA

1

เนื้อหาในหน้านี้เป็นการผสมผสานระหว่างการแปลเนื้อหาต้นฉบับภาษาอังกฤษโดยมนุษย์และคอมพิวเตอร์ เนื้อหานี้จัดทำขึ้นเพื่อความสะดวกของคุณและเพื่อเป็นข้อมูลทั่วไปเท่านั้นและไม่ควรอ้างอิงว่าสมบูรณ์หรือถูกต้อง หากมีความขัดแย้งใด ๆ ระหว่างเวอร์ชันภาษาอังกฤษของหน้านี้กับคำแปล เวอร์ชันภาษาอังกฤษจะมีผลเหนือกว่าและควบคุม ดูเวอร์ชันภาษาอังกฤษของหน้านี้