*reboot-patch [#h1a68e88]
-[[NetBSD/landisk:http://www.asahi-net.or.jp/~aw9k-nnk/n/landisk.html]] (Nonakaさんのサイト)より~
#pre{{
既知の問題
1. 正常にリブートができない。
現状では 0xa0000000 にジャンプしているだけなので、設定をカーネル起動前の状態に戻す、
もしくはリセットをかける必要がある。
}}
-上記問題を解決するパッチ~
LinuxSHのコードから拝借。~
#pre{{
--- sys/arch/sh3/sh3/sh3_machdep.c.orig 2005-04-26 00:02:07.000000000 +0900
+++ sys/arch/sh3/sh3/sh3_machdep.c 2005-08-22 00:01:51.000000000 +0900
@@ -745,8 +745,17 @@
_cpu_exception_suspend();
_reg_write_4(SH_(EXPEVT), EXPEVT_RESET_MANUAL);
+#if defined(SH4)
+/* SR.BL=1 and invoke address error to let CPU reset (manual reset) */
+ asm volatile("ldc %0, sr\n\t"
+ "mov.l @%1, %0"
+ :
+ : "r" (0x10000000), "r" (0x80000001));
+
+#else
goto *(u_int32_t *)0xa0000000;
/* NOTREACHED */
+#endif
while (1)
;
}
}}
-動作内容~
SR.BL==1状態で、アンアライメントアクセスを行い、~
マニュアルリセット例外を発生させ、CPUの内部状態を初期化する。~
(プログラムカウンタも0xa000000へ初期化されるため、自動的に概番地への分岐する。)~
~
-その他~
Nonakaさんサイドでも成功したようです。~
次バージョンでfixされるかも?~
~
~
#navi(NetBSD)