AnsweredAssumed Answered

usb 控制器挂掉fsl-ehci fsl-ehci.0: HC died; cleaning up

Question asked by ma qicheng on Jul 17, 2018
Latest reply on Jul 19, 2018 by ma qicheng

Dear sir 

  我们在做项目时遇到  usb 控制器挂掉问题,   导致usb 后续无法识别u盘. 重启可以恢复.

详细log 见附件,  问题发生时也导出了usb相关寄存器信息:

 

出问题时两个状态位是异常,对硬件而言代表着什么变化,或者哪些情况才有可能有下面这种情况产生
在USBC_n_PORTSC1 中。CSC bit 变成1了, 有链接状态改变上来了,PE bit变成0了, 认为现在这个port 变成disable的了。

该寄存器仅仅从datasheet 上看没有很明确的说法,怀疑是硬件稳定性问题,

请问是否可以从cpu 角度对该问题,该寄存器有更确切的说明或者说导致问题的可能性.

 

<6>[10687.516530] usb 2-1: majun2 oldspeed 0 udev->speed 3
<6>[10687.516543] usb 2-1: new high speed USB device number 38 using fsl-ehci
<6>[10687.667062] hub 2-0:1.0: perform initial device setup (usbcore-internal)
<3>[10687.667906] usb 2-1: device v2a45 p0c02 is not supported
<6>[10687.667917] usb 2-1: udev 38, busnum 2, minor = 165
<6>[10687.672229] hub 2-0:1.0: status: 0
<6>[10687.675561] hub 2-0:1.0: port 1, status 0100, change 0003, 12 Mb/s
<6>[10687.675573] usb 2-1: USB disconnect, device number 38
<3>[10687.677397] fsl-ehci fsl-ehci.0: fatal error
<3>[10687.678288] fsl-ehci fsl-ehci.0: HC died; cleaning up
<3>[10687.716525] hub 2-0:1.0: hub_port_status failed (err = -19)
<3>[10687.716539] hub 2-0:1.0: connect-debounce failed, port 1 disabled

 

追了下代码和文档, 但还是无法分析出根本原因,  
fsl-ehci fsl-ehci.1: fatal error
fsl-ehci fsl-ehci.1: force halt; handshake d997e344 00004000 00004000 -> -110

从log上看出问题时候 echi的状态寄存器的值是 d997e344
出现这个错误的根本原因从逻辑上看是,在ehci_irq被触发之后,首先判断到
if (status == ~(u32) 0) {
ehci_dbg (ehci, "device removed\n");
goto dead;
}
设备是没有被移除的。当设备移除时 status 应该是FFFF...
然后由于此时的status寄存器的值是 d997e344,会出发sys_fatal的检测逻辑, STS_FATAL的值是
1<<2,所以会满足下面的判断条件。

if (unlikely ((status & STS_FATAL) != 0)) {
ehci_err(ehci, "fatal error\n");
dbg_cmd(ehci, "fatal", cmd);
dbg_status(ehci, "fatal", status);
ehci_halt(ehci);


而从imx6 echi的寄存器介绍中可以看到USB Status Register (USB_nUSBSTS) 的第三个bit是PCI

大致理解是在出现Port Change Events事件时,才会把Port Change Detect bit(也就是上面提到的PCI
pin)设置成1。
在从imx6的文档上进一步看 port change events的触发条件

从逻辑上看 在设备正常保持插入状态时,上面4个状态是都不应该被触发的,软件上也没有在非报错
的情况下主动触发的逻辑,从目前拿到的log上看问题是突然接受到ehci_irq出现的,之前并没有usb
通信相关的err产生。目前判断应该是由某个硬件状态改变引起的。
这几个状态是由 “Port registers contain status and status change bits” 表示的,
对应的寄存器是 “65.6.31 Port Status & Control (USB_nPORTSC1)”

Attachments

Outcomes