インテル® Agilex™ ハード・プロセッサー・システム (HPS) のリモート・システム・アップデート・ユーザーガイド

ID 683184
日付 11/10/2021
Public

このドキュメントの新しいバージョンが利用できます。お客様は次のことを行ってください。 こちらをクリック 最新バージョンに移行する。

ドキュメント目次

7.5.5.3. 破損したコンフィグレーション・ポインター・ブロック

この項では、RSUクライアントを使用して、コンフィグレーション・ポインター・ブロックの破損を検出および回復する方法を示します。また、U-Bootを使用してCPBを破損します。これは、CPBでより便利に実行されるためです。
注: この例に一覧表示されているコマンドは、初期フラッシュイメージ (JIC) が他の変更なしでフラッシュに書き込まれたことを前提としています。
  1. ボードの電源を入れ直し、Linuxで起動して、RSUステータスを照会します。
    root@linux:~# ./rsu_client --log
          VERSION: 0x00000202
            STATE: 0x00000000
    CURRENT IMAGE: 0x0000000001000000
       FAIL IMAGE: 0x0000000000000000
        ERROR LOC: 0x00000000
    ERROR DETAILS: 0x00000000
    RETRY COUNTER: 0x00000000
    Operation completed

    エラーはありません。

  2. ボードを再起動または電源を入れ直し、U-Bootプロンプトで停止して、対応するフラッシュ領域を消去することによりCPB0を破損します。
    SOCFPGA # sf probe
    SF: Detected mt25qu02g with page size 256 Bytes, erase size 4 KiB, total 256 MiB
    SOCFPGA # sf erase 0x0920000 0x1000
    SF: 4096 bytes @ 0x920000 Erased: OK
  3. ボードの電源を入れ直します。U-Bootが実行され、Linuxを起動する前に、いくつかのRSUコマンドが実行されます。これにより、rsu_init が呼び出され、CPB1コピーからCPB0を復元します。
    FW detects corrupted CPB0 but CPB1 is fine
    Restoring CPB0
  4. Linuxが起動したら、RSUのステータスを照会します。
    root@linux:~# ./rsu_client --log
    librsu: load_cpb(): FW detects corrupted CPB0, fine CPB1
     [LOW]
    librsu: load_cpb(): warning: Restoring CPB0 [LOW]
          VERSION: 0x0DCF0202
            STATE: 0xF004D010
    CURRENT IMAGE: 0x0000000001000000
       FAIL IMAGE: 0x0000000000100000
        ERROR LOC: 0x00000000
    ERROR DETAILS: 0x00000000
    RETRY COUNTER: 0x00000000
    Operation completed

    State フィールドには、特別なエラーコード 0xF004D010 があります。これは、CPB0が破損していることを示します。Last Fail Image には、この場合に使用される特別な値 0x00100000 があります。Version フィールドは、エラーが決定ファームウェア (0xDCF) によって報告されたことを示します。U-BootはすでにCPB1からCPB0を回復しましたが、ファームウェアはまだCPB0が破損していると報告し、LibRSUはそれを再び回復します。

  5. エラーステータスをクリアして、ファームウェアがCPB0の破損の報告を停止し、RSUステータスを再度照会して、エラーがないことを確認します。
    root@linux:~# ./rsu_client --clear-error-status
    librsu: load_cpb(): FW detects corrupted CPB0, fine CPB1
     [LOW]
    librsu: load_cpb(): warning: Restoring CPB0 [LOW]
    Operation completed
    root@linux:~# ./rsu_client --log
          VERSION: 0x00000202
            STATE: 0x00000000
    CURRENT IMAGE: 0x0000000001000000
       FAIL IMAGE: 0x0000000000000000
        ERROR LOC: 0x00000000
    ERROR DETAILS: 0x00000000
    RETRY COUNTER: 0x00000000
    Operation completed
  6. ボードの電源を入れ直し、Linuxを起動して、RSUステータスを照会します。エラーがないことを確認します。
    root@linux:~# ./rsu_client --log
          VERSION: 0x00000202
            STATE: 0x00000000
    CURRENT IMAGE: 0x0000000001000000
       FAIL IMAGE: 0x0000000000000000
        ERROR LOC: 0x00000000
    ERROR DETAILS: 0x00000000
    RETRY COUNTER: 0x00000000
    Operation completed
  7. CPBの内容をファイルに保存して、後でリカバリー用に使用できるようにします。また、sync コマンドを呼び出して、ファイルがストレージに保存されていることを確認します。
    root@linux:~# ./rsu_client --save-cpb cpb-backup.bin
    Operation completed
    root@linux:~# sync
  8. 再起動または電源を入れ直し、U-Bootで停止して、その位置のフラッシュを消去することにより両方のCPBを破損します。
    SOCFPGA # sf probe
    SF: Detected mt25qu02g with page size 256 Bytes, erase size 4 KiB, total 256 MiB
    SOCFPGA # sf erase 0x0920000 0x1000
    SF: 4096 bytes @ 0x920000 Erased: OK
    SOCFPGA # sf erase 0x0928000 0x1000
    SF: 4096 bytes @ 0x928000 Erased: OK
  9. ボードの電源を入れ直し、Linuxで起動して、RSUステータスを照会します。
    root@linux:~# ./rsu_client --log
    librsu: load_cpb(): FW detects both CPBs corrupted
     [LOW]
          VERSION: 0x0DCF0202
            STATE: 0xF004D011
    CURRENT IMAGE: 0x0000000000110000
       FAIL IMAGE: 0x0000000000100000
        ERROR LOC: 0x00000000
    ERROR DETAILS: 0x00000000
    RETRY COUNTER: 0x00000000
    Operation completed

    予想どおり、Current Image はファクトリー・イメージとして報告されます。State フィールドには、特別なエラーコード 0xF004D011 があります。これは、両方のCPBが破損していることを示します。Last Fail Image には、この場合に使用される特別な値 0x00100000 があります。Version フィールドは、エラーが決定ファームウェア (0xDCF) によって報告されたことを示します。LibRSUは、両方のCPBの破損を報告しました。

  10. 有効なCPBを必要とするコマンドの実行を試し、それが拒否されることを確認します。
    root@linux:~# ./rsu_client --list 1
    librsu: load_cpb(): FW detects both CPBs corrupted
     [LOW]
    librsu: rsu_cpb_corrupted_info(): corrupted CPB -- [LOW]
    librsu: rsu_cpb_corrupted_info(): run rsu_client create-empty-cpb or  [LOW]
    librsu: rsu_cpb_corrupted_info(): rsu_client restore_cpb <file_name> first
     [LOW]
    ERROR: Failed to get slot attributes
  11. エラーをクリアして、CPBがファームウェアによって破損していると報告されないようにします。
    root@linux:~# ./rsu_client --clear-error-status
    librsu: load_cpb(): FW detects both CPBs corrupted
     [LOW]
    Operation completed
    root@linux:~# ./rsu_client --log
    librsu: load_cpb(): Bad CPB1 is bad [MED]
    librsu: load_cpb(): Bad CPB0 is bad [MED]
    librsu: load_cpb(): error: found both corrupted CPBs [LOW]
          VERSION: 0x00000202
            STATE: 0x00000000
    CURRENT IMAGE: 0x0000000000110000
       FAIL IMAGE: 0x0000000000000000
        ERROR LOC: 0x00000000
    ERROR DETAILS: 0x00000000
    RETRY COUNTER: 0x00000000
    Operation completed
  12. 作成したバックアップ・ファイルから保存したCPBを復元します。
    root@linux:~# ./rsu_client --restore-cpb cpb-backup.bin
    librsu: load_cpb(): Bad CPB1 is bad [MED]
    librsu: load_cpb(): Bad CPB0 is bad [MED]
    librsu: load_cpb(): error: found both corrupted CPBs [LOW]
    Operation completed
  13. RSUステータスを再度照会し、エラーがないことを確認します。
    root@linux:~# ./rsu_client --log
          VERSION: 0x00000202
            STATE: 0x00000000
    CURRENT IMAGE: 0x0000000000110000
       FAIL IMAGE: 0x0000000000000000
        ERROR LOC: 0x00000000
    ERROR DETAILS: 0x00000000
    RETRY COUNTER: 0x00000000
    Operation completed
  14. 有効なCPBを必要とするコマンドの実行を試し、それが拒否されることを確認します。
    root@linux:~# ./rsu_client --list 1
          NAME: P2
        OFFSET: 0x0000000002000000
          SIZE: 0x01000000
      PRIORITY: [disabled]
    Operation completed