AR# 69143

Zynq UltraScale+ MPSoC: XSDB を Linux CPU アイドルに接続

説明

Zynq UltraScale+ MPSoC/RFSoC デバイスでは、Linux CPU アイドルがデフォルトでイネーブルになっています。

イネーブルになっていると、CPU コアがアイドル状態のとき (WFI ではない)、Linux により CPU コアがパワーダウンされます。

これが原因で、XSDB が接続されているときに問題が発生することがあります。

ソリューション

問題:

CPU アイドルがイネーブルになっていると、DAP がエラーを出力します。

理論上、XSDB が接続されているときは、A53_* 関連のレジスタを介して読み出し/書き込みアクセスが発生するはずです。

A53_* コアは CPU 使用統計に基づきパワーダウンされる可能性があるため、CPU_IDLE がイネーブルになっていることが原因で、A53 レジスタへの XSDB アクセスが DAP エラーになる可能性があります。

2 つのイベントがそれぞれ独立して発生しています。

CPU がパワーダウンされ、XSDB がレジスタにアクセスしようとします。

この結果、XSDB が読み出しをトリガーするとき、A53_* コアがパワーダウンされる場合は、DAP エラーになる可能性があります。

通常は、ブロックがパワーアップするかどうかはデバッグ ツールがチェックします。

ただし、読み出しが既に実行しているときにこのイベントが発生する可能性があり、この問題が発生することがあります。

 

回避策 (Zynq UltraScale+ 対象のすべてのザイリンクス ソフトウェア リリースに適用します。):

次のいずれかの方法で、Linux カーネルの bootargs で CPU アイドルをディスエーブルにすると、この問題を回避できます。

1) ターゲットの U-Boot のプロンプトからディスエーブルにする

次のように既存の bootargs に "cpuidle.off=1" を追加します (<plnx-proj-root>/components/plnx_workspace/device-tree/device-tree/system-conf.dtsi ファイルに含まれる bootargs を探します)。

ZynqMP> setenv bootargs 'console=ttyPS0,115200n8 earlycon clk_ignore_unused cpuidle.off=1'
ZynqMP> run bootcmd

 

2) PetaLinux または Yocto を使用してカーネル config からディスエーブルにする (CONFIG_CPU_IDLE)

PetaLinux:

$ petalinux-config -c kernel

CPU Power Management --->
  -> CPU Idle --->
        [ ] CPU idle PM support

次のコマンドを使用してカーネルを削除しビルドし直します。

$ petalinux-build -c kernel -x cleansstate
$ petalinux-build -c kernel

Yocto:

$ bitbake -c menuconfig virtual/kernel

CPU Power Management --->
  -> CPU Idle --->
        [ ] CPU idle PM support

bitbake コマンドを使用してカーネルを削除しビルドし直します。

$ bitbake -c cleansstate virtual/kernel
$ bitbake virtual/kernel

3) PetaLinux デバイスツリー ジェネレーターを使用する

次のように既存の bootargs に "cpuidle.off=1" を追加し、"<plnx-proj-root>/components/plnx_workspace/device-tree/device-tree/system-conf.dtsi" ファイルに含まれる選択されたノード プロパティを "<plnx-proj-root>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi" にコピーします。

/ {
   chosen {
      bootargs = "earlycon console=ttyPS0,115200 clk_ignore_unused cpuidle.off=1";
      stdout-path = "serial0:115200n8";
   };
};

デバイス ツリーを削除し、ビルドし直します。

$ petalinux-build -c device-tree -x cleansstate
$ petalinux-build -c device-tree

アンサー レコード リファレンス

サブアンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
75401 Zynq UltraScale+ MPSoC/RFSoC: XSCT デバッガーが接続されていると、Linux または U-Boot のリブートがハングする N/A N/A

関連アンサー レコード

Answer Number アンサータイトル 問題の発生したバージョン 修正バージョン
75401 Zynq UltraScale+ MPSoC/RFSoC: XSCT デバッガーが接続されていると、Linux または U-Boot のリブートがハングする N/A N/A
AR# 69143
日付 07/24/2020
ステータス アクティブ
種類 一般
デバイス
ツール 詳細 概略
Boards & Kits