[Suzaku:01575] Re: SZ410で32MBのDMAバッファ確保
Yasuhiko Ito
email@hidden
2009年 8月 7日 (金) 18:18:50 JST
菅野 様
ご回答いただき、ありがとうございます。
> 実際試したことはないので,使えるかどうかは分かりませんが,
> Linux Device Drivers, Third Edition (http://lwn.net/Kernel/LDD3/)
> に大きなメモリ領域の確保の仕方が載っています.
>
> Chapter 15, Memory Mapping and DMA, Allocating the DMA Buffer,
> Do-it-yourself allocation, page 443 によると,
> カーネル起動時に mem= オプションを付けると,カーネルは先頭アドレスから
> そのサイズのメモリのみを使用し,残りのメモリを残しておいてくれるようです.
>
> つまり mem=32M を起動時に指定し,
>
> dmabuf = ioremap(0x2000000 /* 32MB */, 0x2000000 /* 32MB */);
>
> とすれば,物理アドレス 0x2000000 以降の 32 MB を DMA 転送用の領域として
> 使用できそうです.
DMAバッファ確保の先頭アドレスが 0x0380 0000 以下にならず、
バッファのサイズは最大 8MB でした。 ご回答いただきました方法を利用すれば
所望の先頭アドレスを取得できそうですね。
ところが linux の起動オプションの設定方法が分からず、hermit-at の
コードを調べてみたところ linux コマンドにオプションを渡しているよう
なのですが、その方法が未だ分かりません。
恐れ入りますが設定法をご教授いただければ幸いです。
残りの問題は dma_alloc_coherent() の 16MB の mask を 32MB に拡張可能か
ですが、不可能ならご提示いただきました scatter/gather DMA の使用を
検討してみます。
伊藤
suzaku メーリングリストの案内