ターゲット:R9A09G011(RZ/V2M)
u-bootのドライバを作成しております。
以下を参考にu-bootを作成してI2Cドライバを追加しようとしております。
https://github.com/renesas-rz/renesas-u-boot-cip/tree/v2018.09/rzg2
u-bootは、起動する状態です。
デバイスツリーのstatus = "disabled"をして起動するとI2Cのdevコマンドでprobを実行してくないのですが、
status = "okay"で設定すると同コマンドでprobは実行するのですが、その後、不正アクセスでリセットを繰り返します。
調べてみるdevのアドレスは取得できているのですが、dev_get_priv(dev)から取得できるデータが全て”0”でした。
おそらく設定が不足していると考えておりますが、以下が実装した手順ですが、何か不足している手順がありますでしょうか?
①デバイスツリーへi2cのノードの追加(rcar_i2c.cを参考に作成とgitのdocを見ながら作成) ②defconfigへCONFIG_SYS_I2C_RZV2の定義を追加
③KconfigとMakefileに定義追加(追加したドライバソース部分)
④ドライバーソースを追加 rcar_i2c.cを参考に作成
以下の項目ついて確認されては如何でしょうか?・U-bootでクロック設定、端子設定を実施してますでしょうか?・デバイスツリーの情報がプローブ時に登録されてますでしょうか?・rcar向けのデバドラコードを使用しているようですが、ハードウェア設定をv2m向けに更新してますでしょうか?
ご連絡ありがとうございます。再度、見直し確認して、返信が遅くなりました。
> ・U-bootでクロック設定、端子設定を実施してますでしょうか? ⇒こちらは設定しているつもりですが、以下認識で正しいでしょうか? デバイスツリーでclocksとしてpclkを入力にしています。 端子設定はデバイスツリー内では設定しておりません。 ここは、抜けいているかもしれません。 1つお聞きできればと思うのが、 デバイスツリー内で上記の端子を設定する方法があるのでしょうか? デバドラコード側でPFCのレジスタを設定して端子の設定するのが普通なのでしょうか?
> ・デバイスツリーの情報がプローブ時に登録されてますでしょうか? ⇒プローブ情報は、登録しております。 デバッカで止めてもデバイス情報が取れていることを確認しいたしました。
しかし、dev_get_priv(dev)でのclockとbaseの設定がされていことが分かりましたので 設定を追加した結果、不正アクセスでリセットすることはなくなりました。ありがとうございます。 ただ、エラーが返ってくるようになりました。 これも端子が設定されていない影響なのでしょうか? dm uclassを実行すると以下のように「 seq -1」となっております。 (I2C@XXのアドレスは、デバイスツリーで設定した値になっています。 @xxxxxxxxは、他のドライバからの連番から来る値が入っております。) dm uclass i2c@xx0x0000 @ xxxxxxxx, seq -1, (req 0)
> ・rcar向けのデバドラコードを使用しているようですが、ハードウェア設定をv2m向けに更新してますでしょうか?
⇒こちらは、RZV2M用に設定を編集致しましたので、更新出来ていると思います。
> PFCドライバはU-boot上実装していないため、デバイスツリーからの設定はできません。PFCドライバはU-boot上実装していないため、デバイスツリーからの設定はできません。> デバドラコード側でPFCのレジスタを設定して端子の設定するのが普通なのでしょうか?PFCやクロックはチップに対して依存する可能性が大きいため、汎用性を考えますと、ドライバ側から外されたほうが良いです。/board/renesas/rzv2m/rzv2m の関数board_early_init_fを参考にPFCやクロック設定を実施してみてはいかがでしょうか?> dm uclassを実行すると以下のように「 seq -1」となっております。 U-boot側のuclassとなりますので、[seq -1]が返却されていたとしても、PFCなどのHW制御に直結しておりません。作成されたデバイスツリー、ドライバをご確認願います。
前のアカウントが何故かログインできずに返信できなくなっていました。
上記の回答ありがとうございました。
/board/renesas/rzv2m/rzv2m の関数board_early_init_fを参考にして、正常に動作させることができました。
dm uclassで「 seq -1」になっていたところも、probeの処理で正しく値が返せていなかったのが原因とわかり、
こちらも解決致しました。
お礼が遅くなりましたが、ありがとうございました。