[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