[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 メーリングリストの案内