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.

[参考译文] AM620-Q1:深度睡眠和放大器;仅 MCU LPM 不适用于新的 SDK 11

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1506776/am620-q1-deep-sleep-mcu-only-lpms-don-t-work-with-new-sdk-11

器件型号:AM620-Q1

工具/软件:

您好:

我们使用的是新的 SDK 11。 我已经获取了 R5 DM 的预编译映像(对于 am62xx-LP、为 ti-dm)。

SYSFW ABI:4.0 (固件版本0x000b'11.0.7--v11.00.07 (Fancy Rat)')

当我尝试进入 DEEP SLEEP 或仅 MCU 模式时、ti-sci 出现错误:

/home/user # echo mem >/sys/power/state
[207.626412] PM:暂挂进入(深)
[ 207.644474]文件系统同步:0.014秒
[207.681605] 冻结用户空间进程
[ 207.688258]已完成冻结用户空间进程(经过0.002秒)
[207.695325] 杀虫器已停用。
[207.698637] 冻结剩余的可冻结任务
[207.705249] 冻结剩余的可冻结任务已完成(经过0.002秒)
[ 207.712911] printk:暂停控制台(使用 NO_CONSOLE_SUSPEND 进行调试)
[207.726163] RTC-rv8803 1-0032:电压低、数据无效。
[ 208.041420]=> ti_sci:dev system-controller@44043000、id 179、stat 1、constr resp = 2
[ 208.041460] dwc3-am62 f910000.dwc3-USB:TI_sci_PD:ID:179设置设备约束。
[ 208.041744]=> ti_sci:dev system-controller@44043000、id 178、stat 1、constr resp = 2
[ 208.041767] dwc3-am62 f900000.dwc3-USB:TI_sci_PD:ID:178设置设备约束。
[208.042712] am65-cpsw-Nuss 8000000.Ethernet eth0:链路断开
[208.043040] am65-cpsw-Nuss 8000000.Ethernet eth1:链路断开
[ 208.049583]=> ti_sci:dev system-controller@44043000、id 117、stat 1、constr resp = 2
[ 208.049627] rtc-ti-k3 2b1f0000.rtc:TI_sci_pd:ID:117设置器件约束。
[ 208.049972]=> ti_sci:sleep resp = 0
[208.049989] ti-sci 44043000.system-controller:无法准备休眠
[208.050006] ti-sci 44043000.system-controller:pm:dPM_run_callback ():platform_pm_suspm+0x0/0x6c 返回-19
[208.050065] ti-sci 44043000.system-controller: pm: failed to suspend: error -19
[208.050088] PM:某些设备无法暂停或检测到早期唤醒事件

我添加了一些带有"=>"的额外 printk-s。

已发送3个开发约束:2个 USB + 1个 RTC。 它与 Foundational_Components Power_Management 文档的日志中的操作相同:https://software-dl.ti.com/processor-sdk-linux/esd/AM62X/latest/exports/docs/linux/sdk/sdk/pm_low_power_mode.html#deep-sleep

因为我 understad USBs 是例外。

从 MCU+ SDK src 代码:

/drivers/device_manager/rm_pm_hal/rm_pm_hal_src/pm/drivers/lpm/lpm_handler.c

                               /**
                                *如果有约束的设备属于主 devgrp ,则不可能有 lpm
                                * 例外情况:USB0和 USB1
                                */
                               if (devgrp == main_devgrp){
                                       if (((i == USB0_DEV_ID)||(i == USB1_DEV_ID)||(i == USB0_ISO_DEV_ID)||(i == USB1_ISO_DEV_ID)){

我甚至尝试关闭 RTC、但没有任何帮助。

来自 DM 的响应为0x0 = NACK、而不是0x2=ACK。

因此,我完全禁用了(在 ti_sci_pm_domains.c 的源代码中注释)发送 dev (wakeups )约束。

运行此操作后、它现在有效:我可以进入深度睡眠模式和仅 MCU 模式(具有延迟限制)。

问题是:

1.你知道为什么它不适用于 USBs 吗?

2、是否应该进入深度睡眠模式,内部 RTC DEV 117约束?

3.我还看到发送了3个 UART 约束、但我已习惯通过向 SYS-FS 电源/唤醒写入"禁用"来将其关闭。 是否可以在 devtree 中禁用它?

4.是否可以从设备树中禁用 USB 限制? 我没有在那里使用唤醒源 propperty。

提前感谢您。

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

    您好:

    我们会考虑这一点、以便留出一些时间在 SDK 11.0上进行复制。 如果您没有收到响应、请在星期二之前 ping 此主题。

    谢谢、

    Anshu

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

    您好、Anshu!

    有新消息吗?

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

    您好:

    我们还在尝试从部分 IO (sdk11)唤醒。

    [69.509079]  重新启动:关闭电源
    [  69.512254] ti-sci 44043000.system-controller:/bus@f0000/bus@4000000/CAN@4e08000确定为部分 IO 的唤醒源
    [69.523475]  ti-sci 44043000.system-controller:由于找到了启用了唤醒功能的设备、因此进入部分 IO。
    错误:  等待线程 SP_RESPONSE 填充时超时
    错误:  线程 SP_RESPONSE 验证失败(-60)
    错误:  消息接收失败(-60)
    错误:  获取响应失败(-60)
    错误:  传输发送失败(-60)

    我遇到了奇怪的错误。

    我检查了源代码:

    static int tisci_sys_off_handler(struct sys_off_data *data)
    {
            struct ti_sci_info *info = data->cb_data;
            bool enter_partial_io = tisci_canuart_wakeup_enabled(info);
            int ret;
     
            if (!enter_partial_io)
                    return NOTIFY_DONE;
     
            ret = tisci_enter_partial_io(info);
     
            if (ret) {
                    dev_err(info->dev,
                                    "Failed to enter Partial-IO %pe, trying to do an emergency restart\n",
                            ERR_PTR(ret));
                    emergency_restart();
            }
     
            mdelay(5000);
            emergency_restart();
     
            return NOTIFY_DONE;
    }

    我们是否确实需要在此处重新启动紧急情况?

    mdelay(5000);
    emergency_restart();

    ??????????????????????????????????

    从 reboot.c:

    /**
     *      emergency_restart - reboot the system
     *
     *      Without shutting down any hardware or taking any locks
     *      reboot the system.  This is called when we know we are in
     *      trouble so this is our best effort to reboot.  This is
     *      safe to call in interrupt context.
     */
    void emergency_restart(void)
    {
            kmsg_dump(KMSG_DUMP_EMERG);
            system_state = SYSTEM_RESTART;
            machine_emergency_restart();
    }
    EXPORT_SYMBOL_GPL(emergency_restart);
    

    此致、

    Sergey。

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

    你好,我已经阅读了提交消息,      不能到达"mdelay(5000); emergy_restart();"点。 但恰好在5秒后、我就得到了这些错误。 看起来系统由于某种原因无法正常进入部分 IO。。