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

ID 683184
日付 11/10/2021
Public

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

ドキュメント目次

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

この項では、U-Bootコマンドを使用して、コンフィグレーション・ポインター・ブロックの破損を検出および回復する方法を示します。
注: この例に一覧表示されているコマンドは、初期フラッシュイメージ (JIC) が他の変更なしでフラッシュに書き込まれたことを前提としています。
  1. ボードの電源を入れ、U-Bootプロンプトで停止します。
  2. rsu list コマンドを実行して、すべてのパーティションを含む詳細なステータスを表示し、SPTの位置を特定します。
    SOCFPGA # rsu list
    RSU: Remote System Update Status
    Current Image   : 0x01000000
    Last Fail Image : 0x00000000
    State           : 0x00000000
    Version         : 0x00000202
    Error location  : 0x00000000
    Error details   : 0x00000000
    Retry counter   : 0x00000000
    RSU: Sub-partition table 0 offset 0x00910000
    RSU: Sub-partition table 1 offset 0x00918000
    SF: Detected mt25qu02g with page size 256 Bytes, erase size 4 KiB, total 256 MiB
    RSU: Sub-partition table content
           BOOT_INFO	Offset: 0x0000000000000000	Length: 0x00110000	Flag : 0x00000003
       FACTORY_IMAGE	Offset: 0x0000000000110000	Length: 0x00800000	Flag : 0x00000003
                  P1	Offset: 0x0000000001000000	Length: 0x01000000	Flag : 0x00000000
                SPT0	Offset: 0x0000000000910000	Length: 0x00008000	Flag : 0x00000001
                SPT1	Offset: 0x0000000000918000	Length: 0x00008000	Flag : 0x00000001
                CPB0	Offset: 0x0000000000920000	Length: 0x00008000	Flag : 0x00000001
                CPB1	Offset: 0x0000000000928000	Length: 0x00008000	Flag : 0x00000001
                  P2	Offset: 0x0000000002000000	Length: 0x01000000	Flag : 0x00000000
                  P3	Offset: 0x0000000003000000	Length: 0x01000000	Flag : 0x00000000
    RSU: CMF pointer block offset 0x00920000
    RSU: CMF pointer block's image pointer list
    Priority 1 Offset: 0x0000000001000000 nslot: 0
  3. 対応するフラッシュ領域を消去して、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
  4. ボードの電源を入れ直し、U-Bootプロンプトを停止して、RSUステータスを照会します。
    SOCFPGA # rsu status_log
    FW detects corrupted CPB0 but CPB1 is fine
    Restoring CPB0
    Current Image   : 0x01000000
    Last Fail Image : 0x00100000
    State           : 0xf004d010
    Version         : 0x0dcf0202
    Error location  : 0x00000000
    Error details   : 0x00000000
    Retry counter   : 0x00000000

    State フィールドには、特別なエラーコード 0xf004d010 があります。これは、CPB0が破損していることを示します。Last Fail Image には、この場合に使用される特別な値 0x00100000 があります。Version フィールドは、エラーが決定ファームウェア (0xDCF) によって報告されたことを示します。U-Boot RSUコマンドが最初に実行されたときに呼び出される rsu_init 関数は、CPBの破損を検出し、CPB1からCPB0を回復させます。

  5. CPBの内容をファイルに保存し、後のリカバリーに使用できるようにします。
    SOCFPGA # rsu save_cpb ${loadaddr}
    4100 bytes CPB data saved
    SOCFPGA # fatwrite mmc 0:1 ${loadaddr} cpb-backup.bin ${filesize}
    4100 bytes written
  6. その位置でフラッシュを消去して、両方の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
  7. ボードの電源を入れ直し、U-Bootプロンプトで起動し、RSUステータスを照会します。
    SOCFPGA # rsu status_log
    FW detects both CPBs corrupted
    Current Image   : 0x00110000
    Last Fail Image : 0x00100000
    State           : 0xf004d011
    Version         : 0x0dcf0202
    Error location  : 0x00000000
    Error details   : 0x00000000
    Retry counter   : 0x00000000

    予想どおり、Current Image はファクトリー・イメージとして報告されます。State フィールドには、特別なエラーコード 0xf004d011 があります。これは、両方のCPBが破損していることを示します。Last Fail Image には、この場合に使用される特別な値 0x00100000 があります。Version フィールドは、エラーが決定ファームウェア (0xDCF) によって報告されたことを示します。U-Boot RSUコマンドが最初に実行されたときに呼び出される rsu_init 関数が検出され、両方のCPBが破損していることが報告されます。

  8. 有効なCPBを必要とするコマンドの実行を試すと、拒否されます。
    SOCFPGA # rsu slot_get_info 0
    corrupted CPB --run rsu create_empty_cpb or rsu restore_cpb <address> first
  9. 作成したバックアップ・ファイルから保存したCPBを復元します。
    OCFPGA # fatload mmc 0:1 ${loadaddr} cpb-backup.bin
    4100 bytes read in 3 ms (1.3 MiB/s)
    SOCFPGA # rsu restore_cpb ${loadaddr}
  10. CPBが復元されたため、ファームウェアによって報告されたエラーをクリアします。
    SOCFPGA # rsu clear_error_status
    または、電源を入れ直すか、nCONFIGをアサートして、ファームウェアによって報告されたエラーをクリアすることもできます。
  11. 有効なCPBを必要とするコマンドの実行を再試行すると、成功します。
    SOCFPGA # rsu slot_get_info 1
    NAME: P2
    OFFSET: 0x0000000002000000
    SIZE: 0x01000000
    PRIORITY: 1