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/dra750:如何禁用 USB2.0上的 L1功能

Guru**** 2561400 points
Other Parts Discussed in Thread: DRA750

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/604812/linux-dra750-how-to-disable-l1-function-on-usb2-0

器件型号:DRA750

工具/软件:Linux

大家好、TI 团队、

我们有一个使用 dra750和 GLSDK_7.04.00.03的定制板。

有一个 USB 转以太网转换器 RTL8153vc 连接到 USB2.0端口。

当 RTL8153vc 连接到 USB2.0端口并加载驱动程序时、我们可以看到一个 eth0设备。

问题是"ifconfig eth0 up"之后、LAN 链接无法自动建立。

我们已将此问题传递给 Realtek、他们通过 USB 逻辑分析仪分析此问题、如下所示。

他们说、离开 L1后、批量输入应发送到端点1、批量输出应发送到端点2、

但 USB 主机仍然向用于控制的端点0发送批量输入/输出。

他们建议我们关闭 L1。

是否有办法关闭 USB2.0主机的 L1?

感谢你能抽出时间。

BR、

肖恩

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

    我已将您的问题转交给 USB 专家。

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

    肖恩

    根据 USB 总线迹线、 这些是控制传输、控制传输仅针对 ep0、器件也响应了控制请求。  

    根据特定接口的器件端点管道、在 SET_CONFIG 或 SET_interface 成功之后、主机将在非零端点(EP1、EP2等)上启动事务。

    此致

    Ravi

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

    尊敬的 Ravi:
    感谢您的回复。
    因此、您不同意他们在离开 L1后说的、进入/退出应该进入非零端点。
    您认为即使在离开 L1后仍可以进行控制传输。
    我是否理解正确?

    顺便说一下、是否有关闭 L1的方法?

    非常感谢。

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

    肖恩

    我不明白这里的 L1是什么?

    根据 USB 规范、枚举、以下是不同的阶段

    器件连接后、主机将开始通过一系列 ep0控制传输枚举器件
    1) 1)将发出设置地址、以将新地址设置为器件(器件将进入寻址状态)。
    2) 2)端点0上有几个控制事务、用于获取器件描述符、配置描述符和所有配置描述符和字符串描述符。
    3)根据连接的器件、主机上的相应类驱动程序将进一步启用配置(set_config、set_interface)、
    4) 4)一旦通过为器件启用非零端点或管道来配置器件并进入配置状态。

    器件处于已配置状态后、主机端点类驱动程序将发出非零端点请求以与器件通信。

    您能否识别总线布线的所有步长?

    请发送总线跟踪。

    此致
    Ravi

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

    尊敬的 Ravi:

    我们认为它们是指 LPM 状态、

    在数据表24.7.4.5.2用于 LPM 的 UTMI 电源管理

    对于"普通"USB 中使用的标准 utmi_suspendm 输出、电流控制器添加了两个非标准输出

    链路电源管理扩展的输出(请参阅 USB 2.0链路电源管理(LPM)

    附录):utmi_L1_suspend_n 和 utmi_L1_sleep_n

    LPM 将普通 USB 的两种 USB 电源状态重新标记为 L0 (有效)和 L2 (挂起)、并进行介绍

    第三、中间状态 L1 (睡眠)。

    是否有机会禁用它?

    谢谢你。

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

    好的、您指的是 XHCI 控制器(U0、U1、U2、U3)的 LPM 电源管理级别。 如果没有活动或请求挂起、内核会将控制器置于 LPM 状态 U1/2/3、作为设置端口功能控制请求的一部分。

    但是,我认为这里没有任何与 LPM 相关的问题。

    您面临的真正问题是什么? 您能否共享完整的枚举跟踪? 非零端点传输将在器件进入已配置状态后启动。 通常、SET_CONFIGURATION 和启用非零端点由特定于器件的类驱动程序启用、您似乎正在使用特定于定制/供应商的 RTL8153vc 器件。 是否已加载 RTL8153vc 类驱动程序、或者是否在内核中支持该驱动程序?


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

    尊敬的 Ravi:

    很抱歉我的英语不好。

    在我的第一篇帖子中:

    有一个 USB 转以太网转换器 RTL8153vc 连接到 USB2.0端口。

    当 RTL8153vc 连接到 USB2.0端口并加载驱动程序时、我们可以看到一个 eth0设备。

    问题是"ifconfig eth0 up"之后、LAN 链接无法自动建立。

    我们认为您上面提到的步骤已经完成。

    我们将此问题传递给 Realtek、他们说  在离开 L1状态后应该有非零端点传输、但他们只看到 ep0传输。

    他们还尝试将 USB 集线器连接到 CPU、然后将 RTL8153连接到集线器、

    然后、RTL8153工作正常、LAN 链路可以在"ifconfig eth0 up"之后自动建立。

    因此、他们认为问题是 LPM、因为该集线器没有 LPM 功能。

    因此、他们建议我们转向 L1。

    我不确定这是否可行、因此请给我们一个答案。

    谢谢你。

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

    肖恩

    您已尝试使用和不使用集线器,连接到哪台主机? J6 EVM 或 PC。 这里是什么 CPU?  您能否共享设置详细信息?

    您能否使用 RTL8153器件发送有效的 USB 总线跟踪?  

    从初始线程的总线跟踪图像中、有一个控制请求、该请求是供应商指定请求、BREQUEST 类型= 0x10。 如果您有 RTL8153驱动程序、您可以打印调试页并验证上述控制请求是否来自 RTL8153驱动程序? 还将调试打印输出放入非端点控制请求中。

    我不认为 LPM 有问题。 您可以检查与标准设备(USB 磁盘、鼠标 等)的连接。 它应该起作用、您应该会看到非零交易。

    此致

    Ravi

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

    尊敬的 Ravi:

    我们使用 Beagle USB 480和总相位数据中心来捕获 USB 协议。

    我们在定制板上捕获了三种连接(使用 dra750 和 GLSDK_7.04.00.03)

    1. RTL8153连接到不带集线器的 USB2.0端口

    2. RTL8153通过集线器连接到 USB2.0端口

    3. USB 磁盘存储连接到不带集线器的 USB2.0端口

    附件中有这些连接的图片。

    我还将 dra750的调试端口日志放入附件中、

    您可以看到我发送了什么命令。(ifconfig、ethtool、mount)

    设备在引导至控制台提示符后都连接到主机。

    e2e.ti.com/.../usb_5F00_trace.zip(.tdc文件由总相位数据中心打开、.CVS 从总相位数据中心导出、并可通过 Excel 打开)

    在 连接到 USB2.0端口"无集线器"的 RTL8153日志中、

    在"ifconfig eth0 up"之后、我必须多次使用"ethtool eth0"才能看到"Link Detected:Yes"。

    但在日志"有集线器"中、

     在第一次使用"ifconfig eth0 up"之后的"ethtool eth0"时、我可以看到"Link Detected:Yes"。

    请帮助我们找出原因。

    非常感谢。

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

    当器件直接连接到端口(不带集线器)时、由于器件具有远程唤醒功能、因此内核驱动器会尝试暂停总线、以便在需要时器件可以唤醒主机以节省功耗。 这就是为什么在索引2078之后的跟踪中、您观察到暂停。
    这是预期行为。
    当与集线器连接时、集线器不支持远程唤醒、因此根端口不会暂停总线。

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

    肖恩

    您能否从 Linux 内核发送寄存器0x48890424和0x488d0424的转储?

    # devmem2 0x48890424

    #devmem2 0x488d0424

    此致

    Ravi

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

    root@dra7xx-EVM:~# devmem2 0x48890424
    /dev/mem 已打开。
    映射到地址 bb6f44000的内存。
    在地址0x48890424 (bb6f44424)上读取:0x00000000

    root@dra7xx-EVM:~# devmem2 0x488d0424
    /dev/mem 已打开。
    映射到地址 bb6f3d000的内存。
    在地址0x488D0424 (bb6f3d424)读取:0x00010189


    USB1 (3.0)工作正常、没有我在此线程中提出的问题。
    它仅发生在 USB2 (2.0)中。

    我还尝试删除了.config 中的 CONFIG_PM 和 CONFIG_PM_Runtime。
    USB2寄存器的值变为0x00000000。
    这可以解决我们的问题、但我认为这不是一个好的解决方案、因为会出现一些内核警告。

    即使器件具有远程唤醒功能、是否有任何方法使内核驱动器不会挂起总线?

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

    在 USB2.0端口上、PORTMSC.hle 位被置位(寄存器0x488d0424)、这是硬件 LPM 使能位。 您能否重置此位并尝试。

    # devmem2 0x488d0424 w 0x00000189

    hle 位在 drivers/USB/host/xhci.c 的 xhci_set_USB2_hardware_lpm ()中设置

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

    您好、Ravi、

    我们尝试过、这解决了我们的问题、

    感谢您的大力支持!!

    BR、

    肖恩

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

    肖恩

    很高兴看到问题得到解决。

    此致

    Ravi