NXP 官方团队,您好:
我们在使用 i.MX 8M Plus 平台开发系统,运行 Linux A53 与 FreeRTOS M7。在尝试将 SAI3 音频接口分配给 Linux 使用的同时运行 M7 时,遇到了内核崩溃(SError / 页错误)。
Kernel 版本:Linux 5.10.72
U-Boot 版本:U-Boot 2021.04
M7 SDK:MCUXpresso SDK for i.MX8MP (rpmsg_lite_str_echo_rtos)
参考官方文章:NXP Knowledge Base: Test SAI3 while running M7 firmware with remoteproc
<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的声卡设备,参考了官方帖子<Test SAI3 while running M7 firmware with remoteproc>后做出了以下调整,但内核启动会存在问题,改动部分如下:
<1> 内核 dts配置已恢复声卡配置到A53,如附件
<2> u-boot dts: 分配了声卡资源到A53,如
<3> ATF,将 SAI3、sdma3 和 i2c3 分配给 A53,修改imx8mp_bl31_setup.c,如:
<4> M7 SDK: 注释BOARD_BootClockRUN和BOARD_RdcInit函数涉及AUDIO的改动,如附件
开机进入内核会卡主,log如下:
[ 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
请帮忙看看问题点,是否有相关文档和改动可以解决,期待你们的建议和答复!感谢!