*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)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS