[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Cross compile (gcc-2.95.2 & binutils-2.9.1)



> pkgsrcのクロスコンパイラを使ってます。今日の朝、新しいtrap.cへの対応を
> したんですが、テストに使ったE-55では同じように、/sbin/initの前で止まっ
> てます。割り込み自体は入ってます。4/11頃のソース
> (trap.c,locore_mips1.S,locore_mips3.Sの変更が入る前)でもチェックしてみ
> たんですが、同じように止まっていたので、MIPS3まわりがやばいのかもと思っ
> てます。TX3912/3922については動いてます。
> 
> #久々にVRのテストをしたので、どの段階から動かなかったのかわかりません..

こちらでは例のハングアップ問題が解決してないので、いろいろ出遅れて
いて、まだ試していません。というわけで、想像ですが…

下記のような部分で、まだ MIPS_INT_MASK_5 を enable しているので、
timer interrupt (INT5) が、まだ入ることがあると思います。

・mips_idle: li	t0, (MIPS_INT_MASK | MIPS_SR_INT_IE)
・machdep.c: curpcb->pcb_context[11] = MIPS_INT_MASK | MIPS_SR_INT_IE; /* SR */
・spl0
・splnone()

もし、そうだとすると、昔の trap.c にあった下記のコードを、
vr.c:vr_intr() の先頭に入れると直るかもしれません。

#if defined(MIPS3) && defined(MIPS_INT_MASK_CLOCK)
	if ((mask & MIPS_INT_MASK_CLOCK) && CPUISMIPS3) {
		mips3_intr_cycle_count = mips3_cycle_count();
		/*
		 *  Writing a value to the Compare register,
		 *  as a side effect, clears the timer interrupt request.
		 */
		mips3_write_compare(mips3_intr_cycle_count + mips3_timer_delta);
	}
#endif

本当は、全部直して cpu.h の下記の定義もとっちゃいたいところですけど。
(あとちょいなので。)

/*
 *  VR4100: Internal timer causes hard interrupt 5.
 */
#define MIPS3_INTERNAL_TIMER_INTERRUPT
#define MIPS_INT_MASK_CLOCK	MIPS_INT_MASK_5
--
soda