This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VH-Q1:内核严重错误 — 未同步:异步监测器中断- Wave5 驱动程序

Guru**** 2568565 points
Other Parts Discussed in Thread: TDA4VH-Q1, J784S4XEVM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1562226/tda4vh-q1-kernel-panic---not-syncing-asynchronous-serror-interrupt---wave5-driver

器件型号:TDA4VH-Q1
主题中讨论的其他器件: J784S4XEVM

工具/软件:

您好、

请向我指出调试此系统错误的正确方向。  我有一个带有 TDA4VH-Q1 SOC 的定制电路板。   当使用 v4l2h264decc 解码器启动 gstreamer 流水线时、该异步错误始终发生在 wave5_dec_clr_disp_flag () 调用中。  感谢您的帮助...

[ 2833.600901] CPU5 上的 SError 中断、代码 0x00000000bf000000 -- SError
[ 2833.600920] CPU:5 UID:0 PID:4129 通信:Queue1:src 未污染 6.15.8-Dirty #2 抢占(自愿)
[ 2833.600926]硬件名称: --
[ 2833.600929] pstate:20000005 (nzCv daif -pan -uao -TCO -DIT -SSB BTYPE=--)
[ 2833.600933] PC:wave5_dec_CLR_disp_flag+0x40/0x80 [wave5]
[ 2833.600959] LR:wave5_dec_clr_disp_flag+0x40/0x80 [wave5]
[ 2833.600964] sp : ffff800095ebba30
[ 2833.600965] x29:ffffff800095ebba30 x28:ffffff0008021acd30 x27:000000000000
[ 2833.600972] x26:ffffff000805894010 x25:ffffff800079a02e98 x24:ffffff000807f1ba00
[ 2833.600977] x23:ffff800095ebbcc8 x22:ffffff0008021acd50 x21:ffffff0008065b8000
[ 2833.600981] x20:ffff000805894000 x19:ffffff000805894000 x18:000000000000
[ 2833.600986] X17:000000000000 x16:0000000000000000 x15:0000ffff80006278
[ 2833.600990] x14:00000001000000000 x13:000000000000 x12:0000000000000000
[ 2833.600995] x11:ffffffffffffffffffff x10:ffffffffffffffffff x9:000000000000
[ 2833.600999] x8:ffff000807f1baa0 x7:0000000000000000 x6:0000000000000001
[ 2833.601003] x5:0000000000000001 x4:ffff000807f1b8b0 x3:000000000000
[ 2833.601007] x2 : 000000000000 x1 : ffffff800082ea0118 x0 : ffffff800082ea0000
[ 2833.601014]内核错误 — 未同步:异步错误中断
[ 2833.601016] CPU: 5 UID: 0 PID: 4129 Comm: Queue1 : src Not tainted 6.15.8- Dirty #2 preempt(自愿)
[ 2833.601020]硬件名称:--
[ 2833.601022]呼叫追踪:
[ 2833.601025] SHOW_STACK+0x18/0x30 (C)
[ 2833.601039] dump_stack_lvl+0x60/0x80
[ 2833.601046] dump_stack+0x18/0x24
[ 2833.601050] panic+0x168/0x360
[ 2833.601054] NMI_panic+0x88/0x90
[ 2833.601059] arm64_serorer_panic+0x64/0x80
[ 2833.601064] do_server+0x3c/0x70
[ 2833.601068] el1h_64_ERROR_HANDLER+0x30/0x50
[ 2833.601076] el1h_64_error+0x6c/0x70
[ 2833.601079] wave5_dec_CLR_DISP_FLAG+0x40/0x80 [wave5](P)
[ 2833.601085] wave5_VPU_dec_CLR_disp_flag+0x54/0x80 [wave5]
[ 2833.601090] wave5_VPU_dec_buf_queue+0x148/0x150 [wave5]
[ 2833.601095]__enqueue_in_driver+0x3c/0x80 [videobuf2_common]
[ 2833.601100] VB2_core_qbuf+0x438/0x5b0 [videobuf2_common]
[2833.601104] VB2_qbuf+0xac/0x190 [videobuf2_v4l2]
[ 2833.601111] v4l2_m2M_qbuf+0x6c/0x240 [v4l2_mem2mem]
[ 2833.601119] v4l2_m2M_ioctl_qbuf+0x18/0x490 [v4l2_mem2mem]
[ 2833.601123] v4L_qbuf+0x48/0x70 [videodev]
[ 2833.601136]_video_do_ioctl+0x3f4/0x470 [videodev]
[ 2833.601144] video_usercopy+0x1e4/0x690 [videodev]
[ 2833.601151] video_ioctl2+0x18/0x30 [videodev]
[ 2833.601159] v4l2_ioctl+0x40/0x60 [videodev]
[ 2833.601167]__arm64_sys_ioctl+0xac/0xe0
[ 2833.601176] invoke_syscall+0x48/0x110
[ 2833.601182] el0_Svc_common.constprop.0+0x40/0xe0
[ 2833.601186] Do_el0_Svc+0x1c/0x30
[ 2833.601189] el0_Svc+0x30/0xd0
[ 2833.601193] el0t_64_SYNC_HANDLER+0x10c/0x140
[ 2833.601197] el0t_64_SYNC+0x198/0x19c
[ 2833.601201] SMP:停止辅助 CPU
[ 2833.601215]内核偏移:已禁用
[ 2833.601217] CPU 特性:0x0,400,00040050,01000400,8200421b</s>40,050,010 00,400,820
[ 2833.601221]内存限制:无
[ 2833.880806]--[结束内核恐慌 — 未同步:异步镜像中断]---

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、  

    您使用的是哪个 HLOS SDK 版本? 您是否会发现这种情况发生在特定用例中? 我还没有注意到启动解码器管道时出现的内核错误。

    谢谢、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我目前使用的是 6.15.8 Linux 内核。  当我使用 v4l2h264dec 插件启动单个 gstreamer 解码流水线时、便会发生错误。  panic 似乎总是出现在  wave5_dec_clr_disp_flag () 中。  我一直在解码实时 h264 视频流。  今天,我从 MP4 文件中获取了视频,恐慌发生在同一个点上。 恐慌发生在与 wave5_VPU_dec_start_streaming () 非常接近的地方,但我不确定如何隔离异步错误的来源。

    谢谢、

    Jeff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否共享 gstreamer 流水线?

    谢谢、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sarabesh:

    下面是每次诱导 Serror 的流水线。  当执行 wave5_dec_clr_disp_flag () 时、堆栈跟踪总是指示遇到问题。  我已经建立了一个调试内核,并使用 KGDB 在 wave5_dec_clr_disp_flag () 中触发断点。  当 I 步进代码时、SError 会立即触发。  我想读取 0xE000ED28 处的 CFSR 寄存器、但地址无效(我认为存在多个内核)。  不确定用于诊断故障原因的后续步骤...

    注意1美元 只是 MP4 文件的路径。

    /opt/GStreamer/bin/gst-launch-1.0
    filesrc location=${1}\
    ! qtdemux name=DEMUX.VIDEO_0 \
    ! h264parse config-interval=0 \
    ! v4l2h264dec capture-IO-mode=4 \
    ! 视频转换\
    ! 视频! 视频/x-raw、max-rate=30/1 \
    ! 队列\
    ! rtpvrawpay \
    ! 'application/x-rtp、media=(字符串)video、encoding-name=(字符串)raw '\
    ! udpsink host=127.0.0.1 端口=5000 sync=false async=false

    再次感谢、
    Jeff

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jeff:  

    感谢您提供的信息。 我会回顾一下、然后返回给您。  

    此致、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Sarabesh。  

    我做了一些更多的挖掘。  我看到 ESR 为 0x00000000bf000000。  这将解码为具有 IDS=1 的镜像。  Arm A 曲线架构参考手册指示在这种情况下已定义 ESR_EL1[23:0]来实现。  我不知道在哪里可以找到针对 ISS=24'b0 的具体实施定义。  请告诉我您找到了什么。  我卡住了。

    谢谢、Jeff。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Jeff、  

    目前正在与团队讨论。 我很快就会跟进。

    此致、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sarabesh:

    与团队讨论后、您是否有任何更新? 这是一个高度优先的问题、非常感谢您的指导。

    此致、

    Luke

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Luke、  

    您是否完全能够在 TI EVM 上重现此问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    请您分享一下输入流。 我将尝试使用最新的 SDK 在我的设置上复制此内容。  

    谢谢您、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好  附件是上述流水线中使用的源视频。  请注意、流水线正在使用 v6.12.17 Linux 内核。  当我们过渡到 v6.15.8 内核时、我们开始看到问题。  Wave5 编解码器驱动程序需要 70MB 的 CMA 内存分配。  为支持此分配、将 CONFIG_ARK_FORCE_MAX_ORDER 内核参数设置为 15(假设页面大小为 4K)。

    谢谢、
    Jeff

    e2e.ti.com/.../Big_5F00_Buck_5F00_Bunny_5F00_720_5F00_10s_5F00_30MB.mp4

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jeffrey、  

    感谢您的参与。 以下几个澄清问题:

    1. 您是否已经在  6.12 内核中设置了带有 CONFIG_ARK_FORCE_MAX_ORDER=15 的 CMA 分配、或者是否为新设置? 默认值是什么?
    2. 您能否确认在 u-boot CMA 参数中传递了什么 CMA?  
    3. 如果您更改 u-boot cmdline 中的 CMA、内核崩溃是否会发生、如下所示:
      https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-j784s4/11_01_00_03/exports/docs/linux/How_to_Guides/Target/How_To_Carve_Out_ cma.html#how-to-configure-the-cma-size

    谢谢您、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sarabesh:

    我一直在与 Jeffrey 合作解决这个问题、现在我们有更多详细信息。

    首先、上行 6.12.17 内核和 6.16.9 内核(或 6.15.7 内核,两者的行为相同)上都需要 CMA 配置和 CONFIG_ARCH_FORCE_MAX_ORDER=15。  如果没有这一点、流水线甚至无法启动。  因此、这只是我们现在开始这项工作的一项要求。

    第二,我能够根据上面给出的 gstreamer 命令行和之前连接的 Big Buck Bunny 视频 Jeff 设置一个最小的再制作程序。   我能够  在 TI J784S4XEVM 板上重现崩溃、因此目前我正在对它进行测试。

    我将 J784S4XEVM 板上主线内核版本的问题从 6.12.17 分流到 6.16.9、并发现导致问题的提交结果为:

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit?id=2092b3833487e5ce138f4303f98e46ba0f87f1d0

    请注意、这进入了 6.13 内核系列、但目前正在由 TI 的 SDK 版本 11 向后移植到 TI 的 6.12 供应商内核中。

    我还了解到,如果我只是在 6.16.9 主线内核中恢复这个提交,问题就会消失。

    我发现这个补丁系列刚刚由编解码器 IP 块供应商发布:

    https://lore.kernel.org/linux-media/20250922055255.116-1-jackson.lee@chipsnmedia.com/

    我尝试应用这些修补程序、问题仍然存在。  因此、在这一点上、我认为这是一个上游仍然存在的问题。

    为了使这个崩溃发生,我们已经了解到,在播放大降压兔子视频时打开调试会导致崩溃可靠地发生。  这在我们的生产意图使用中是不必要的,这是有趣的。  根据导致这种情况的原因(添加了编解码器暂停支持)、我假设这可能与推送到编解码器的工作负载有关。

    下面是我用于重现此问题的命令:

    export GST_DEBUG=6
    gst-launch-1.0 \
        filesrc location=Big_Buck_Bunny_720_10s_30MB.mp4 \
        ! qtdemux name=demux demux.video_0 \
        ! h264parse config-interval=0 \
        ! v4l2h264dec capture-io-mode=4 output-io-mode=4 \
        ! videoconvert \
        ! videorate ! video/x-raw,max-rate=30/1 \
        ! queue \
        ! rtpvrawpay \
        ! 'application/x-rtp, media=(string)video, encoding-name=(string)RAW' \
        ! udpsink host=127.0.0.1 port=5000 sync=false async=false

    我计划使用最新标记的 TI 供应商内核尝试此测试、看看是否在那里进行、但我的猜测是这样。

    当我有这些详细信息时、我将向此 TT 添加更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ti-linux-kernel 上的快速更新:

    我刚刚 在电路板上测试了 TI 的内核(提交:ccfe8fee8026cbb23dcd9c69a2bd961c99c58567、标签:11.01.14)、条件与我上一篇文章中描述的相同。

    TI 的内核在我的测试中不会出现崩溃。  这让我很惊讶,但它是很好的知道。  TI 应用于 Wave5 编解码器的其他补丁可能已经解决了此问题、或者内核中其他地方的电源管理代码的某些相互作用自 6.12 以来发生了变化、这导致 Wave5 编解码器在较新的内核中崩溃。

    此时我想我们有一个前进的路径,即简单地恢复违规的内核提交。  从长期来看、我预计这将在上游修复、但与此同时、我们有一个可用的解决方法。

    我认为这个 TT 现在可以关闭了。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:  

    很高兴您能够 在 11.01.14 标签中找到修复程序。 我同意这与运行时 pm 支持提交有关。 分辨率可能是由于增加了 autospend_delay、因此 VPU 在仍有帧正在使用时不会断电。 我注意到、 您共享的 CNM 补丁系列将延迟设置为 500ms、但在我们的树中、您可以看到它设置为 5000ms (https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/drivers/media/platform/chips-media/wave5/wave5-vpu.c?h=11.01.14&id=b4249050fcdb302f50ca047f4606dc8025cf27bb) gst_debug=6 可能使情况减慢到足以使自动暂停在操作过程中触发、从而导致崩溃。

    此致、
    Sarabesh S.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sarabesh:

    我能够再次测试未经修改的 6.16.9 内核、并且只更改了这一行、将 PM 自动暂停延迟设置为 5000 毫秒。  这也适用于大型降压兔子测试制片人,因此这可能是长期的最佳解决方案。

    谢谢你的想法,检查一下,这是非常有帮助的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很高兴听到100。 如果您有任何其他问题、敬请告知。

    此致、
    Sarabesh S.