GENMAIボードでのブートについて2

Hiroです。

 

以前、シリアルフラッシュからのブート起動が出来ないことを質問させていただきました。

その時点では解決したのですが、また問題が発生しましたので質問します。

ブートファイルを書き換えるとシリアルフラッシュからの起動ができなくなります。

ブートファイルはICEで書き込んでいます。

シリアル通信によるPC画面上での確認では、一切動いてない状態です(メッセージが一切出力されません)。

一度NORフラッシュから(BOOT_MODE0で)起動を掛けると、それ以降はシリアルフラッシュから(BOOT_MODE3で)

の起動が可能となります。

ブートファイルの書き換え時に環境設定を消去したのではないかと考えたのですが、

データは残っていますし、Kernaelイメージをシリアルフラッシュに書き込んでいるのですが

NORフラッシュ起動時にもKernelイメージをシリアルフラッシュから読み込んでいるので

環境設定は残っているようです。

NORフラッシュからの起動以降は、シリアルフラッシュからの起動が可能になることから

ブート処理の中で何かを設定することで起動可能になっていると思いますが、

ブートファイルの書き換えでその設定を壊すとも考えづらいと思います。

ブートファイル書き換え後に、シリアルフラッシュから(BOOT_MODE3で)起動させるには

何をすればよいかをお教えください。

 

