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.

[参考译文] AM625:由于 USB LPSC 超时、无法进入深度睡眠模式

Guru**** 2393965 points
Other Parts Discussed in Thread: SK-AM62B-P1, AM625

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1461887/am625-failing-to-enter-deep-sleep-due-to-usb-lpsc-timeout

器件型号:AM625
主题中讨论的其他器件:SK-AM62B-P1

工具与软件:

您好!

我们正试图在使用 SDK 10的定制硬件设计上实现深度睡眠、并且发现除非我们禁用 usbss1 Linux 设备树中的节点、否则电路板无法睡眠。 个性签名 不会 必须禁用usbss0才能使深度睡眠工作。 我们在多个板上观察到这种情况。

启用 SYSFW 跟踪后、我们可以看到usbss1、启用后、DM LPM 序列会在启用 USB 复位隔离时失败:

Configuring trace data version to: 0x03007
0x6C000100: Power Management:      PM_LPM_SEQ(Low power mode sequence): DM stub started  Value: 0
0x6C000200: Power Management:      PM_LPM_SEQ(Low power mode sequence): Unlocked MMRs  Value: 0
0x6C000400: Power Management:      PM_LPM_SEQ(Low power mode sequence): DDR in reset isolation  Value: 0
0x6C007700: Power Management:      PM_LPM_SEQ(Low power mode sequence): Unknown Sub Message: 0x77  Value: 0
0x7C000500: Power Management/FAIL(Action failed):      PM_LPM_SEQ(Low power mode sequence): Enabled USB reset isolation  Value: 0

MCU+ SDK 10中包含的 DM 源代码看起来比我们运行的版本略新、但看起来这个步骤是从通过 USB 和 USB ISO 模块的 LPSC 禁用开始的。 附件是 通过 JTAG 收集的 PSC 寄存器的转储;USB0_ISO、USB0和 USB1_ISO 在其 MDSTAT 寄存器中显示为禁用状态、但 USB1具有状态10 (我 在文档中没有看到)、PTSTAT 指示转换正在进行中。 即使在刷新 CCS 中的存储器内容几秒钟后、这些寄存器值也不会改变。 DM 内核的 UART 上的 SYSFW 跟踪停止后一两秒钟(大概是在 LPM 序列已失败之后)才进行 JTAG 连接。

PSC 寄存器:

e2e.ti.com/.../psc_2D00_regs.txt

DM 固件版本:

Sciserver Testapp Built On: Jul 25 2024 06:35:21
Sciserver Version: v2024.07.0.0-REL.MCUSDK.K3.10.00.00.08+
RM_PM_HAL Version: v10.00.08

以下是我们正在测试的修订版中的自定义器件树的链接;USB1节点与 k3-am62x-sk-common.dtsi 中的节点几乎相同、减去了连接器子节点、此外、我们意外将 DRVVBUS 引脚多路复用作为输入。 修复 DRVVBUS 引脚多路复用并移除 连接器子节点不会影响睡眠行为。 两个 USB 接口确实可以在该睡眠问题之外工作。

什么可能导致该状态变化明显挂起? 我们是否可以收集其他调试信息来帮助确定问题?

