[Suzaku:00321] Re: io_block_mapping と ioremap について

Yasushi SHOJI email@hidden
2005年 6月 16日 (木) 21:28:26 JST


At Thu, 16 Jun 2005 20:19:02 +0900,
Masaki Minobe wrote:
[...]
> io_block_mapping と ioremap についてです.
> 
> 現在ioremapでGPIOなど各コアの物理アドレスを仮想アドレスに
> マッピングしていて,その後writelなどで出力を行っています.
> ここではoutlなどは使えずアクセスエラーがおきます.

outl(writelの方が良いかも; outは x86系の instructionから取られた名前な
ので; まぁ同じなんですけどね)は32bit用なので、coreが 32bitに対応してい
れば動くかと思います。

access errorってことは、メモリー保護違反ですか?

> MACなどはio_block_mapping割り当てられていて,
> 出力にはoutwなどが使われているように見受けられますが,
> これらはどう違うのでしょうか?

outwは 16bit用です。

> 大きな空間を割り当てる時や初期から割り当ている時は
> io_block_mappingなどがされているのでしょうか?

io_block_mappingは ppc固有のものなので、driverなどではお勧めではありま
せん。

> モジュール作成する時はioremapを使ってwritelなどで出力するのでしょうか?

そうですね。ioremapで mapしてから readlや writelなどを使います。

> 後Endian問題についてです.
> writelなどで出力する際,MicroBlazeの時と違いSwapしなければ正常に
> 入出力されません.
> <suzaku_smc.h>でもそれが見受けられます.SUZAKUのPowerPCはBigEndianで
> 動いていると思っているのですが,この辺はどのようになっているでしょうか?

writel/readlは本当はlittle endianの device(PCIとか)用です。ところが
uclinux系 (microblazeやm68knommuなど)はそのまま big-endianで accessし
ています。

2.6系では readw_be()など big-endian用の access methodも用意されたので
すが、2.4系ではまだ混乱状態のままです。2.4系では raw_readw()など raw_
系のものを使ってください。
--
        yashi



suzaku メーリングリストの案内