以上

  • わわいさん。
    ブートプログラムは、GENMAIのBSPパッケージ「RZLSP-V3.0.0」を使用しております。
    ブートは「u-boot-2013.04」です。
    自作のブートプログラムではありません。
    他にご提供すべき情報が有りましたら、ご指示下さい。

    以上
  • pecteilisさん。
    >こちらで試した限り、再現しない(特に問題無く u-boot が立ち上がる)ので、
     そちらでは問題ないとのことですの、こちらのボードの設定をお伝えしておきます。
     「r20ut2596jj_r7s72100evum.pdf」で示されているJP、SWで初期値以外は以下の通りです。
     JP5=1-2、JP8=1-2、SW1-1:1-3:1-4=OFF

     JP5とSW1-4は初期値でも実施しましたが、動作に変わりはありません。

    以上
  • Hiro さん

    とりあえず、時間の都合で、こちらの投稿から。
    > >こちらで試した限り、再現しない(特に問題無く u-boot が立ち上がる)ので、
    >  そちらでは問題ないとのことですの、こちらのボードの設定をお伝えしておきます。
    >  「r20ut2596jj_r7s72100evum.pdf」で示されているJP、SWで初期値以外は以下の通りです。
    >  JP5=1-2、JP8=1-2、SW1-1:1-3:1-4=OFF

    >  JP5とSW1-4は初期値でも実施しましたが、動作に変わりはありません。

    ご連絡、有難うございます。

    ジャンパ等の設定は、BSPに含まれていたリリース通知の「4-1.DIPSW,ジャンパの設定」に
    従って、行ってください。上記の変更は、何か意図があってのものでしょうか?

    JP5、JP8 の設定は、NORフラッシュを使用する場合、不適当な設定です。
    現状、
    ・ シリアルフラッシュメモリ3は不使用(SPBSSL_1がL)、
    ・ NORフラッシュメモリは、先頭から1MB未満のみを使用(A21がL)
    ・ SW1-3=OFF固定(CS0#がL)
    などの条件が揃ったため、(多分)偶然、動作していますが、Cortex-A9 のプリフェッチや
    投機実行の影響で誤動作しても不思議ではありません。

    また、SW1-4の設定では、カーネルが管理する時間が、計算上4%程度、遅れます。

    それはさておき、上の Hiro さんの設定でも、当方の GENMAI では、u-boot は
    シリアルフラッシュから起動しました。

  • Hiroです。
    最初の掲示で

    >シリアル通信によるPC画面上での確認では、一切動いてない状態です(メッセージが一切出力されません)。

    としたように、シリアル通信によるPC画面上にメッセージが出力されない=起動しない、で考えていました。
    もしかしたら、シリアル通信が出来ていないだけかと思ってもいましたので、ブートのポート設定時にP4_10と
    P4_11を出力ポートの設定に変更してみました。
    結果、LEDが点灯しましたので、ブートプログラムの少なくともレジスタ設定は走っているようです。
    この情報から何か探れることは有りますでしょうか。

    以上
  • Hiro さん

    丁度、良いタイミングでした。上の

    > ブートのポート設定時にP4_10とP4_11を出力ポートの設定に変更してみました。

    は、include/configs/rskrza1.h の中で定義している値を変更したのだと思います。

    それは、変更したままで、更に、board/renesas/rskrza1/lowlevel_init.S の赤字の
    部分(ポート4の設定部分)を青字の部分(ポート9の設定部分) の後ろに移動したブート
    プログラムで、同じことをしてみていただけますか? ♯ 最初の数字は、行番号です。

    点灯しないことが私の期待なのですが。

    100 write16 PM3, PM3_S
    101 write16 PIBC3, PIBC3_S
    102
    103 /* Port4 Control register Reset */
    104 write16 PIBC4, PIBC4_D
    105 write16 PBDC4, PBDC4_D
    106 write16 PM4, PM4_D
    107 write16 PMC4, PMC4_D
    108 write16 PIPC4, PIPC4_D
    109
    110 /* Port4 Control register Set */
    111 write16 PBDC4, PBDC4_S
    112 write16 PFC4, PFC4_S
    113 write16 PFCE4, PFCE4_S
    114 write16 PFCAE4, PFCAE4_S
    115 write16 PIPC4, PIPC4_S
    116 write16 PMC4, PMC4_S
    117 write16 P4, P4_S
    118 write16 PM4, PM4_S
    119 write16 PIBC4, PIBC4_S
    120
    121 /* Port5 Control register Reset */
    122 write16 PIBC5, PIBC5_D
    123 write16 PBDC5, PBDC5_D

    (途中、略)

    190 write16 PM8, PM8_S
    191 write16 PIBC8, PIBC8_S
    192
    193 /* Port9 Control register Reset */
    194 write16 PIBC9, PIBC9_D
    195 write16 PBDC9, PBDC9_D
    196 write16 PM9, PM9_D
    197 write16 PMC9, PMC9_D
    198 write16 PIPC9, PIPC9_D
    199
    200 /* Port9 Control register Set */
    201 write16 PBDC9, PBDC9_S
    202 write16 PFC9, PFC9_S
    203 write16 PFCE9, PFCE9_S
    204 write16 PFCAE9, PFCAE9_S
    205 write16 PIPC9, PIPC9_S
    206 write16 PMC9, PMC9_S
    207 write16 P9, P9_S
    208 write16 PM9, PM9_S
    209 write16 PIBC9, PIBC9_S
    210
    211 /* Port10 Control register Reset */
    212 write16 PIBC10, PIBC10_D
    213 write16 PBDC10, PBDC10_D

  • Hiroです。
    >> ブートのポート設定時にP4_10とP4_11を出力ポートの設定に変更してみました。
    >は、include/configs/rskrza1.h の中で定義している値を変更したのだと思います。
    PM4_S:0xffff→0xf3ff としました。

    ご指示の通り、Port4の設定をPort9の設定の後に移動させたところ、期待されたとおりにLEDは点灯しませんでした。が、PC画面上には何も表示されません。
    この後の対応をお聞かせください。

    以上
  • Hiroさん

    > ご指示の通り、Port4の設定をPort9の設定の後に移動させたところ、
    > 期待されたとおりにLEDは点灯しませんでした。が、PC画面上には何も
    > 表示されません。

    PC画面上に何も表示されない(言い換えれば、ポート4の設定箇所の前で
    暴走するので、ポート4の設定箇所以降は、実行されない)ことを含めて、
    期待通りです。

    Hiro さんに幾つかの実験をお願いし、結果を戴きましたが、現時点では、
    未だ、辻褄が合わない結果があります。予め、ご承知ください。

    ----
    今回の問題は、u-boot の不具合で、
    u-boot がシリアルフラッシュから命令などを読み出しながら実行している
    最中に、シリアルフラッシュとの接続に使用している端子(ポート9の端子)
    の設定を変更(初期化)しているために、命令などが正しく読み出せず、
    誤動作を起こしていると考えています。
    つまり、先のメールの青色部分に問題があります。

    ただ、私の所で不再現であったり、Hiroさんの所で NOR フラッシュの
    u-boot を一回実行すると不再現になったりするように、暴走するか否かは、
    ボードの個体差やその時の状態にも依存するようです。

    で、対策ですが、最小限の変更で済ませるには、青色部分の処理を、
    ・ ブートモード0で起動した場合には、現状と同じ処理を、
    ・ ブートモード3で起動した場合には、次の4本の兼用端子の設定は
    変えずに、残りの端子は、現状と同じ処理を、
    それぞれ行うように、include/configs/rskrza1.h の中で定義している、
    ポート9関連の値を調整してください。
    ・ P9_2/SPBCLK_0
    ・ P9_3/SPBSSL_0
    ・ P9_4/SPBIO00_0
    ・ P9_5/SPBIO10_0

    注意する点は、ブートモード3で起動した場合、RZ/A1 内蔵 ROM の F/W が
    上記の4端子を設定して、シリアルフラッシュからの読み出しが可能な状態
    にし、0x18000000 番地から始まる u-boot にジャンプするわけですから、
    上で言っている「次の4本の兼用端子の設定は変えずに」の「設定」とは、
    リセット直後の設定ではなく、0x18000000 番地到達時点の設定であるという
    ことです。

    具体的には、

    355 #define PM8_S 0xffff
    356 #define PIBC8_S 0x0000
    357
    358 /* Port9 Control register Reset */
    359 #if !defined(CONFIG_BOOT_MODE0)
    360 #define PIBC9_D 0x0000
    361 #define PBDC9_D 0x0000
    362 #define PM9_D 0xff03 ★
    363 #define PMC9_D 0x003c
    364 #define PIPC9_D 0x003c
    365 #else
    366 #define PIBC9_D 0x0000
    367 #define PBDC9_D 0x0000
    368 #define PM9_D 0xffff
    369 #define PMC9_D 0x0003

    の★の所の値を 0xff03 から 0xffff に変更すれば良さそうですが、確認は
    していません。

  • Hiroです。
    ご指示の通り、
    #define PM9_D 0xff03 ⇒ 0xffff
    にしたところ、シリアルフラッシュからの起動が出来ました。
    Pecteilisさんのおっしゃる通り、NORフラッシュ起動後には起動できる理由が説明付きませんが、
    何とか動いたので、このまま進めたいと思います。
    本題とは異なりますが、本掲示の中で1点気になったことが有りますので質問させてください。

    ボードの設定についてご報告させていただいたとき、
    >また、SW1-4の設定では、カーネルが管理する時間が、計算上4%程度、遅れます。
    とのご説明が有りましたが、4%の遅れを踏襲する技は有るのでしょうか。
    設定の方法などが有りましたら、ご教示願います。

    以上
  • わわいさん。
    Hiroです。

    わわいさんのおっしゃる通り、ブートプログラムに問題が有ったようです。提供されているBSPだったことと、
    発生する場合の状況から、問題ないように思っていました。
    色々なご助言ありがとうございました。
    本件は、これで完了とします。

    以上
  • Hiro さん

    > #define PM9_D 0xff03 ⇒ 0xffff
    > にしたところ、シリアルフラッシュからの起動が出来ました。

    良かったです。
    ソースを見る限り、この部分を作成した人も、シリアルフラッシュからの読み出しに
    使用している4本の兼用端子の設定は変えてはいけない(誤動作の危険がある)、と
    いうことを認識して値を定義しているようですが、偶々、上の1箇所を間違え、その後、
    その人の環境では、特に問題なく動作してしたため間違いに気付かなかったのでしょう。

    > >また、SW1-4の設定では、カーネルが管理する時間が、計算上4%程度、遅れます。
    > とのご説明が有りましたが、4%の遅れを踏襲する技は有るのでしょうか。
    > 設定の方法などが有りましたら、ご教示願います。

    誤変換?(踏襲?吸収?) で、ご質問が良く解りませんが、時間を正しくしたいなら、
    以前に申し上げた通り、

    | ジャンパ等の設定は、BSPに含まれていたリリース通知の「4-1.DIPSW,ジャンパの設定」に
    | 従って、行ってください。

    リリース通知に従った設定は、SW1-4=ON です。

    時間が遅れるのは、Hiro さんが SW1-4=OFF と異なる設定にして、RZ/A1 の入力クロックを
    切り替えているためです。