インテル® Agilex™ ハード・プロセッサー・システムのテクニカル・リファレンス・マニュアル

ID 683567
日付 1/19/2023
Public
ドキュメント目次

15.4.9. データのDMA

DMAは、最小限のホストの関与を伴いデータを転送します。ソフトウェアでは、MAP10コマンドでデータのDMAを開始します。

dmaグループのdma_enableレジスターのflagビットは、データのDMA機能を有効にします。NANDフラッシュ・コントローラーに保留中のアクティブなトランザクションがない場合にのみ、この機能を有効または無効にします。DMAが有効になっている場合、フラッシュ・コントローラーは、DMAマスター・インターフェイスを介してMAP10コマンドごとに1つのDMA転送を開始します。DMAが無効になっている場合は、フラッシュ・コントローラーでの操作はすべて、メモリーマッピングされたnanddata領域を介して行われます。

NANDフラッシュ・コントローラーは、最大4つの未処理のDMAコマンドをサポートし、それを超えるDMAコマンドを無視します。ソフトウェアが4つを超える未処理のDMAコマンドを発行した場合、フラッシュ・コントローラーは、unsup_cmd割り込みを発行します。DMAコマンドを受信すると、フラッシュ・コントローラーはコマンドのシーケンス化を行い、DMAコマンドで要求されているページ数を転送します。DMAマスターは、プログラムされているバースト長のチャンクでシステムメモリーからページデータを読み書きします。DMAコマンドが完了すると、フラッシュ・コントローラーは割り込みを発行し、次にキューに入っているDMAコマンドの処理を開始します。

パイプライン化により、NANDフラッシュ・コントローラーでは、同じタイプの連続するコマンドを実行すると同時にパフォーマンスを最適化することができます。

特定の制約下では、フラッシュ・コントローラーがDMAトランザクションを処理している間に、DMA以外のMAP10コマンドをNANDフラッシュ・コントローラーに発行することができます。MAP00、MAP01、およびMAP11コマンドは、DMAモードが有効になっている際に発行することはできません。これは、フラッシュ・コントローラーが非常に密結合で高性能のデータ転送モードで動作しているためです。不適切なコマンド (MAP00、MAP01、またはMAP11) を受信すると、フラッシュ・コントローラーはunsup_cmd割り込みを発行し、違反しているコマンドについてホストに通知します。

DMAを使用している際は、次の点を考慮します。

  • データのDMAコマンドは、MAP10コマンドの一種です。このコマンドは、フラッシュ・コントローラー・コアではなく、データのDMAエンジンによって解釈されます。
  • DMAが有効になっている場合、MAP01、MAP00、またはMAP11コマンドを使用することはできません。
  • フラッシュ・コントローラーでデータのDMAコマンドを受け入れる前に、dmaグループのdma_enableレジスターのflagビットを設定し、DMAを有効にする必要があります。
  • DMAを有効にしてDMAエンジンでデータの転送を開始する際は、ECCを有効にして、データ転送と同時に必要なデータ訂正を行うことができます。
  • MAP10コマンドは、MAP01コマンドと同様のデータの移動とともに使用されます。
  • データのDMAコマンドと、MAP10のパイプライン読み出しおよび書き込みコマンドを除き、消去、ロック、ロック解除、コピーバックなどの他のMAP10コマンドはすべて、フラッシュ・コントローラーに転送されます。
  • いかなる場合でも、未処理のデータのDMAコマンドは、最大4つまでフラッシュ・コントローラーで処理することができます。複数ページの操作時に、DMA転送では、フラッシュのブロック境界を超えてはいけません。これに従わない場合、フラッシュ・コントローラーはサポートされていないコマンド (unsup_cmd) 割り込みを生成し、コマンドをドロップします。
  • データのDMAコマンドは通常、ホストメモリー内の関連するポインターを使用する複数ページの読み出しおよび書き込みコマンドです。複数ページのデータは、ホストメモリーとの間でホストメモリーのポインターから開始して転送されます。
  • データのDMAでは、dmaグループのflash_burst_lengthレジスターを使用して、インターコネクトで駆動するバースト長の値を決定します。データのDMAハードウェアは、インターコネクトの境界交差制約を考慮しません。ホストは開始ホストアドレスを初期化し、DMAマスターのバースト・トランザクションが4KBの境界を超えないようにする必要があります。

DMAトランザクションを開始する方法には、マルチトランザクションDMAコマンドとバーストDMAコマンドの2つがあります。