reboot-patch †
- NetBSD/landisk (Nonakaさんのサイト)より
既知の問題
1. 正常にリブートができない。
現状では 0xa0000000 にジャンプしているだけなので、設定をカーネル起動前の状態に戻す、
もしくはリセットをかける必要がある。
- 上記問題を解決するパッチ
LinuxSHのコードから拝借。
--- 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されるかも?
|