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.

[参考译文] TDA4VM:函数 K3 rproc 使用邮箱发送数据似乎有错误

Guru**** 2539500 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1160755/tda4vm-the-function-k3-rproc-use-mailbox-to-send-data-seems-has-a-bug

器件型号:TDA4VM

您好、香榭丽舍

客户告知在 ti_k3_dsp_remoteproc.c/ti_k3_r5_remoteproc.c 中、当这些驱动程序使用邮箱发送消息时、他发现 Linux 内核代码中存在错误。

他怀疑 TI 为什么没有 这个问题。

静态   K3_DSP_rproc_kick (struct  rproc * rproc、 int  vqid)
   struct  k3_dsp_rproc *kproc =  rproc->priv;
   struct  device *dev =  rproc->dev.parent
   mbox_msg_t msg =(mbox_msg_t) vqid
    转台



  /*发送邮箱有效载荷中触发的虚拟队列的索引*/
   RET =  mbox_send_message (kproc->mbox、(void *) msg);
   如果 (RET <  0)
     DEV_ERR (dev、 "发送邮箱消息失败、状态= %d\n"
       RET);
关于红色代码、 "msg" val 是邮箱 msg 缓冲区的指针。
当他们发送消息时,他们将指针放入邮箱客户端的发送缓冲区队列中。
此时、如果他们配置邮箱 以非块模式发送、就像 TI 代码一样:
client->Rx_callback =  K3_DSP_rproc_mbox_callback
   CLIENT->TX_BLOCK = false;
然后、在 mbox_send_message 函数调用返回后、buf 仍在邮箱 Clent 的发送 buf 和中
不发送、然后由于"msg" val 是局部 val、因此在 KICK 函数完成后它将是空闲的。 但缓冲器仍在中  
Mailbox Clent 的 sendbuf、但该 buf 已释放、不正确。 因此 、会 发生践踏。
如日志所示,他们希望使用邮箱发送 VQID,首先发送数据是正常的,vqid 是1,然后错误获取,vqid 是一个大数据。 0x95178c10。


我使用了 arm pl320邮箱,我在 rproc 驱动程序中使用该邮箱的代码是:
静态   xx_RPU_rproc_kick (struct  rproc * rproc、 int  vqid)
   struct  xx_RPU_rproc *kproc =  rproc->priv;
   struct  device *dev =  rproc->dev.parent
   uint32_t  msg[7]={0};
    转台

   MSG[0] vqid

  /*发送邮箱有效载荷中触发的虚拟队列的索引*/
   RET =  mbox_send_message (kproc->mbox[vqid]
                 (void *) msg);
   如果 (RET <  0)
     DEV_ERR (dev、 "发送邮箱消息失败、状态= %d\n"、 ret);

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

    感谢您的回复、 非常感谢您的回复。

    在深入了解 邮箱框架和 K3 rproc 驱动程序后,我发现确实可以使用 TI。

    重点是:TI 只使用 无符号长整型发送 VQID 数据, 在邮箱的控制器驱动程序中,它将直接将数据提供给邮箱发送寄存器。  但在我们的芯片中、我们的邮箱与 ARM pl320配合使用、邮箱发送的数据 FIFO 为7。 因此、我们使用了一个包含 msg[7]的数组进行发送。  然后,在邮箱控制器的 SEND_DATA 函数上,再次使用 msg 点读取数据,从而出现问题。  msg[7]等引用 不能与 局部 val 一起使用。  

    再次感谢 shine。

    我认为将来如果 TI 不仅要发送一个 VQID,而且要像邮箱那样发送更多的 VQID,可能也会出现此问题。

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

    Shine、Jukoo、您好

    TI K3 R5F/DSP remoteproc 驱动程序及其对 OMAP 邮箱驱动程序的邮箱使用没有问题。 邮箱子系统 API 语义使用指针、并由相应的平台邮箱驱动程序正确转换/推迟。 因此,行为取决于邮箱平台驱动程序及其客户程序。

    OMAP 邮箱驱动程序经过优化、可直接使用指针值作为有效载荷。 这就消除了必须使用指针的所有生命周期管理以及在邮箱客户程序和邮箱驱动程序之间传递所有权的问题。

    此致

    Suman