2400557_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2400557_ja-JP

2400557_ja-JP

IMX95ブートカウント管理

こんにちは、

最近、imx95 19x19 EVKボードの開発に取り組んでいて、ディストリビューションのアップデート/リカバリーにブートカウント マネジメントの仕組みを実装したいと考えています。

TRMを調べてみたところ、GPR(汎用レジスタ)はBBNSM内にあり、SCMIプロトコル(M33上で動作するSMへのリクエスト)を介してアクセスできることがわかりました。u-bootでは、arch/arm/mach-imx/imx9/scmi/soc.cで親切にAPIを用意しており、scmi_set_bbnsm_gpr scmi_get_bbnsm_gpr bootcount_store()/_load()を問題なく実装できました。

しかし、カーネルにはそのようなAPIは存在しません!(成功した起動後にLinuxユーザー空間からブートカウントをリセットしたいと思っています。)

さらに、あなたのドキュメントでCyber Resilient Recovery Module(CRRM)を見かけたのですが、ディストリビューションアップデートのために自己管理のブートカウントが本当に必要かどうか疑問に思っています。

そこで、あなたに以下の質問があります。

  • なぜカーネル内でGPRアクセス用のSCMI APIをサポートしていないのですか?CRRMがGPRの一つを使っているからですか?
  • CRRMを使用する場合、ディストリビューションのアップデート管理にブートカウントを設けるのは理にかなっていますか?はいの場合、GPR以外でブートカウントを保存する場所として推奨される場所はありますか?(またはGPRにアクセスする他の方法など)

どんな回答でも大変ありがたく思います。

SoC: i.MX 95 (19x19 LPDDR5 EVK)
BSP: LF6.18.20_2.0.0

ありがとうございました。

アブデル

Re: IMX95 bootcount managment

こんにちは、 @Chaviraさん

貴重なご説明をありがとうございました。

GPRの使用は問題ありませんが、NXPのカーネル側でGPRアクセスを追加する公式ドライバはありますか?

カーネルソースのドライバ/ファームウェア/arm_scmi/ベンダーズ/IMXの項目でimx-sm-bbm.cが確認できますGPRコマンドを定義しますが、実装はしません!!

enum scmi_imx_bbm_protocol_cmd {
IMX_BBM_GPR_SET = 0x3、
IMX_BBM_GPR_GET = 0x4、
IMX_BBM_RTC_ATTRIBUTES = 0x5、
IMX_BBM_RTC_TIME_SET = 0x6、
IMX_BBM_RTC_TIME_GET = 0x7、
IMX_BBM_RTC_ALARM_SET = 0x8、
IMX_BBM_BUTTON_GET = 0x9、
IMX_BBM_RTC_NOTIFY = 0xA、
IMX_BBM_BUTTON_NOTIFY = 0xB、
};
 
リストされているコマンドはすべて実装するが、GPRコマンドだけは実装しないという決定には、何か理由があるのでしょうか?私は、独自の実装に頼る前に、NXPが意図するアプローチに沿うことを好みます。
 

よろしくお願いいたします。

アブデル

Re: IMX95 bootcount managment

こんにちは、 @Abder さん

詳細な調査をありがとうございました。

簡単に言うと、CRRMとROMリカバリはブートカウント機構を置き換えるものではありません。破損や無効なブートイメージからの復旧は助けますが、Linuxやアプリケーションが正常に起動したかどうかは判別できません。OTAアップデートソリューションの場合、アップデートの失敗を検出し、自動的にロールバックを実行するために、ブートカウント機能が引き続き推奨されます。

BBNSM GPRに関しては、U-BootはNXP固有のSCMI関数を通じてアクセスを提供しますが、Linuxは現在同等のインターフェースを公開していません。これらのレジスタにLinuxでアクセスが必要な場合は、カスタムカーネルドライバーやSCMIベンダー拡張が必要になるでしょう。

あなたのユースケースでは、すでにU-Bootで動作しているBBNSM GPRをブートカウントストレージとして使い続けることをお勧めします。CRRMのリカバリーとブートカウント管理は異なる目的を果たしており、代替案ではなく補完的なメカニズムとみなすべきです。

よろしくお願いします、
チャビラ

Re: IMX95 bootcount managment

こんにちは、 @Abder さん

ご指摘ありがとうございます。あなたの指摘は正しいです。

IMX_BBM_GPR_SETおよびIMX_BBM_GPR_GETコマンドはBBMプロトコル仕様で定義されており、ファームウェアは汎用レジスタ(GPR)へのアクセスをサポートしています。しかし、現在のLinuxのimx-sm-bbmドライバーではこれらのコマンドのサポートは実装されていません。現時点では、このドライバはRTCおよびボタン関連の機能のみを公開しており、これらは既存のLinuxサブシステム(RTCおよび入力フレームワーク)と直接統合されています。

GPRアクセスはまだ上流ドライバから利用可能ではありませんが、ドライバは初期化時に利用可能なGPRの数の情報を取得・保存しています。これは基盤となるインフラストラクチャが部分的に整っており、ドライバ設計時にGPRサポートが考慮されたことを示しています。しかし、これらのレジスタをユーザー空間に公開する公式のカーネルインターフェースやリリースされたドライバ実装は現在存在しません。

よろしくお願いします、
チャビラ

タグ(1)
評価なし
バージョン履歴
最終更新日:
昨日
更新者: