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.

[参考译文] Linux/AM5718:运行 OpenCL 示例时出错

Guru**** 2535750 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/630073/linux-am5718-error-when-running-opencl-example

器件型号:AM5718

工具/软件:Linux

Howdy、

在带有 Sitara AM57X 的定制电路板上、我从电路板的/var/log/messages 获取以下错误:"user.err 内核:[234.723032] EDMA 43300000。EDMA:dma_cerr_handler:无错误事件的错误中断!"。

当我在 UART 数据交换的同时运行由 ti-processor-sdk-linux-rt-am57xx-evm-03.02.00.05-linux-x86提供的 OpenCL 示例时、会发生此错误。

同时、当错误发生时、我观察到 UART 控制台确实冻结、仍然可以使用 ssh 控制台连接到电路板。

我对此进行了调查。 在源代码中,错误来自 kernel-source/drivers/dma/edma.c:static irqreturn_t dma_ccertr_handler (int IRQ,void *data)。 通过在这个代码源中进行仪表、现在我知道这个错误是由"EDMA3_cerrint"中断生成的。 但我不知道为什么。 我已经 çof 了一些器件的数据表、但我没有发现任何东西可以开始跟踪。

从这一点开始、我被阻止了。 您是否有一些想法来解决此错误或提高对它的了解?

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

    是否可以从/var/log/messages 或 dmesg 日志中发布整个日志?

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

    您好!

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

    此错误来自 EDMA.c:
    if (!EDMA_ERROR_PENDING (ECC)){
    /*
    *寄存器指示除 IRQ 之外没有挂起的错误事件
    已调用*处理程序。
    *要求 EDMA 重新评估错误寄存器。
    *
    DEV_ERR(ECC->DEV,"%s":无错误事件的错误中断!\n",
    __func__);
    EDMA_WRITE (ECC、EDMA_EEVAL、1);
    返回 IRQ_NONE;



    尝试返回 IRQ_Handled 而不是 IRQ_none、并查看结果是什么。

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

    您好!

    我尝试了您的最后一个建议、结果日志位于附件(e2e.ti.com/.../dmesg_5F00_IRQ_5F00_HANDLED_5F00_For_5F00_TI.txt)中。 我观察到日志消息中的任何重大变化。 您能否解释它[IRQ_NONE 至 IRQ_Handled]为何会影响配置?

    在我的系统中、我有2个 UART 连接到电路板。 当我使用 OpenCL [冻结第一个 UART]并且同时通过第二个 UART 发送一个传输帧时、会发生 EDMA 问题。

    使用 ftrace `echo "edma_** omap_8250*"> set_ftrace_filter`,当我在 SSH 中运行 OpenCL 时(`while (true)执行 echo "offline:start">/home/root/tracing/trace_marker;./offline;echo "offline": stop">/home/root/tracing/trace_marker done;`)在通过第二个 UART 发送传输帧的同时、在内核日志中获取 EDMA 错误、并获取以下 Ftrace 日志: e2e.ti.com/.../edma_2D00_omap_2D00_dma_2D00_16h32_2D00_08_2D00_11_2D00_2017_5F00_for_5F00_TI.log

    我看到了主线内核中的以下补丁、这些补丁可能会影响我的配置:

     *串行:8250:8250_OMAP:修复竞态 b/w DMA 完成和 RX 超时(a1bfb6eb300d008decfbcdf13b0fda536d22dea9)

     *串行:8250:OMAP:禁用控制台 UART 的 DMA (84b40e3b57eef1417479c00490dd4c9f6e5ffdbc)

    您对这些补丁有何看法? 我考虑尽快申请,看看其中一个是否可以解决教育、管理和安全问题。

    您有其他建议吗?

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

    两个增补程序:
    patchwork.kernel.org/.../
    patchwork.kernel.org/.../
    已应用于最新的 TI Linux SDK (v04.01.00.06、使用内核版本4.9.41)。

    您能否分享您使用的 SDK 版本? 如果是较旧的修补程序、则可以尝试使用这些修补程序来查看它们是否可以解决您的问题。

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

    您好!

    我的 SDK 版本是 ti-processor-sdk-linux-rt-am57xx-evm-03.02.00.05-linux-x86

    我尝试过这些修补程序、它们无法解决我的问题

    禁用 DMA、避免 UART 控制台冻结、但 EDMA 问题仍然存在

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

    只是想让你知道我正在研究这个问题。

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

    您能否为 UART 共享 DTS 节点? 是否确定在多个 SoC 模块中不使用相同的 DMA 通道?

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

    Yordan、您好!

    我正在处理"Darth Vader"这个问题。

    下面是 custom.dts filee2e.ti.com/.../custom_2D00_board_2D00_for_2D00_ti.dts.txt

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

    uart1:串行@4806a000{
    兼容="ti、dra742-UART"、"ti、OMAP4-UART";
    REG =<0x4806a000 0x100>;
    中断扩展=<&crossbar_MPU GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH_>;
    ti、hwmods ="uart1";
    时钟频率=<48000000>;
    STATUS ="禁用";
    };

    uart2:串行@4806c000{
    兼容="ti、dra742-UART"、"ti、OMAP4-UART";
    REG =<0x4806c000 0x100>;
    中断= ;
    ti、hwmods ="uart2";
    时钟频率=<48000000>;
    STATUS ="禁用";
    DMA =<&EDMA_Xbar 51 0>、<&EDMA_Xbar 52 0>;
    dma-names ="TX"、"Rx";
    };

    uart3:串行@48020000{
    兼容="ti、dra742-UART"、"ti、OMAP4-UART";
    REG =<0x48020000 0x100>;
    中断= ;
    ti、hwmods ="uart3";
    时钟频率=<48000000>;
    STATUS ="禁用";
    DMA =<&EDMA_Xbar 53 0>、<&EDMA_Xbar 54 0>;
    dma-names ="TX"、"Rx";
    };
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将查看这些内容并进行更新。

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

    很抱歉耽误你的时间。 我检查了 UART 设置、它们是正确的。
    我不知道您为什么会看到此错误。

    您能解释一下您运行的是哪一个 OpenCL 示例吗? 或者、这是一个定制程序、在这种情况下、它会做什么?

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

    我已经与客户进行了讨论、他们将尝试重现 AM572x IDK (TMDXIDK5728)上的问题、以便我们可以在一侧重复他们的设置。 我们将通过 Box 获取他们的软件。

    此致、
    François μ A。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当您有一些反馈时、请告诉我。

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

    您好!

    我正在与客户合作、并尝试在 AM572x IDK 板上重现此问题。

    我使用的是具有相同内核和库版本的相同构建系统(Yocto)、以减少两个板之间的差异(请参阅随附的 DTS)。

    Linux 内核仅以512Mo 的 RAM (如在客户电路板上)启动、在内核命令行上使用 mem=512M。

    我们看不到最初报告的问题、离线测试程序运行正常...

    因此、我们仔细观察了 CPU 硬件、我们注意到 CPU 版本可能不同。

    在客户电路板上、CPU ID 为 XAM5718ZBOXES、在 IDK 电路板上、CPU ID 为 XAM5718AABCXEA。

    但 cpuinfo 在两个板上报告相同的值(奇怪)

    root@am5718:/# cat /proc/cpuinfo
    处理器 :0
    型号名称 :ARMv7处理器版本2 (v7l)
    BogoMips :12.29
    功能 :半拇指 fastmult VFP EDSP thumbee neon vfpv3 TLS vfpv4 idivt idivt vfpd32 lpae evtstrm
    CPU 实现器:0x41
    CPU 架构:7
    个 CPU 型号 :0x2
    CPU 部件 :0xc0f
    CPU 修订版:2
    
    硬件 :通用 DRA72X (平展设备树)
    修订版 :0000
    串行 :00000000000000000000
    

    您是否知道 CPU 硬件是否真正不同?

    我们还注意到 GIC 不同

    在 IDK 板上、我们使用了带有两个 arch_timer 的 GICv2:

    # cat /proc/interrupts
              CPU0       
     16:         0     CBAR 32级别    gp_timer
     17:         0    GICv2 29 Edge     ARCH_TIMER
     18:     25085    GICv2 30 Edge     ARCH_TIMER
     22:         0     CBAR  4级    L3-dbg-IRQ
     23:         0    WUGEN 10级别    L3-APP-IRQ
     27:         0     CBAR  8级    OMAP-DMA-引擎
     30:         0     CBAR 361级别    43300000。EDMA_ccint
     32:         0     CBAR 359级别    43300000。EDMA_cerrint
     35:         0     CBAR 24级别    4ae1000.GPIO
     68:         0     CBAR 25电平    48055000。GPIO
    101:         0     CBAR 26电平    48057000.GPIO
    134:         0     CBAR 27电平    480590.GPIO
    167:         0     CBAR 28电平    4805b000.GPIO
    200:         1     CBAR 29 4805d000.GPIO     
    233:         0     CBAR 30电平    480510.GPIO
    266:         0     CBAR 116级别    480530.GPIO
    299:      5885     CBAR 69 Level    48020000.serial
    310:        44     CBAR 251 level    mbox_dsp1_ipc3x
    335:       389     CBAR 51级别    48070000.i2c
    338:         0     CBAR 23等级    40d01000.MMU
    339:         0     CBAR 145级    40d02000.MMU
    340:         0     CBAR 395级    588820.MMU
    341:         0     CBAR 396级别    55082000.MMU
    344:         0     CBAR 49级别    4a140000.SATA
    349:      4882     CBAR 335级别    48484000以太网
    350:       749     CBAR 336级    48484000以太网
    359:         0     CBAR 46级别    4b101000.sham
    360:         0     CBAR 47层    48090000.rng
    430:         0  pinctrl 584 Edge     48020000.serial
    IPI0:         0 个 CPU 唤醒中断
    IPI1:         0 定时器广播中断
    IPI2:         0 重新安排中断
    IPI3:         0 函数调用中断
    IPI4:         0 个单功能调用中断
    IPI5:         0 个 CPU 停止中断
    IPI6:         0 IRQ 工作中断
    IPI7:         0 个完成中断
    错误:         0

    在客户电路板上、仅使用 GIC 的一个 ARCH_TIMER:

    # cat /proc/interrupts
              CPU0
     16:         0     CBAR 32级别    gp_timer
     19:  44970158      GIC 27 Edge     ARCH_TIMER
     22:         0     CBAR  4级    L3-dbg-IRQ
     23:         0    WUGEN 10级别    L3-APP-IRQ
     27:  34885232     CBAR  8级    OMAP-DMA 引擎
     30:       256     CBAR 361级别    43300000。EDMA_ccint
     32:         0     CBAR 359级别    43300000。EDMA_cerrint
     35:         0     CBAR 24级别    4ae1000.GPIO
     68:         0     CBAR 25电平    48055000。GPIO
    101:         0     CBAR 26电平    48057000.GPIO
    134:         0     CBAR 27电平    480590.GPIO
    167:         0     CBAR 28电平    4805b000.GPIO
    200:         0     CBAR 29电平    4805d000.GPIO
    233:         0     CBAR 30电平    480510.GPIO
    266:         0     CBAR 116级别    480530.GPIO
    299:       907     CBAR 67级    4806a000.serial
    300:        13     CBAR 69级别    48020000.serial
    303:         5     CBAR 251 Level    mbox_dsp1_ipc3x
    323:         0     CBAR 23级别    40d01000.MMU
    324:         0     CBAR 145级    40d02000.MMU
    325:         0     CBAR 395级    588820.MMU
    328:         0     CBAR 49级别    4a140000.SATA
    332:         0     CBAR  1级    48078000.elm
    333:         0     CBAR 15电平    GPMC
    335:      5186     CBAR 335级别    48484000以太网
    336:         0     CBAR 336级    48484000以太网
    342:         0     CBAR 46级别    4b101000.sham
    343:         0     CBAR 47水平    48090000.rng
    IPI0:         0 个 CPU 唤醒中断
    IPI1:         0 定时器广播中断
    IPI2:         0 重新安排中断
    IPI3:         0 函数调用中断
    IPI4:         0 个单功能调用中断
    IPI5:         0 个 CPU 停止中断
    IPI6:         0 IRQ 工作中断
    IPI7:         0 个完成中断
    错误:         0

    最后、这两块电路板使用的是非常相似的 Linux 系统、但由于硬件差异、我们无法继续使用。

    我们希望在 IDK 板上使用第二个 UART、但 RS485芯片转换器和其他外设已使用 CPU 引脚...  

    此信息能为您提供帮助吗?

    此致、

    Romain Naour

    e2e.ti.com/.../customer_5F00_like_5F00_dts_5F00_for_5F00_IDK.dts.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将对此进行研究。 请注意、我的反馈将会延迟、因为我对假期很好。

    此致、
    Yordan