こんにちは、
最近、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)を見かけたのですが、ディストリビューションアップデートのために自己管理のブートカウントが本当に必要かどうか疑問に思っています。
そこで、あなたに以下の質問があります。
どんな回答でも大変ありがたく思います。
SoC: i.MX 95 (19x19 LPDDR5 EVK)
BSP: LF6.18.20_2.0.0
ありがとうございました。
アブデル
こんにちは、 @Chaviraさん
貴重なご説明をありがとうございました。
GPRの使用は問題ありませんが、NXPのカーネル側でGPRアクセスを追加する公式ドライバはありますか?
カーネルソースのドライバ/ファームウェア/arm_scmi/ベンダーズ/IMXの項目でimx-sm-bbm.cが確認できますGPRコマンドを定義しますが、実装はしません!!
よろしくお願いいたします。
アブデル
こんにちは、 @Abder さん。
詳細な調査をありがとうございました。
簡単に言うと、CRRMとROMリカバリはブートカウント機構を置き換えるものではありません。破損や無効なブートイメージからの復旧は助けますが、Linuxやアプリケーションが正常に起動したかどうかは判別できません。OTAアップデートソリューションの場合、アップデートの失敗を検出し、自動的にロールバックを実行するために、ブートカウント機能が引き続き推奨されます。
BBNSM GPRに関しては、U-BootはNXP固有のSCMI関数を通じてアクセスを提供しますが、Linuxは現在同等のインターフェースを公開していません。これらのレジスタにLinuxでアクセスが必要な場合は、カスタムカーネルドライバーやSCMIベンダー拡張が必要になるでしょう。
あなたのユースケースでは、すでにU-Bootで動作しているBBNSM GPRをブートカウントストレージとして使い続けることをお勧めします。CRRMのリカバリーとブートカウント管理は異なる目的を果たしており、代替案ではなく補完的なメカニズムとみなすべきです。
よろしくお願いします、
チャビラ
こんにちは、 @Abder さん。
ご指摘ありがとうございます。あなたの指摘は正しいです。
IMX_BBM_GPR_SETおよびIMX_BBM_GPR_GETコマンドはBBMプロトコル仕様で定義されており、ファームウェアは汎用レジスタ(GPR)へのアクセスをサポートしています。しかし、現在のLinuxのimx-sm-bbmドライバーではこれらのコマンドのサポートは実装されていません。現時点では、このドライバはRTCおよびボタン関連の機能のみを公開しており、これらは既存のLinuxサブシステム(RTCおよび入力フレームワーク)と直接統合されています。
GPRアクセスはまだ上流ドライバから利用可能ではありませんが、ドライバは初期化時に利用可能なGPRの数の情報を取得・保存しています。これは基盤となるインフラストラクチャが部分的に整っており、ドライバ設計時にGPRサポートが考慮されたことを示しています。しかし、これらのレジスタをユーザー空間に公開する公式のカーネルインターフェースやリリースされたドライバ実装は現在存在しません。
よろしくお願いします、
チャビラ