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

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