谢谢!
Zach

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

    尊敬的 Zach:

    我将介绍要尝试的任何其他调试步骤。 请预计周一之前更新。

    您是否尝试过在 TI EVM 上复制此示例?

    谢谢!

    Anshu

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

    尊敬的 Anshu:

    感谢您的参与。 我们可能还缩小了范围;全部细节如下、但总结是、 我们硬件上的睡眠故障似乎与连接下游器件(在任一 USB 接口上)相关、并且我们 在 EVM 上无法进入睡眠而导致故障。


    我们已确认、具有 SDK 10.00.07.04的 SK-AM62B-P1 EVM 未出现开箱即用的此问题。 器件树中的两个 USB 子系统均已启用、电路板似乎按预期处于睡眠状态和唤醒状态。 ( 我们在自己的设计中看到的症状之一是、由于 DM 固件会在出现错误时中止、主板永远不会唤醒。)

    我们还更新了 EVM SDK 10设置中的 board-cfg.bin、以通过 JTAG 确认 LPM 序列运行完成无错误。

     EVM SDK 10设置中的 DM 也会打印与上述定制硬件上完全相同的版本信息。 (我们确实是自行重建 SDK、但我的理解是、我们的 SDK 10基于 TI、所做的更改很少、而且我知道我们从 ti-linux-firmware 中提取预编译的固件;我们不会在 R5上运行任何自定义功能。)

    由于我忘记在上面提到过、因此我们使用rtcwake(根据具体情况提供不同的持续时间)测试睡眠:

    rtcwake -s 10 -m mem

    经过进一步讨论和内部调试、我们实际上发现硬件上的睡眠故障是由于连接了器件所致;我们在 USB1上使用集线器芯片、这就是该接口有问题的原因。

    我们的 USB 拓扑为:

    • USB0:OTG (如 EVM)、AM62 -> Type-B 端口
    • USB1:主机(如 EVM)、AM62 ->双端口集线器->双 Type-A 端口

    现在、我们已经在我们的硬件和 EVM 上通过外部器件尝试了一些设置:

    • 我们的硬件:
      • 两个 USB 均已启用、未插入任何 USB、集线器处于活动状态:睡眠失败
      • 两个 USB 均已启用、未插入任何 USB、HUB 处于复位状态:睡眠 成功
      • 仅启用 USB0、未插入任何设备或仅插入 OTG 适配器(强制主机模式):睡眠成功
      • 仅启用 USB0、闪存驱动器或通过 OTG 适配器插入的外部集线器:睡眠失败
    • EVM (所有测试都启用了两个 USB):
      • 未插入任何接口或仅插入 USB0的 Type-C 适配器 (强制主机模式):睡眠成功
      • 闪存驱动器或外部集线器插入 USB1、或通过 Type-C 适配器插入 USB0: 睡眠成功

    我们确实验证了这里的所有故障都发生在与之前相同的 LPM 序列的 USB 复位隔离步骤处、尽管我们没有再次检查 PSC 寄存器(假设我们只能看到 USB0或 USB1状态转换像以前一样卡住、具体取决于我们插入器件的接口);不过、如果寄存器转储有用、我们可以收集它们。

    这些测试是在 DRVVBUS 引脚多路复用器固定且 USB1连接器子节点从我们的器件树中移除的情况下完成的、如我的第一篇文章所述、因此该usbss1节点应在功能上与 EVM 相同。 usbss0节点存在一些差异、但由于在存在下游器件时两个接口的行为似乎相同、因此usbss0除了 DRVVBUS 引脚多路复用外、我们没有烦恼于更改任何内容。

    我还验证了我们的 Linux 内核和 EVM 构建所基于的提交之间的整个驱动程序/USB/树是相同的。 我们有一个自定义 defconfig、但我已经比较 生成的配置、没有跳出任何与此问题相关的配置。

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

    感谢 Zach 的更新。 我将与我们的软件开发团队分享这一点。 如果您尚未收到回复、请在星期三之前随意 ping 该主题、因为我周一+周二将不在办公室。


    谢谢!

    Anshu

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

    尊敬的 Zach:

    以下是软件开发团队提供的一些反馈:

    当 USB LPSC 尝试关闭时、对 USB IP (如 USB1)有一些状态检查。 如果这些检查中的任何一项失败、那么在关闭 USB LPSC 时就会返回失败。 我们将尝试与 TI 的 USB 团队交谈、了解他们的想法。

    LPSC 状态寄存器将提供有关其失败原因的任何信息。

    因此、可以尝试以下几种方法:

    • 我们可以尝试在进入挂起状态之前卸载 USB 驱动程序。
    • 运行"echo N >/sys/module/printk/parameters/console_suspend、查看是否在暂停 USB 后出现任何错误

    此致、

    Anshu

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

    尊敬的 Anshu:

    谢谢您的分享。

    LPSC 状态寄存器将提供有关失败原因的任何信息。

    是否有一组独立的 LPSC 寄存器、这些寄存器与我在原始帖子中附加的信息相同? 我没有注意到在我发布的内容中设置了任何错误位、但很可能我漏掉了一些内容。 我在 MCU+ SDK 10的 DM 源代码中没有看到这个、但任何固件是否已注意到(L) PSC 中的错误位并将其清除?

    [报价 userid="566841" url="~/support/processors-group/processors/f/processors-forum/1461887/am625-failing-to-enter-deep-sleep-due-to-usb-lpsc-timeout/5615709 #5615709"]

    因此、可以尝试以下几种方法:

    • 我们可以尝试在进入挂起状态之前卸载 USB 驱动程序。
    • 运行"echo N >/sys/module/printk/parameters/console_suspend、查看是否在暂停 USB 后出现任何错误
    [报价]

    禁用 CONSOLE_SUSPEND 后、输出与板载集线器处于活动状态(睡眠失败)和板载集线器保持复位状态(睡眠成功)的输出相同。 对于这些测试、没有任何东西插入 USB0。

    root@mitysom-am62x:~# echo N > /sys/module/printk/parameters/console_suspend
    root@mitysom-am62x:~# rtcwake -s 10 -m mem
    rtcwake: wakeup from "mem" using /dev/rtc0 at Mon Jan 20 17:30:00 2025
    [   66.819741] PM: suspend entry (deep)
    [   66.823475] Filesystems sync: 0.000 seconds
    [   66.830620] Freezing user space processes
    [   66.836797] Freezing user space processes completed (elapsed 0.002 seconds)
    [   66.843806] OOM killer disabled.
    [   66.847027] Freezing remaining freezable tasks
    [   66.852903] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
    [   67.010888] am65-cpsw-nuss 8000000.ethernet eth1: Link is Down
    [   68.750685] ti-sci 44043000.system-controller: ti_sci_cmd_set_device_constraint: device: 117: state: 1: ret 0
    [   68.764147] ti-sci 44043000.system-controller: ti_sci_cmd_set_device_constraint: device: 178: state: 1: ret 0
    [   68.784532] ti-sci 44043000.system-controller: ti_sci_cmd_set_device_constraint: device: 179: state: 1: ret 0
    [   69.674582] remoteproc remoteproc0: stopped remote processor 5000000.m4fss

    我不知道 你是否有某种特定/不同的想法卸载 USB 驱动程序,但卸载只是 dwc3_am62与 rmmod 确实会导致睡眠  在我们的硬件上成功,即使设备仍然插入.

    在器件树中禁用 USB1 (使板载集线器脱离混合模式)并将闪存驱动器插入 USB0 (通过 OTG 适配器)的情况下:

    root@mitysom-am62x:~# lsusb -t
    /:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
        |__ Port 001: Dev 002, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    root@mitysom-am62x:~# rmmod dwc3_am62
    [   87.083655] xhci-hcd xhci-hcd.6.auto: remove, state 1
    [   87.088862] usb usb1: USB disconnect, device number 1
    [   87.094060] usb 1-1: USB disconnect, device number 2
    [   87.162759] xhci-hcd xhci-hcd.6.auto: USB bus 1 deregistered

    在器件树中禁用 USB1并且将外部集线器插入 USB0  (通过 OTG 适配器)的情况下、卸载确实有错误、但之后睡眠仍然成功:

    root@mitysom-am62x:~# lsusb -t
    /:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
        |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/7p, 480M
    root@mitysom-am62x:~# rmmod dwc3_am62
    [   84.639658] xhci-hcd xhci-hcd.6.auto: remove, state 4
    [   84.644868] usb usb1: USB disconnect, device number 1
    [   84.650058] usb 1-1: USB disconnect, device number 2
    [   97.076302] xhci-hcd xhci-hcd.6.auto: Abort failed to stop command ring: -110
    [   97.099594] xhci-hcd xhci-hcd.6.auto: xHCI host controller not responding, assume dead
    [   97.107618] xhci-hcd xhci-hcd.6.auto: Unsuccessful disable slot 1 command, status 25
    [   97.116788] xhci-hcd xhci-hcd.6.auto: USB bus 1 deregistered

    在器件树中启用了两个 USB、 USB1上的板载集线器未保持复位状态、并且没有外部插入时、空载输出/错误与外部集线器相同(同样、睡眠仍会成功)。

    但是、在完全相同的外部集线器或闪存驱动器插入后、EVM 仍然成功进入睡眠状态、因此睡眠问题似乎不是由特定器件本身直接引起的。

    我 现在还注意到、EVM 内核中内置了 dwc3、dwc3_am62和 xhci_plat_hcd 驱动程序、而我们在平台上将它们作为模块进行加载。 并非我真的期望它会有什么不同、但我确实尝试使用这三个内置驱动程序重新构建我们的内核、而睡眠仍然失败(以相同的方式)、板载集线器是唯一的下游器件。 我没有使用这个内核重新测试外部器件。

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

    尊敬的 Zach:

    是否有一组独立于我在原帖中附加的 LPSC 寄存器? 我没有注意到在我发布的内容中设置了任何错误位、但很可能我漏掉了一些内容。 我在 MCU+ SDK 10的 DM 源代码中没有看到此信息、但任何固件是否已注意到(L) PSC 中的错误位并将其清除?[/QUOT]

    抱歉、我想说 LPSC 寄存器 这么做 提供有关失败原因的信息。


    感谢您的实验和更新。

    在设备树中禁用 USB1并将外部集线器插入 USB0  (通过 OTG 适配器)的情况下、卸载确实有错误、但之后休眠仍然成功:

    我会向 USB 团队咨询、看看他们是否对卸载 USB 驱动程序有任何意见、我并不期望这会是个问题。

    我正在研究是否有任何可用于检查的 USB 寄存器来指示其他信息。

    谢谢!

    Anshu

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

    您好!

    只是想签入并查看 TI 是否有任何更新。 不幸的是我们自己没有任何进一步的发展。

    谢谢!
    Zach

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

    尊敬的 Zach:

    上个星期我在处理高优先级工作时出现延误、对此深表歉意。 我将尝试在本周星期四之前获取最新消息。

    谢谢!

    Anshu

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

    尊敬的 Anshu:

    不用担心,但想再次入住。

    在上一篇文章中、您提到了对 USB IP 进行状态检查、这会阻止 LPSC 状态更改成功。 这些文件是否已在某处记录、如果没有、您能否与他人分享? 这可能有助于指导进一步的 测试。

    谢谢!
    Zach

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

    尊敬的 Zach:

    我将在星期二花时间与团队讨论此事。


    谢谢!
    Anshu

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

    太好了、谢谢!

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

    尊敬的 Zach:

    在与团队就此展开一些讨论后、我们可以在 TI EVM 上重现此问题。


    您是否可以尝试使用'echo 0 >/sys/bus/usb/drivers 暂停 USB 集线器 / /power/autosuspend_delay_ms? 检查是否使用'cat /sys/bus/usb/drivers 进行了更改 / /power/runtime_status。 然后尝试 rtcwake 命令。

    如果不起作用、您能否在连接 USB 集线器之前和之后共享"ls -la /sys/bus/drivers/usb /"的输出?

    此外、您能否分享用于 USB 集线器的驱动程序?

    谢谢!
    Anshu

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

    尊敬的 Anshu:

    我们的板载集线器和测试的外部集线器(两者表现出相同的行为)似乎都只使用通用hub驱动程序。

    尝试读取或写入  任何端口目录中的 autossuspend_delay_ms 文件会导致 I/O 错误、如果驱动程序不支持该属性、则内核文档会指出这是预期的行为。 (使用外部集线器的 EVM 上也是这种情况。)

    对于我们测试过的闪存驱动器也是如此、它似乎使用了该 usb-storage驱动器。

    如果我误会了,我尝试了这与自动挂起文件,例如:

    • /sys/bus/usb/drivers/hub/1-1:1.0/1-1-port1/power/autobusup_delay_ms
    • /sys/bus/usb/drivers/usb-storage/1-1:1.0/EP_01/power/autobusup_delay_ms

    对于两个集线器、端口 runtime_status 为active;对于闪存驱动器、则为unsupported

     在以下路径上还有一个 autossuspend_delay_ms 文件、但它已经设置为0、相应的 runtime_status 文件为suspended: /sys/bus/usb/drivers/usb/usb1/1-1/power/autosuspend_delay_ms

    假设最后一条路径应为 /sys/bus/usb/drivers、则连接集线器前后的输出是相同的。 这实际上是在器件从复位状态释放之前和之后、因为我使用板载集线器进行了这方面的测试。

    root@mitysom-am62x:~# ls -la /sys/bus/usb/drivers
    total 0
    drwxr-xr-x 7 root root 0 Jan  1 00:00 .
    drwxr-xr-x 4 root root 0 Jan  1 00:00 ..
    drwxr-xr-x 2 root root 0 Jan  1 00:00 hub
    drwxr-xr-x 2 root root 0 Jan  1 00:00 usb
    drwxr-xr-x 2 root root 0 Jan  1 00:00 usb-storage
    drwxr-xr-x 2 root root 0 Jan  1 00:00 usbfs
    drwxr-xr-x 2 root root 0 Jan  1 00:00 usbhid

     在 EVM 上重现此问题需要什么?  是否为 autossuspend_delay_ms 设置非零值? 您的设备使用的是什么驱动程序?

    谢谢!
    Zach

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

    尊敬的 Zach:

    如果我误会了,我尝试了这与自动挂起文件,例如:

    • /sys/bus/usb/drivers/hub/1-1:1.0/1-1-port1/power/autobusup_delay_ms
    • /sys/bus/usb/drivers/usb-storage/1-1:1.0/EP_01/power/autobusup_delay_ms

    [报价]

    虽然我们打算将 USB 集线器的端口挂起、但 sysfs 位置不正确。 请尝试在以下 sysfs 位置运行"echo 0"命令:
    /sys/bus/usb/drivers/usb
    驱动程序后还有第二个"USB"、我们只能在此目录中配置集线器端口的"autobuspend_delay_ms"参数。 根据您在上面共享的 sysfs 位置、这可能会:
    echo 0 >/sys/bus/usb/drivers/usb /1-1\:1.0/usbX-portY/power/autobsuspend_delay_ms
    对于下列各中心:
    /sys/bus/usb/drivers/hub
    应存在显示在中的等效形式:
    /sys/bus/usb/drivers/usb
    其中 X 可以是1、2、...取决于系统中启用的 USB 实例数。 同样、每个集线器将有 N 个端口、这些端口显示为:
    usbX-portY、Y 的范围为1至 N

    请尝试在上述集线器所有端口的 sysfs 位置中将 autossuspend_delay_ms 设置为零、并检查其是否起作用。

    此致、
    Siddharth。

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

    尊敬的  Siddharth:

    以下是我们的 USB 拓扑/有关板载集线器的信息、供参考:

    root@mitysom-am62x:~# lsusb -t
    /:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
        |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/2p, 480M
    root@mitysom-am62x:~# cat /sys/kernel/debug/usb/devices
    
    T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0002 Rev= 6.06
    S:  Manufacturer=Linux 6.6.32-g-g859bf5d9b23f xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=xhci-hcd.6.auto
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 2
    D:  Ver= 2.10 Cls=09(hub  ) Sub=00 Prot=02 MxPS=64 #Cfgs=  1
    P:  Vendor=0451 ProdID=8027 Rev= 1.10
    S:  SerialNumber=33000879F9DF
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=01 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=256ms
    I:* If#= 0 Alt= 1 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=02 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=256ms


    /sys/bus/usb/drivers/hub
    应存在显示在中的等效形式:
    /sys/bus/usb/drivers/usb [报价]

    在这两个目录中我看到以下内容:

    root@mitysom-am62x:~# ls -lF /sys/bus/usb/drivers/hub/
    total 0
    lrwxrwxrwx 1 root root    0 Feb 19 18:01 1-0:1.0 -> '../../../../devices/platform/bus@f0000/f910000.dwc3-usb/31100000.usb/xhci-hcd.6.auto/usb1/1-0:1.0'/
    lrwxrwxrwx 1 root root    0 Feb 19 18:01 1-1:1.0 -> '../../../../devices/platform/bus@f0000/f910000.dwc3-usb/31100000.usb/xhci-hcd.6.auto/usb1/1-1/1-1:1.0'/
    --w------- 1 root root 4096 Feb 19 18:01 bind
    -rw-r--r-- 1 root root 4096 Feb 19 18:01 new_id
    -rw-r--r-- 1 root root 4096 Feb 19 18:01 remove_id
    --w------- 1 root root 4096 Feb 19 18:01 uevent
    --w------- 1 root root 4096 Feb 19 18:01 unbind
    root@mitysom-am62x:~# ls -lF /sys/bus/usb/drivers/usb/
    total 0
    lrwxrwxrwx 1 root root    0 Feb 19 18:02 1-1 -> '../../../../devices/platform/bus@f0000/f910000.dwc3-usb/31100000.usb/xhci-hcd.6.auto/usb1/1-1'/
    --w------- 1 root root 4096 Feb 19 18:02 bind
    --w------- 1 root root 4096 Feb 19 18:02 uevent
    --w------- 1 root root 4096 Feb 19 18:02 unbind
    lrwxrwxrwx 1 root root    0 Feb 19 18:02 usb1 -> '../../../../devices/platform/bus@f0000/f910000.dwc3-usb/31100000.usb/xhci-hcd.6.auto/usb1'/

    忽略符号链接(它将输出与循环的重复和警告分开、但找到相同的文件集)、我们 为 USB1提供以下 autossuspend_delay_ms 文件:

    root@mitysom-am62x:~# find /sys/bus/usb/drivers/usb/usb1/ -name autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/ep_00/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/1-1/ep_00/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/1-1/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/1-1/1-1:1.0/1-1-port1/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/1-1/1-1:1.0/ep_81/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/1-1/1-1:1.0/1-1-port2/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/1-0:1.0/usb1-port1/power/autosuspend_delay_ms
    /sys/bus/usb/drivers/usb/usb1/1-0:1.0/ep_81/power/autosuspend_delay_ms

    您提供的路径模板没有完全匹配、因此我尝试了所有这些模板。

    读取和写入操作都会返回以下 I/O 错误:

    • /sys/bus/usb/drivers/usb/usb1/ep_00/power/autosuspend_delay_ms
    • /sys/bus/usb/drivers/usb/usb1/1-1/ep_00/power/autosuspend_delay_ms
    • /sys/bus/usb/drivers/usb/usb1/1-1/1-1:1.0/1-port1/power/autopusup_delay_ms
    • /sys/bus/usb/drivers/usb/usb1/1-1/1-1:1.0/EP_81/POWER/autobusup_delay_ms
    • /sys/bus/usb/drivers/usb/usb1/1-1/1-1:1.0/1-port2/power/autopusup_delay_ms
    • /sys/bus/usb/drivers/usb/usb1/1-0:1.0/USB1-port1/power/autobussuspend_delay_ms
    • /sys/bus/usb/drivers/usb/usb1/1-0:1.0/EP_81/POWER/autobusup_delay_ms

     最后两个 已设为0、但我仍然再次将0回显给它们:

    • /sys/bus/usb/drivers/usb/usb1/power/autosuspend_delay_ms
    • /sys/bus/usb/drivers/usb/usb1/1-1/power/autosuspend_delay_ms

    睡眠行为仍保持不变。

    TI 是否使用测试中心通过不同的驱动程序在 EVM 上复制此信息?

    谢谢!
    Zach

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

    尊敬的 Zach:

    我测试的 USB 集线器是:
    https://zebronics.com/products/zeb-100hb
    这是 Zebronics 提供的4端口 USB 集线器。

    在我的设置中、命令的输出为:
    1. lsusb -t

    /:  Bus 001.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 480M
        |__ Port 001: Dev 002, If 0, Class=Hub, Driver=hub/4p, 480M

    2. CAT /sys/kernel/debug/usb/devices
    T:  Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#=  1 Spd=480  MxCh= 1
    B:  Alloc=  0/800 us ( 0%), #Int=  0, #Iso=  0
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1d6b ProdID=0002 Rev= 6.12
    S:  Manufacturer=Linux 6.12.13-gcab6cafd320b xhci-hcd
    S:  Product=xHCI Host Controller
    S:  SerialNumber=xhci-hcd.0.auto
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=  0mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   4 Ivl=256ms
    
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 4
    D:  Ver= 2.00 Cls=09(hub  ) Sub=00 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=2148 ProdID=7022 Rev= 1.00
    S:  Product=USB2.0 HUB
    C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr=100mA
    I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub  ) Sub=00 Prot=00 Driver=hub
    E:  Ad=81(I) Atr=03(Int.) MxPS=   1 Ivl=256ms

    3. LS /sys/bus/usb/drivers/usb
    1-1  bind  uevent  unbind  usb1

    4. LS /sys/bus/usb/drivers/usb/1-1/1-1:1.0/
    1-1-port1  1-1-port4          bInterfaceClass     bInterfaceSubClass  ep_81     subsystem
    1-1-port2  authorized         bInterfaceNumber    bNumEndpoints       modalias  supports_autosuspend
    1-1-port3  bAlternateSetting  bInterfaceProtocol  driver              power     uevent


    您是否可以尝试其他方法、即从 sysfs 中禁用集线器、然后尝试深度睡眠、然后在系统恢复时重新启用集线器以重新枚举集线器? 命令和序列如下:
    1.通过运行以下命令禁用 USB 集线器及其连接的任何设备:
    echo 1 | tee /sys/bus/usb/drivers/usb/usb1/1-0\:1.0/usb1-port1/disable

    2.确保 USB1的 runtime_status 显示"已关闭"
    3.使 SoC 进入深度睡眠状态
    4.当 SoC 恢复时、重新启用 USB 集线器以进行枚举以及通过运行以下命令连接到集线器的任何设备:
    echo 0 | tee /sys/bus/usb/drivers/usb/usb1/1-0\:1.0/usb1-port1/disable

    请尝试此操作、然后告诉我是否可行。

    此致、
    Siddharth。

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

    尊敬的  Siddharth:

    正如您所说的那样禁用集线器会产生以下输出;我不能确定是否会出现错误(我也不能确定审计消息是相关的还是恰好在同一时间发生):

    root@mitysom-am62x:~# echo 1 | tee /sys/bus/usb/drivers/usb/usb1/1-0\:1.0/usb1-port1/disable
    1
    [   38.282520] usb 1-1: USB disconnect, device number 2
    [   50.672820] xhci-hcd xhci-hcd.6.auto: Abort failed to stop command ring: -110
    [   50.696103] xhci-hcd xhci-hcd.6.auto: xHCI host controller not responding, assume dead
    [   50.704041] xhci-hcd xhci-hcd.6.auto: HC died; cleaning up
    [   50.709652] xhci-hcd xhci-hcd.6.auto: Timeout while waiting for configure endpoint command
    [   50.712100] audit: type=1334 audit(1740506750.978:32): prog-id=23 op=LOAD
    tee: '/sys/bus/usb/drivers/usb/usb1/1-0:1.0/usb1-port1/disable': No such device
    [   50.896066] audit: type=1334 audit(1740506751.166:33): prog-id=23 op=UNLOAD

    运行上述命令后、runtime_status 文件(/sys/bus/usb/drivers/usb/usb1/1-0:1.0/usb1-port1/power/runtime_status)仍然显示"活动"、尽管物理集线器不再显示在 lsusb 输出中(根集线器仍然显示)。

    在这种状态下、在 Linux 驱动程序级别睡眠似乎失败:

    root@mitysom-am62x:~# rtcwake -s 10 -m mem
    rtcwake: wakeup from "mem" using /dev/rtc0 at Tue Feb 25 18:10:36 2025
    [  325.107720] PM: suspend entry (deep)
    [  325.111476] Filesystems sync: 0.000 seconds
    [  325.121644] Freezing user space processes
    [  325.127581] Freezing user space processes completed (elapsed 0.001 seconds)
    [  325.134607] OOM killer disabled.
    [  325.137845] Freezing remaining freezable tasks
    [  325.143690] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
    [  325.151103] printk: Suspending console(s) (use no_console_suspend to debug)
    [  325.159356] xhci-hcd xhci-hcd.6.auto: PM: dpm_run_callback(): platform_pm_suspend+0x0/0x80 returns -22
    [  325.159397] xhci-hcd xhci-hcd.6.auto: PM: failed to suspend async: error -22
    [  325.159429] PM: Some devices failed to suspend, or early wake event detected
    [  325.159475] usb-conn-gpio usb_microb_connector: repeated role: device
    [  325.190533] OOM killer enabled.
    [  325.193679] Restarting tasks ... done.
    [  325.199297] random: crng reseeded on system resumption
    [  325.204735] PM: suspend exit
    rtcwake: write error

    此时运行步骤4中的命令也会失败、并显示"no such device"错误。

    谢谢!
    Zach

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

    尊敬的 Zach:

    感谢您测试这些建议。 回到初始的非工作场景、您可以在运行"rtcwake"命令之前和之后共享以下命令的输出吗?

    devmem2 0x000F4258

    0x000F4258对应于 USB1_DRVVBUS 的 PAD_CONFIG 寄存器。 我需要特别查找 bit-30 (基于零的索引)的值、该值用于指示是否发生唤醒事件。 这将帮助我们确定 USB 集线器是否会立即触发唤醒、因为深度睡眠转换失败。

    此致、
    Siddharth。

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

    尊敬的  Siddharth:

    运行 rtcwake 后、我必须使用 JTAG 读取寄存器、因为 DM 会中止、并且电路板永远不会唤醒;但在 rtcwake 之前和之后、该寄存器的值均为 0x00050000。

    谢谢!
    Zach

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

    尊敬的 Zach:

    再次讨论此线程、我遇到了以下几点、对于后续执行的步骤、可能需要考虑这些要点:

    [报价 userid="637598" url="~/support/processors-group/processors/f/processors-forum/1461887/am625-failing-to-enter-deep-sleep-due-to-usb-lpsc-timeout/5610952 #5610952"]
    • 我们的硬件:
      • 两个 USB 均已启用、未插入任何 USB、集线器处于活动状态:睡眠失败
      • 两个 USB 均已启用、未插入任何 USB、HUB 处于复位状态:睡眠 成功
      • 仅启用 USB0、未插入任何设备或仅插入 OTG 适配器(强制主机模式):睡眠成功
      • 仅启用 USB0、闪存驱动器或通过 OTG 适配器插入的外部集线器:睡眠失败
    • EVM (所有测试都启用了两个 USB):
      • 未插入任何接口或仅插入 USB0的 Type-C 适配器 (强制主机模式):睡眠成功
      • 闪存驱动器或外部集线器插入 USB1、或通过 Type-C 适配器插入 USB0: 睡眠成功
    [报价]

    需要注意的要点是:
    a)在您使用的定制硬件上、如果 USB0和 USB1都连接了器件、则它们会导致深度睡眠失败。
    B)在 TI EVM 上、将器件连接到 USB0和 USB1不会影响深度睡眠。

    基于上述、这似乎是电路板集成问题。 如果可能、请在深度睡眠序列期间探测定制硬件和 TI EVM 上 USB0或 USB1的所有 USB 线路。 这可能会让人了解问题的原因。

    此致、
    Siddharth。

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

    尊敬的  Siddharth:

    我想这让我们走错了;我们之前已经将 VBUS 的行为与 EVM 进行了比较、但仅限于 板载集线器的连接器侧。 我们会发现、由于我们在 DRVVBUS 上有外部下拉电阻、所以 EVM 的 VBUS 在睡眠期间保持启用状态、而我们自己的电路板没有启用。

    如果我们从电路板上的接口之一(USB0、不带集线器)移除下拉电阻、它现在会在将 USB 设备插入或不将其插入该接口的情况下正常睡眠并唤醒。 同样、如果我们向 EVM 添加等效下拉电阻、它现在只会在未插入 USB 器件的情况下正常睡眠、就像我们电路板的原始行为一样。

    我们仍有几个问题来确认我们正确理解问题;如果您能提供一些见解、我们将不胜感激:

    1. DRVVBUS PADCONFIG 寄存器 设置为 0x00010000或0x00050000后、在深度睡眠期间禁用此焊盘的驱动器、但启用内部拉电阻以保持之前的值是否正确? (那么、在这种情况下是上拉电阻器?)
    2. 我们在下拉电阻时看到的 LPSC 超时是否是 VBUS 本身的变化(在 USB_VBUS 输入端上返回到 SoC)引起的或与下游器件的一些交互引起的?

    谢谢!
    Zach

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

    尊敬的 Zach:

    [报价 userid="637598" URL"~/support/processors-group/processors/f/processors-forum/1461887/am625-failing-to-enter-deep-sleep-due-to-usb-lpsc-timeout/5702714 #5702714"]当 DRVVBUS PADCONFIG 寄存器 设置为 0x00010000或0x00050000时、在深度睡眠期间禁用此焊盘的驱动器、但启用内部拉电阻以保持先前值是否正确? (因此、在这种情况下是上拉?)

    请参阅下表、与 PADCONFIG 位的定义相对应:


    该表位于 AM625技术参考手册(https://www.ti.com/lit/ug/spruiv7b/spruiv7b.pdf)的第5829页。
    深度睡眠期间的行为由位(27) DS_PULLUD_EN 和位(28) DS_PULLTYPE_SEL 配置。 在这两种情况下(0x000100000x00050000)、位(27)为零、指示"上拉/下拉已启用"。 由于位(28)也为0、因此它指示"0:已选择偏移模式下拉"。 DRVVBUS PADCONFIG 寄存器指示处于 DEEP SLEEP 状态的下拉电阻。 为了支持 USB 唤醒、位(28)设置为1:
    https://github.com/torvalds/linux/blob/v6.14-rc6/arch/arm64/boot/dts/ti/k3-am62x-sk-common.dtsi#L259
    AM62X_IOPAD (0x0258、PIN_OUTPUT | PIN_DS_PULLUD_ENABLE | PIN_DS_PULL_UP、0)/*(F18/E16) USB1_DRVVBUS */
    在本例中、我们在 EVM 上看不到问题。

    在我看来、在深度睡眠期间需要上拉电阻器、要做到这一点、必须移除 DRVVBUS 上的外部下拉电阻器。

    我们在下拉电阻时看到的 LPSC 超时是否是由 VBUS 本身的变化(在回至 SoC 的 usb_vBus 输入端)或者与下游器件的一些交互引起的?

    我不确定、但如果必须进行猜测、则可能会假设 SoC 进入 DEEP SLEEP 状态需要上拉 USB_VBUS、如上所示、否则(由于外部下拉电阻)可能会导致 DM (器件管理器)将其视为错误。 我们可以从 DM 团队和 USB IP 团队获得详细信息以进行确认。

    此致、
    Siddharth。

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

    尊敬的  Siddharth:

    感谢您提供指向该 dtsi 的指针;我们所查看的较旧版本没有 DS 设置。 这些设置是在位24为0时应用还是配置位24为1时使用的"关闭模式值"?

    假设 DRVVBUS 存在内部上拉电阻(无论是默认情况下还是来自器件树设置)、我们此时的主要关注点是确定如何更新与集线器(TUSB4020BIHP)的接口来避免此问题。 由于该 集线器未通过 VBUS 供电、因此这里没有用于 VBUS 的限流开关;我们只是 通过分压器将 DRVVBUS 连接到集线器的 USB_VBUS 引脚、从而将其转换为适合该引脚的电压。 我们从数据表或 TRM 中不清楚 AM62的 USBn_VBUS 输入是否与仅主机接口相关/必需、甚至它的高/低阈值是多少、因此我们还将其连接到 DRVVBUS 的分压器。 在该接口上、这些分压器用作下拉电阻、因此我们似乎 需要重新设计电路的这一部分以避免下拉电阻。 我们还考虑对分压器使用更大的电阻值、以便内部上拉的影响较小、但到目前为止、结果好坏参半。

    是否有关于将 AM62与此(或另一种自供电)集线器搭配使用的参考原理图或建议? 这将是我们的理想之路、但如果不是、这将有助于了解我们所做工作不起作用的确切原因。 (在这种情况下、如果可以酌情与 DM 和/或 USB IP 团队一起转发、我们将表示感谢。)

    谢谢!
    Zach

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

    尊敬的 Zach:

    这些设置是在第24位为0时应用的(因为似乎在这一行)、还是配置了第24位为1时使用的"关闭模式值"?

    中定义了用于深度睡眠的宏:
    https://github.com/torvalds/linux/blob/v6.14-rc6/arch/arm64/boot/dts/ti/k3-pinctrl.h
    PIN_DS_PULLUD_ENABLE =>位(27)应该为零
    PIN_DS_PULL_UP =>位(28)应该为1
    位(24)不受用于 USB1_DRVVBUS 的 AM62X_IOPAD 宏影响、应保持其复位值为零。

    对于您提出的其他问题、将需要硬件团队的支持。 Anshu 可以联系硬件团队以获得有关这些问题的澄清。

    此致、
    Siddharth。

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

    复位后、DRVVBUS 有一个启用的下拉电阻

    USVx_VBUS 连接对于主机是可选的。

    对于该器件、建议根据 SOC 数据表使用开关直流输入以及 VBUS 分压器。

    此致、

    Sreenivasa

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

    谢谢、知道  主机不需要 USBn_VBUS、我们能够对解决方案进行原型设计、并确认我们可以将 USB 器件插入其中一个或两个接口来挂起电路板。

    感谢大家的帮助!

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

    您好、Zach

    谢谢、很高兴听到您取得了进步。

    您想总结一下 在 PADCONFIG 寄存器中设置的用于启用功能的步骤或位吗?

    此致、

    Sreenivasa

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

    当然、我们最终不必更改 padconfig 设置: 0x00010000或0x00050000、用于 DRVVBUS 可以正常工作。 这完全是一个硬件问题。

    在仅主机接口上、我们刚刚完全断开了 SoC 的 USBn_VBUS 输入。 (我们以前通过分压器连接到 DRVVBUS。)

    在 OTG 接口上、我们基本上遵循了 EVM/基准与开关 VBUS 电源以及  SoC  USBn_VBUS 输入的基准分压器。 此接口的唯一更改是移除了我们已添加的 DRVVBUS 上的下拉电阻。

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

    您好、Zach

    谢谢你。

    此致、

    Sreenivasa