記事 ID: 000088369 コンテンツタイプ: トラブルシューティング 最終改訂日: 2023/04/13

インテル® Stratix® 10 SoC FPGAまたは インテル Agilex 7 SoC FPGAを使用する場合、test_buf_size®を大きな値に変更した場合、dmatest はなぜ失敗しますか?

環境

    インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
BUILT IN - ARTICLE INTRO SECOND COMPONENT
詳細

インテル® Stratix® 10 SoC FPGAまたは® インテル Agilex 7 SoC FPGAで DMAC 向け dmatest を実行すると、 test_buf_size を大きな値に変更するときに次のエラーが表示される場合があります ( test_buf_size のデフォルト値は 16 KB):

root@agilex:~# エコー 1 > /sys/module/dmatest/parameters/run

[ 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: DMA マスク ffffffff バスマスク 0 のオーバーフロー 0x00000003ebc00000+2097152

[ 149.983622] ------------[ ここでカット ]------------

解決方法

根本的な原因は、DMAC 330 のアドレス幅は 32 ビットのみです。SWIOTLB のデフォルトのバッファーサイズでは、DMAC 330 が DDR の全範囲にアクセスするには十分ではありません。

この問題を回避するには、次のいずれかの解決方法を使用できます。

  1. 構成 Linux は、最初の 2GB の DDR のみを使用します。DMAC は 32 ビット幅アドレスで 2 GB メモリー範囲にアクセスできるため、SWIOTLB バッファーを増やす必要はありません。
  2. カーネルソースと U-boot コマンドラインを変更して、SWIOTLB バッファーを大きくします。

/include/linux/swiotlb.h で 、IO_TLB_SEGSIZE を大きな数字に変更します (power of2 にする必要があります)。例えば、 #define IO_TLB_SEGSIZE 1024

U-boot 環境を変更して、カスタマイズされた swiotlb の値を追加します。例えば、 setenv bootargs earlycon console=ttyPS0,115200 swiotlb=32768

関連製品

本記事の適用対象: 2 製品

インテル® Agilex™ FPGA & SoC FPGA
インテル® Stratix® 10 FPGA & SoC FPGA

1

このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。このコンテンツはお客様の便宜と一般的な情報のみを目的として提供されており、情報の正確さと完全性を保証するものではありません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。