2017-05-25 21 views
0

私は、PCIeバーのmmioスペースにアクセスする際のアライメントに関する基本的な疑問を持っています。アクセスされるアドレスはDWアライメントでなければならず、カウントはDWアラインメントでなければなりませんか?PCI mmioアクセスアライメントはどうですか?

私の知る限り、TLBのアドレスフィールドは下位2ビットを無視し、長さフィールドの単位もDWです。それは質問の上の意味ですか?はいですか?それ以外の場合、CPUはmmio空間に対してアライメントされていないアクセスを処理しますか?私は天気をアクセス違法かどうか下回るかを知りたい

: - READB(BAR0) - READB(BAR0 + 1) - READL(BAR0 + 1)のPCIe バスに何が起こるかトランザクション

アラインされていないmmioアクセスを発行する場合

答えて

0

TLPをより深く見ると、最初のバイトイネーブルと最後のバイトイネーブルのようなフィールドがあります。その目的は、DWの位置ずれを処理することです。それぞれ1番目と最後のDWからのどのバイトがマスクされているかを示します。最後のバイトイネーブルは、1 DWを超えるメモリアクセスでのみ使用されます。

例: オフセット0x3で1バイトを読み込もうとすると、最初のバイトイネーブルが0x4に設定されたオフセット0でDW読み込みに変換されます(1 DWアクセスであるためlast_beは0x0になります) 。データの補完は不要なバイトをマスクする必要があります。

別の例: オフセット1から1 DWを読み込もうとすると、最初のbeと最後のDWORDは1 DWの最初のバイトと2番目のDWの最後の3バイトを無視するように設定されています。

よろしくおねがいします。
Mateusz。

+0

ありがとう、それは私を助けました。例#2では、私は自分のPC上でいくつかの実験をしています。 DWORD境界を越えて読み取られる場合、私はreadl(bar0 + 2)のようないくつかのintersting値を取得します。いくつかのデバイスでは、最初のDWORDの循環シフトされた値を取得し、一部のデバイスはすべてのFFを返します。 devmem2ツールでレジスタを読みました。この結果は設計上のものか、デバイスだけがBEを扱うことができないのでしょうか? BEでは、デバイスはアライメントされていないアクセスを処理できるようです。私の質問maillist https://lkml.org/lkml/2017/5/28/89 –

+0

すべてのFFを返すデバイスは、そのメモリを読み込んだ時点でD3にはありませんか? – nowaqq

+0

私は確信しています。読み揃えアドレスであるため、FFではなく正しい値を返します。試したデバイスの1つに、Intel内蔵GPUがあります。 –

関連する問題