NXP公式チームの皆様、こんにちは。
i.MX 8M Plus プラットフォームを使用し、 Linux A53 と FreeRTOS M7 を実行する システムを開発しています 。M7 を実行中に SAI3 オーディオインターフェースをLinuxに割り当てようとしたところ、カーネルクラッシュ(SError/ページフォルト)が発生しました。
カーネルバージョン: Linux 5.10.72
U-Bootバージョン: U-Boot 2021.04
M7 SDK: i.MX8MP 用 MCUXpresso SDK (rpmsg_lite_str_echo_rtos)
公式記事を参照してください: NXPナレッジベース: remoteprocを使用してM7ファームウェアを実行中にSAI3をテストする
<1> M7ファームウェア(m7.bin)はシステムパーティションに保存され、...U-Bootステージは、bootaux 0x007e0000コマンドを使用して直接起動されます。
<2> Cortex-A53 Linux側では、SAI3 + I2C3 + SDMA3バスに搭載された物理サウンドカードチップ(SGTL5000)を使用します。
<3> Cortex-M7は、GPIO2_IO09ピンでデータを取得し、高周波サンプリング割り込みをトリガーし、RPMsg仮想シリアルポート(/dev/ttyRPMSG30)を介してコア間でA53 Linuxとやり取りする役割を担っています。
サウンドカードのリソースがA53に調整されていない場合、/dev/ttyRPMSG30デバイスの動作は正常です。
現在、A53サウンドカードが必要です。公式記事「<リモートプロシージャコールでM7ファームウェアを実行中にSAI3をテストする>」に従って、以下の調整を行いましたが、カーネルの起動時に問題が発生します。変更点は以下のとおりです。
<1> カーネルのDTS設定が復元され、サウンドカードの設定が添付ファイル
<2> u-boot dts: A53 にサウンドカードのリソースを割り当てます。例:
<3> ATF、 SAI3、sdma3、i2c3をA53に割り当て、 imx8mp_bl31_setup.cを修正します。例:
<4>M7 SDK: 添付の
以下のログに示すように、カーネル起動中にシステムがフリーズします。
[ 2.992289] i2c i2c-1: IMX I2C adapter registered
[ 2.997631] SError Interrupt on CPU2, code 0xbf000002 -- SError
[ 2.997634] CPU: 2 PID: 135 Comm: kworker/2:1 Not tainted 5.10.72-gf8ca51a867fa-dirty #56
[ 2.997636] Hardware name: EMB-3512-V11-M7 (DT)
[ 2.997638] Workqueue: events deferred_probe_work_func
[ 2.997642] pstate: 80000005 (Nzcv daif -PAN -UAO -TCO BTYPE=--)
[ 2.997644] pc : i2c_imx_probe+0x31c/0x8fc
[ 2.997645] lr : i2c_imx_probe+0x2b0/0x8fc
[ 2.997647] sp : ffff8000126a3af0
[ 2.997648] x29: ffff8000126a3af0 x28: ffff80001135c3f0
[ 2.997654] x27: ffff0000c50aa880 x26: 0000000000000023
[ 2.997660] x25: ffff0000c50aaca0 x24: ffff0000c50aa8f0
[ 2.997666] x23: ffff800011d7c090 x22: ffff0000c4410e40
[ 2.997672] x21: ffff80001135c428 x20: ffff0000c041d800
[ 2.997677] x19: ffff0000c041d810 x18: 0000000000000020
[ 2.997683] x17: 0000000000000000 x16: 0000000000000000
[ 2.997689] x15: ffff0000c44112b8 x14: 0000000000000000
[ 2.997695] x13: ffff0000c4410e40 x12: ffff8000126a3a70
[ 2.997700] x11: aaaaaaaaaaaaaaab x10: 0000000000000060
[ 2.997706] x9 : ffff800011b993b4 x8 : ffff800011b99000
[ 2.997712] x7 : 00007dfed2122a00 x6 : 000000000007a120
[ 2.997718] x5 : 0000000000b71aff x4 : 0000000000000002
[ 2.997723] x3 : 0000000000000002 x2 : 0000000000000000
[ 2.997729] x1 : ffff0000ff86ea08 x0 : ffff800013c8000c
[ 2.997736] Kernel panic - not syncing: Asynchronous SError Interrupt
[ 2.997741] CPU: 2 PID: 135 Comm: kworker/2:1 Not tainted 5.10.72-gf8ca51a867fa-dirty #56
[ 2.997742] Hardware name: EMB-3512-V11-M7 (DT)
[ 2.997744] Workqueue: events deferred_probe_work_func
[ 2.997747] Call trace:
[ 2.997748] dump_backtrace+0x0/0x1a0
[ 2.997750] show_stack+0x18/0x70
[ 2.997751] dump_stack+0xd0/0x12c
[ 2.997752] panic+0x16c/0x334
[ 2.997754] nmi_panic+0x8c/0x90
[ 2.997755] arm64_serror_panic+0x78/0x84
[ 2.997757] do_serror+0x64/0x6c
[ 2.997758] el1_error+0x90/0x110
[ 2.997760] i2c_imx_probe+0x31c/0x8fc
[ 2.997762] platform_drv_probe+0x54/0xb0
[ 2.997763] really_probe+0xec/0x4d0
[ 2.997765] driver_probe_device+0x58/0xc0
[ 2.997766] __device_attach_driver+0xa8/0x10c
[ 2.997768] bus_for_each_drv+0x78/0xd0
[ 2.997769] __device_attach+0xd8/0x180
[ 2.997771] device_initial_probe+0x14/0x20
[ 2.997773] bus_probe_device+0x9c/0xa4
[ 2.997774] deferred_probe_work_func+0x80/0xc0
[ 2.997776] process_one_work+0x1cc/0x350
[ 2.997777] worker_thread+0x2bc/0x46c
[ 2.997779] kthread+0x154/0x160
[ 2.997780] ret_from_fork+0x10/0x30
[ 2.998109] SMP: stopping secondary CPUs
[ 2.998111] Kernel Offset: disabled
[ 2.998113] CPU features: 0x0240002,2000200c
[ 2.998114] Memory Limit: none
問題点をご確認いただき、解決に役立つ関連文書や修正点がないかご検討ください。ご提案やご回答をお待ちしております。よろしくお願いいたします。