(toppers-users 2131) Re: SH-3(SH7727)での100MHz超の

ykominami ykominami @ nifty.com
2005年 9月 17日 (土) 09:29:41 JST


小南と申します。
私が使用しているのはSH7727で、ボードはMS7727CP01、使用しているカーネルは
JSP1.4.1またはFI4、開発環境はGNUです。
内部クロックを144MHzにして試したことはありませんので、アドバイスというよ
りは、気になる点の指摘です。

On Fri, 16 Sep 2005 12:22:44 +0900
toshiaki.mizutani @ brother.co.jp wrote:

> 皆様、はじめまして。水谷と申します。
 
> SH-3 SH7727(HD6417727F160)上にTOPPERS/JSP1.3カーネルを載せて、
> 独自開発のボード上で使用させていただいています。
 
> SH7727を内部クロック96MHzで正常動作させることは出来たのですが、
> これを144MHzで動作させることができずに苦戦しています。
> 恐縮ながら、解決の糸口を見つけたく質問させていただきます。
 
> Web上のSH7727のターゲットシステムのページに載っているCPUボード
> (MS7727CP01)は内部動作周波数が最大96MHzですので、HD6417727F160の
> 144MHzでの動作はサポート外な気がしますが、タイマ割り込みさえ正確に
> 入れることが出来ていればカーネルはクロック依存はしないように
> 理解しています。

> カーネル起動後に待ち系のシステムコール(dly_tsk()など)を使ったり、
> 複数のタスクを起動させたあたりから、不規則にCPU例外が発生して
> しまいます。
> 内部クロックが96MHzのときでも144MHzのときでも周辺クロック
> (とバスクロック)が同じクロックになるように設定しているのですが、
> 144MHzのときだけ動作しません。
> (ただし、キャッシュをオフにすると動作します)

> カーネル起動前に動作させているプログラムや、カーネル起動直後に
> システムコールを使用しないプログラムを動かすとは正常動作しますので、
> CPUのレジスタ設定に間違いは無いと思っています。
> また、(印加している電圧など)ハードウェア面でも問題が無いとしたら、
> 他にどのような原因が考えられるでしょうか?

カーネルのターゲット非依存部には、タイムティックの値を正確に設定する
必要が有りますが、その動作はCPUの動作クロックには依存しません。
またSH3のターゲット依存部も、私の理解している限り動作クロックに依存
していません。

CPUの動作条件の違いが動作クロックだけであるならば、カーネルと言うプログ
ラムよりも、CPUがプログラムを正常に実行できるようにバスステートコント
ローラ(BSC)などが適切に初期化されていない可能性の方が大きいと思います。

JSPのスタートアップモジュール(config/sh3/start.S)での主な処理はキャッシュ
コントローラの設定、システムレジスタの設定、bssの初期化です。
カーネルのエントリーポイントを呼び出す前に、上記以外のCPUに対する初期化が
ローダや、デバッガや、ICEなどにより適切に行われていなければなりません。


次に気になる点は、キャッシュをオフにすると動作するということです。
問題となる現象は、キャッシュオンの状態でカーネルを呼び出した後に発生する
のでしょうか。
そうであれば、常にキャッシュオフの状態でカーネルを呼び出すべきだと思い
ます。
なぜならJSPのSH3/SH4のターゲット依存部のスタートアップモジュールを見る
限り、キャッシュオフの状態で呼ばれることを前提にしていると考えられるか
らです。

具体的理由は以下の通りです。
カーネルのスタートアップモジュールではキャッシュコントローラの設定を行って
います。
カーネルがP0またはP1領域のようにキャッシングされるエリアにロードされ、かつ
キャッシュが有効な状態でこれが行われると、CPUの動作が高い確率で不安定にな
ります。
これは私自身も体験し、他のMLで原因の指摘を受けたことです。
またSH3のハードウェアマニュアルのキャッシュコントロールの章でも、注意事項
として挙げられています。

対策としては、以下が考えられます。
1.キャッシュオフの状態で、カーネルを呼び出す

どうしてもキャッシュオンの状態でカーネルを呼び出したいならば、以下の手段
が考えられます。
2.キャッシュオンの状態で、キャッシュコントローラを操作しない(ソース上で
  コメントアウトする)
3.キャッシュオンの状態で、P2のようなキャッシングされない領域にキャッシュ
  コントローラを操作するコードを配置して実行するようにソースを変更する
  SH3/4では異なるアドレスが同一の物理メモリ領域を指しているので、例えば
  キャッシュコントローラ操作ルーチンのアドレスの上位ビットを付け替えて、P2
  領域に存在するサブルーチンとしてコールすることが出来ます。

キャッシュコントローラの操作が原因の場合は、常に動作がおかしいというこでも
なく、正常に動作しているように振る舞う場合もあるので、気がつきにくいかと思
います。

その他に_hardware_init_hook、_software_init_hookを有効にして呼び出している
のならば、これらも適切に初期化を行っているか確認する必要が有ると思います。

------------------------
小南 ykominami @ nifty.com