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.

[参考译文] AM62P-Q1:使用 Uboot 在 SPL 模式下加载 MCU 固件时、MCU_ONLY 模式无法用于睡眠和唤醒

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1524502/am62p-q1-when-loading-the-mcu-firmware-in-spl-mode-with-uboot-the-mcu_only-mode-cannot-be-used-for-sleep-and-wake-up

器件型号:AM62P-Q1

工具/软件:

1、在 SPL 模式下使用 K3 驱动器加载 MCU。 MCU_ONLY 模式进入睡眠模式后、可以将其唤醒

2、当我们切换到 uboot 以加载 MCU 时、我们发现进入睡眠模式后无法唤醒 MCU_ONLY 模式。修改方法如下:k3_rproc.env 文件所示

dorprocboot=1

3、在 env 板上使用 IPC(ipc_rpmsg_echo_linux)、Verify 的 MCU 演示、通过输入 MCU 串行端口来唤醒

4、soc 进入睡眠模式并唤醒:的命令

echo 100 > /sys/devices/system/cpu/cpu0/power/pm_qos_resume_latency_us
echo mem > /sys/power/state

5、SDK 版本:10.0

6、也可以使用 IO 唤醒。 目前、我已经看到 IPC 演示可以通过 IPC 唤醒异常

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

    您好:

    如果您要进入、dorprocboot=0 MCU 只能工作吗?

     dorprocboot=1 时、您能否共享 Linux 引导日志和挂起日志?

    有关引导远程内核的信息、请参阅 Linux Academy: https://dev.ti.com/tirex/explore/node?node=A__AX2DLf3J3o-JHYMSq7Eg0w__AM62A-ACADEMY__WeZ9SsL__LATEST

    此致、

    Anshu

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

    K3 日志的正常内核驱动程序加载:

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

    尊敬的 Anshu:

    请帮助查看以下日志。

    SDK_10.1、EVM 板上的 SD 引导模式。

    –1-

    uEnv.txt 中的 dorprocboot=0

    Linux 日志:

    e2e.ti.com/.../linux_5F00_boot_5F00_lpm_5F00_ok.log

    MCU 日志:

    e2e.ti.com/.../mcu_5F00_boot_5F00_lpm_5F00_ok.log

    –2-

    uEnv.txt 中的 dorprocboot=1

    Linux 日志:

    e2e.ti.com/.../linux_5F00_boot_5F00_lpm_5F00_ko.log

    MCU 日志:

    e2e.ti.com/.../mcu_5F00_boot_5F00_lpm_5F00_ko.log

    如果更改为使用 u-boot 加载 MCU 固件、同时在 Linux 中按“echo mem >/sys/power/state “

    MCU 内核没有中断来触发函数 ipc_rp_mbox_callback 和后信标“gLpmSuspendSem"</s>“

    LPM_MCU_SUSPEND_TASK 在两个命令“lpm_MCU_SUSPEND_TASK"上“上仍处于挂起状态。

    请帮忙。 谢谢。

    此致

    Joe

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

    尊敬的 Anshu:

    更新更多详细信息。

    当 u-boot 加载 MCU 固件时、它在 Linux 内核中是“仅 IPC“模式。 它不会注册对 R5 Remoteproc 驱动程序的 pm_notifier 调用。

    发出“echo mem >/sys/power/state 时、它不会调用 k3_r5_suspend_late -> k3_r5_suspend ->发送“RP_MBOX_suspend_system"。“。

    这是“IPC-only mode“和“Remoteproc mode“之间的差异、请检查文件“ti_k3_rproc_configure_mode 中的函数 k3_r5_rproc_mode

    我没有找到解决方法、请帮助检查并提出建议。 谢谢。

    此致

    Joe

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

    尊敬的 Anshu:

    我制定了一种解决方法来使其正常工作。 但 Linux 驱动程序会发生变化。 请帮助检查。

    diff --git a/drivers/remoteproc/ti_k3_r5_remoteproc.c b/drivers/remoteproc/ti_k3_r5_remoteproc.c
    索引 90d680ed6。37927930b 100644
    --- a/drivers/remoteproc/ti_k3_r5_remoteproc.c
    ++ b/drivers/remoteproc/ti_k3_r5_remoteproc.c
    @@–509、13 +509、13 @@ static int k3_r5_suspend(结构 rproc * rproc)
     
           kproc->suspend_status = 0;
           reinit_completion (&kproc->suspend_comp);
    -
    +      pr_info(“===%s、发送消息 RP_MBOX_SUSPEND_SYSTEM\n“、__func__);
           RET = mbox_send_message (kproc->mbox、(void *) msg);
           如果 (RET < 0){
                   DEV_err (dev、“PM mbox_send_message failed:%d\n“、ret);
                   返回 ret;
           }
    -
    +      pr_info(“===%s、发送消息 RP_MBOX_SUSPEND_SYSTEM DONE\n“、__func__);
           RET = WAIT_FOR_FINDY_TIMEOUT (&kproc->SUSPEND_comp、TO);
           如果 (ret = 0){
                   DEV_err (dev、“%s":“:正在等待 rproc 完成事件\n“、__func__);
    @@–614,6+614,7 @@ static int k3_r5_suspend_rate(结构设备*dev)
                   /*检查是否设置了 PM 通知程序呼叫。 如果是、则暂停/恢复
                    *支持
                    */
    +              pr_info(“===%s、ti_sci_id = 0x%x \n“、__func__、core->ti_sci_id);
                   IF (kproc->IF pm_notifier.notifier_call)
                           k3_r5_suspend (rproc);
           }
    @@–1385、7 +1386、7 @@ static int k3_r5_rproc_configure_mode(结构体 k3_r5_rproc * kproc)
            *置为无效)、并被视为远程处理模式
            */
           if (c_state &&!ret &&!halted ){
    -              dev_info (cdev、“Configured R5F for IPC-only mode \n“);
    +              DEV_INFO (cdev、“配置的 R5F 仅 IPC 模式、ti_sci_id = 0x%x\n“、core->ti_sci_id);
                   kproc->rproc->state = RPROC_DEPLATE;
                   RET = 1;
                   /*仅使用所需的仅 IPC 模式操作覆盖 rproc 操作*/
    @@–1397、8 +1398、14 @@ static int k3_r5_rproc_configure_mode(结构 k3_r5_rproc * kproc)
                   kproc->rproc->ops->detach = k3_r5_rproc_detach;
                   kproc->rproc->ops->get_loaded_rsc_table =
                                                   k3_r5_get_loaded_rsc_table;
    +              if (core->ti_sci_id == 0x09)
    +              {
    +                      /*添加对暂停/恢复的支持*/
    +                      kproc->pm_notifier.notifier_call = r5f_pm_notifier_call;
    +                      register_pm_notifier(&kproc->pm_notifier);
    +              }
           } else if(!c_state){
    -              dev_info (cdev、“Configured R5F for Remoteproc mode\n“);
    +              dev_info (cdev、“Configured R5F for remoteproc mode、ti_sci_id = 0x%x\n“、core->ti_sci_id);
                   /*添加对暂停/恢复的支持*/
                   kproc->pm_notifier.notifier_call = r5f_pm_notifier_call;
                   register_pm_notifier(&kproc->pm_notifier);
    @@–1487、10 +1494、10 @@ static int k3_r5_cluster_rproc_init(结构 platform_device *pdev)
                                   RET);
                           转至外;
                   }
    -
    +init_rmem:
                   init_completion (&kproc->shut_comp);
                   init_completion (&kproc->suspend_comp);
    init_rmem:
    +
                   k3_r5_adjust_tcm_sizes (kproc);
     
                   RET = k3_r5_reserved_mem_init (kproc);

    Attched 在 Linux 中登录

    e2e.ti.com/.../workaround_5F00_linux_5F00_boot_5F00_lpm_5F00_ok.log

    e2e.ti.com/.../workaround_5F00_mcu_5F00_boot_5F00_lpm_5F00_ok.log

    此致

    Joe

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

    您好 Joe、

    我需要与 IPC 专家交谈以了解 IPC 机制、下周我们将在星期二上与您联系。

    谢谢、

    Anshu

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

    您好 Joe、

    感谢您的耐心等待我们研究这个主题。 请注意、由于您正在进行我们尚未验证的软件更改、因此支持可能有限。 但是、我认为这是一个值得研究的主题、我计划稍后基于此主题提交要求。

    几个讨论要点:

    1) 从整体概念的角度来看、是否有任何理由不允许 Linux 关闭 Linux 未初始化的核心?

    在我的脑海里,我不知道有什么具体的理由不这样做。

    您可能会认为处理器内核只应关闭特定处理器内核所拥有的设备(例如,Linux 不应关闭其他处理器内核所拥有的外设)。 但是、如果 Linux 是“负责“低功耗转换的处理器内核、大概 Linux 开发人员会知道其他内核正在执行的操作并以安全的方式关闭非 Linux 内核。

    使用正常关机是确保非 Linux 内核“根据自己的条件“关闭而不是仅仅获得电源的一种方法。 有关正常关断概念的更多信息、请参阅 AM62Px Academy
    多核>引导和禁用处理器内核>正常关机
    https://dev.ti.com/tirex/explore/node?node=A__Aa9uP63kd2xbTRZBzxKauA__AM62P-ACADEMY__fp5YxRM__LATEST 

    2) 这些具体的更改是否合适? 我们是否会建议进行任何其他更改?

    我有点惊讶地听到,事情完全与你的变通办法代码的工作. 也许低功耗模式可以工作、但我假设 Linux 无法关闭并重新启动非 Linux 内核?

    下面是我希望看到代码更改的地方:

            /*
             * IPC-only mode detection requires both local and module resets to
             * be deasserted and R5F core to be unhalted. Local reset status is
             * irrelevant if module reset is asserted (POR value has local reset
             * deasserted), and is deemed as remoteproc mode
             */
            if (c_state && !ret && !halted) {
    /* I expected to see changes here */
    /* Including removing these NULL overrides */
                    dev_info(cdev, "configured R5F for IPC-only mode\n");
                    kproc->rproc->state = RPROC_DETACHED;
                    ret = 1;
                    /* override rproc ops with only required IPC-only mode ops */
                    kproc->rproc->ops->prepare = NULL;
                    kproc->rproc->ops->unprepare = NULL;
                    kproc->rproc->ops->start = NULL;
                    kproc->rproc->ops->stop = NULL;
                    kproc->rproc->ops->attach = k3_r5_rproc_attach;
                    kproc->rproc->ops->detach = k3_r5_rproc_detach;
                    kproc->rproc->ops->get_loaded_rsc_table =
                                                    k3_r5_get_loaded_rsc_table;
            } else if (!c_state) {
                    dev_info(cdev, "configured R5F for remoteproc mode\n");
                    /* add support for suspend/resume */
                    kproc->pm_notifier.notifier_call = r5f_pm_notifier_call;
                    register_pm_notifier(&kproc->pm_notifier);
                    ret = 0;
            }

    此致、

    Nick

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

    您好、Nick、

    感谢你的帮助。

    我的理解是 平稳关断将在 Remoteproc 模式下工作、而不能在 仅 IPC 模式下工作。

    我正在尝试使用 SDK10.1 预编译映像、并与以下 2 种情况进行比较。

    –1-

    uEnv.txt 中的 dorprocboot=0

    MCU R5F 在 Remoteproc 模式下工作

    root@am62pxx-EVM:~# dmesg | grep “configured R5F“
    [ 7.184328] platform 79000000.r5f:配置了用于远程处理模式的 R5F
    [ 7.238147] platform 78000000_r5f:将 R5F 配置为仅 IPC 模式

    root@am62pxx-EVM:~# echo stop >/sys/class/remoteproc/remoteproc0/state
    [47.439977] remoteproc remoteproc0:已停止远程处理器 79000000.r5f

    –2-

    uEnv.txt 中的 dorprocboot=1

    MCU R5F 在 仅 IPC 模式下工作

    root@am62pxx-EVM:~# dmesg | grep “configured R5F“
    [ 6.872743] platform 79000000.r5f:已将 R5F 配置为仅 IPC 模式
    [ 7.380286] platform 78000000_r5f:已将 R5F 配置为仅 IPC 模式

    root@am62pxx-EVM:~# echo stop >/sys/class/remoteproc/remoteproc0/state
    -sh:echo:写入错误:参数无效
    Root@am62pxx-EVM:~#

    请帮助检查并为我们提供指导。 谢谢你。

    此致

    Joe

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

    您好 Joe、

    仅 IPC 模式不支持平稳关断、原因与仅 IPC 模式不支持低功耗模式相同。

    您修补了驱动程序以启用低功耗模式、这实际上会关闭非 Linux 内核(如果进入“仅 MCU“模式、则 MCU 域内核除外)。 我怀疑如果您删除了我在上面提到的代码块中的 NULL 条目、您可能也可以启用“echo stop“。

    此致、

    Nick

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

    您好、Nick、

    感谢您的澄清、客户请求低功耗模式支持、同时远程内核在仅 IPC 模式下工作。

    您能否帮助发布正式变更?

    此致

    Joe

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

    您好 Joe、

    拥有此驱动程序的 Linux 开发人员将在接下来的几周内休假。 我可以向您介绍测试代码的步骤、但我需要一些时间才能与他们讨论这个问题。 要对即将推出的 SDK 11.1 进行任何代码更改为时已晚、因此、如果客户要寻找官方的 TI SDK 版本、则需要一些时间。 我也不能保证这是“可扩展“代码 — 如果这里的整个概念是更广泛的 Linux 社区拒绝的、那么我们就无法将代码添加到任何 SDK 版本中。

    是否有特定的需求时间? 这一需求时间范围的具体要求是什么? 如果需要、请随时单独给我发送电子邮件。

    此致、

    Nick