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

Re: news3400 expansion slot and NWB-231A/NWB-235A



<030510004946.M0127047@mirage.ceres.dti.ne.jp>の記事において
私は書きました。

> Lite2 のコードだと
> 	if (stat & INTST1_SCC) {
> 		scc_intr();
> 		if (saved_inten1 & *(u_char *)INTST1 & INTST1_SCC)
> 			scc_intr();
> 	}
> みたいなことしてるのでなにかあるのかなーと思ったんですが
> 同じようなコード入れても変わりませんでした。

ここで INTST1 のチェックをはずす(つまり INTST1_SCC が立ってたら
無条件に 2回割り込み処理ルーチンを呼ぶようにする)と
なんか固まらずまともに動くようにになりました。

同じように dev/zs_hb.c で
---
Index: dev/zs_hb.c
===================================================================
RCS file: /cvsroot/src/sys/arch/newsmips/dev/zs_hb.c,v
retrieving revision 1.12
diff -u -r1.12 zs_hb.c
--- dev/zs_hb.c	2003/05/09 13:36:41	1.12
+++ dev/zs_hb.c	2003/05/09 16:40:26
@@ -321,9 +321,16 @@
 zshard_hb(arg)
 	void *arg;
 {
+	int rv;
+
 	(void) *(volatile u_char *)SCCVECT;
+	rv = zshard(arg);
+
+	/* XXX news3400 sometimes losts zs interrupt */
+	if (rv)
+		zshard(arg);
 
-	return zshard(arg);
+	return rv;
 }
 
 /*
---
と zshard() が処理されたあともう一度 zshard() を呼ぶようにしても
止まらずにちゃんと動きます。

INTEN1 をクリアしている最中に割り込み要因が発生すると
INTEN1 をセットしても INTST1 がラッチされない、
みたいな感じですが、 zsc だけの問題なんですかねえ……
---
Izumi Tsutsui
tsutsui@ceres.dti.ne.jp