SL-C3000一日目

まだOpenSSHとその設定のためのembeddedkonsoleしか入れてない。SL-C760も似たようなもんだったが。

iWMMXt


==== iwmmxt.c
main() { asm ("wzero wR0"); }

==== --
$ arm-linux-gcc-3.4.2 -mcpu=iwmmxt iwmmxt.c
$ ./a.out
illegal instruction

ちょっと焦った。iWMMXtのドキュメントを頭からじっくり読んで、コプロセッサCP0とCP1を有効にしないとSIGILLになりますよ、との記述を見つけて一安心。有効にすれば使えると考えてオーケー?

CP15って特権モードでなくてもいじれたっけ?無理だったらカーネルモジュールを書かないといかんな。カーネルソースまだ〜?(AA略

仮にコプロを有効したとして、Linuxカーネルがcontext switchの時にちゃんとiWMMXtレジスタを保存してくれるのかはちょっと疑問。

適当に

神木さんのメモリ速度測定のページが見たいのだけどサーバが落ちてる?

Intelのサイトって構造がごっつぅ解り辛いな……。IPPのiWMMXt版を落とすのに10分ぐらいかかった。

出来るかどうかわからない予定

  • mplayerのオーバレイ対応はカーネルソースの公開後に着手(LCDCのレジスタへアクセスする方法がわからんので)
  • それまでにiWMMXt対応をやってみる
  • SDLは機種判別まわりだけ適当にいじる。現状のコードはSL-C700しか出ていなかった時に書いたものなので、おかしいところが多すぎで触りたくない。やるならまた最初から。

Intelのドキュメントのメモ

iWMMXt使えるみたい

CP15のCPARレジスタにアクセスするモジュールを作って、CP0/CP1を有効にした後にiWMMXt命令を実行すると、SIGILLが発生することはなかった。

しかし、予想通りというか、サスペンド->レジュームすると強制的にCP0/CP1が無効になる。SIGCONTが送られるタイミングにもよるが、iWMMXtを使うソフトを実行している間はサスペンドが出来ないってわけだ。この様子だと標準ソフトウェアは一切iWMMXtを使っていないと思う。

こちらの方のソースをもとに作ったモジュール。insmod -f xscale_cpar.oすると/proc/xscale/CPARが作成されるので、echo 3 >/proc/xscale/CPARなどとすればiWMMXtが使えるようになる。

適当な推測とか

  • /dev/fb0によると、VRAMが2MB確保されている。ひょっとしてメインメモリからVRAMを確保せずに、VRAM専用のSDRAMが接続されている?(分解記事にはそれらしい記述が無かったから違うと思うが)
  • vmemを実行するとillegal instructionで落ちる。
  • QVGAモード時のフレームバッファの方向が変更されている。今まではパネル右下が原点になっていたが、今回はVGAモードと同じくパネル左下が原点になっている。
  • QVGAモードが存在するということは、やはり液晶パネル側の解像度を設定できるということ?それならついでにパネル左上を原点として設定できたらいいなぁ。