[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: patch for L-Router
From: Takao Shinohara <shin@sm.sony.co.jp>
Subject: Re: patch for L-Router
Date: Sun, 23 Dec 2001 18:15:28 +0900
> "TAKEMURA Shin" <takemura@netbsd.org> writes:
> > > vr/vr.c メモリのイメージをチェックすると32MB全部がprobe
> > > されなかったのでイメージを無視できるように修正
> >
> > これって、単純に bcmp の長さをもっと長くするとかでは回避できないの
> > でしょうか。
>
> 今試してみたところ、なぜか無変更でも32MBがprobeされました。なぜ32MB未満
> しかprobeされないことがあったのかは謎です。
128 バイトが同じだったらイメージとみなすというのはちょっと
きびしすぎると思うんですよ。
/* stop memory probing at first memory image */
- if (bcmp(page, (void *)MIPS_PHYS_TO_KSEG0(0), 128) == 0)
return;
/* stop memory probing at first memory image */
+ if (bcmp(page, (void *)MIPS_PHYS_TO_KSEG0(0), 128) == 0) {
+ volatile int *p = (volatile int *)MIPS_PHYS_TO_KSEG1(0);
+ *p = ~*p;
+ if (*(volatile int *)(page) == *p)
return;
+ }
とかなんとかしたらどうでしょうか?
> > (現実には L-Router の platid を指定するためには L-Router 専用の
> > コンフィグを書くのでカーネルも当然専用になってしまいますが、一般的
> > な方向としての話。)
>
> これはROMからのブートプログラムが手抜きでbootinfoを渡していないのが悪い
> と思われます。bootinfoをきちんと渡すようにすれば、カーネルのコンフィグファ
> イルにplatidを埋め込む必要はなくなります。
このへんはお任せしますので、cvs に入れて欲しいです。
hpcmips/stand/romboot とかでしょうか?
> > config の記述例
> > pciintr0 at vrgiu? platform LROUTER id PCI(0,0,0) port 1
> > pciintr1 at vrc4173giu? platform LROUTER id PCI(0,1,0) port 15
> わたしは「config_hookってなに?」という状態なので、実装方法については識
> 者にお任せします。
config_hook はカーネルないで、アドレスのかわりに整数(id)で手続き
を呼び出す機構です。単純に id でテーブルを検索して登録されている
関数を呼び出します。
上記の PCI(0,0,0) というマクロから bus, device, function を
エンコードした 32bit 整数を作成します。
pciintr は GPIO で割り込みを検出すると、この整数をキーにしてグローバル
なテーブルを検索して登録されている関数があればそれを呼び出します。
pciu では同じ整数をキーにしてハンドラを登録しておきます。
これで割り込みが発生するたびに GPIO 経由で pciu のハンドラが呼び出さ
れます。
コストがかかるので改良するといったのはこのグローバルなテーブルを
検索する処理です。あらかじめ一回だけ検索するようにしたいと思います。
(改良はあとまわしにしようとは思っています。とりあえず動くのが先)
で、実装はたんなるテーブルサーチなのでいいとして、上記の config
の記述例をみて、
1) config ファイルに記述するというアプローチは良さそうか
2) 必要な情報は bus, device, function の 3 つでいいのか
(私はまだ PCI バスいじりはじめなので良くわかっていません)
といった辺りのことはどうでしょうか?
Takemura