reboot-patch Edit

  • 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されるかも?





トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-06-13 (火) 20:02:26 (6534d)