lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CALAqxLXh+vGT0P=RKU5Be0UKqo3Bz=uQeTM2ePBPNjoWhJLFyQ@mail.gmail.com>
Date:   Thu, 6 Apr 2017 15:53:57 -0700
From:   John Stultz <john.stultz@...aro.org>
To:     Minas Harutyunyan <Minas.Harutyunyan@...opsys.com>
Cc:     Felipe Balbi <felipe.balbi@...ux.intel.com>,
        John Youn <John.Youn@...opsys.com>,
        lkml <linux-kernel@...r.kernel.org>,
        YongQin Liu <yongqin.liu@...aro.org>,
        "linux-usb@...r.kernel.org" <linux-usb@...r.kernel.org>
Subject: Re: dwc2_hc_chhltd_intr_dma - ChHltd set errors?

On Thu, Apr 6, 2017 at 12:36 AM, Minas Harutyunyan
<Minas.Harutyunyan@...opsys.com> wrote:
> On 4/6/2017 1:03 AM, John Stultz wrote:
>>
>>
>> On Wed, Apr 5, 2017 at 5:58 AM, Minas Harutyunyan
>> <Minas.Harutyunyan@...opsys.com <mailto:Minas.Harutyunyan@...opsys.com>>
>> wrote:
>>> On 4/4/2017 11:03 PM, John Stultz wrote:
>>>>
>>>> I did notice when cating the regdump file, I saw:
>>>> dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode
>>>> twice. (You'll see it 4 times in the dmesg around 1077 as I cat'ed
>>>> regdump again to verify it wasn't just chance).
>>>>
>>>> Let me know if there is anything else you need!
>>>>
>>>
>>> Could you please apply attached patch and try again.
>>
>> Thanks for sending this out!
>>
>> So it didn't build against mainline, but I tweaked it a bit:
>> -       if ((hsotg->core_params->dma_enable > 0 &&
>> -            hsotg->core_params->dma_desc_enable <= 0) ||
>> +       if ((hsotg->params.host_dma > 0 &&
>> +            hsotg->params.dma_desc_enable <= 0) ||
>>
>>
>> But I'm still seeing similar behavior:
>> [   91.517417] dwc2 f72c0000.usb: dwc2_hc_chhltd_intr_dma: Channel 5 -
>> ChHltd set, but reason is unknown
>> [   91.526693] dwc2 f72c0000.usb: hcint 0x00000002, intsts 0x04000029
>> [   91.533613] asix 1-1.2:1.0 eth0: asix_rx_fixup() Bad Header Length
>> 0x8003a0cc, offset 1302
>> [   91.534102] asix 1-1.2:1.0 eth0: asix_rx_fixup() Bad Header Length
>> 0x73ff5a7d, offset 4
>> [  169.116866] dwc2 f72c0000.usb: dwc2_hc_chhltd_intr_dma: Channel 1 -
>> ChHltd set, but reason is unknown
>> [  169.126146] dwc2 f72c0000.usb: hcint 0x00000002, intsts 0x06200029
>> [  170.699334] asix 1-1.2:1.0 eth0: asix_rx_fixup() Bad Header Length
>> 0x36000807, offset 68
>>
>> And I'm not seeing the "Channel can't be halted" error from the new logic.
>>
>> Full dmesg and regdump attached.
>>
>> Let me know if there is something else I should try.
>>
>> thanks
>> -john
> Ok. To enable full dwc2 debug messages, please set USB_DWC2_DEBUG and
> USB_DWC2_VERBOSE in Kernel configuration file.

Huh. So interestingly adding USB_DWC2_VERBOSE changes some behavior,
which suggests some racy logic somewhere.

In the dmesg logs provided earlier, I would unplug the micro-B cable,
and the hub would be enabled, detect the mouse, reset to slow-speed,
and then both mouse and eth would be detected (see below for topology
and quirkiness here).

[  609.726186] dwc2 f72c0000.usb: Set speed to high-speed
[  609.731529] usb 1-1: new high-speed USB device number 26 using dwc2
[  609.921447] dwc2 f72c0000.usb: Set speed to high-speed
[  609.949694] hub 1-1:1.0: USB hub found
[  609.954067] hub 1-1:1.0: 3 ports detected
[  610.246008] dwc2 f72c0000.usb: Set speed to full-speed
[  610.251388] usb 1-1.1: new low-speed USB device number 27 using dwc2
[  610.486571] usb 1-1: USB disconnect, device number 26
[  615.722267] dwc2 f72c0000.usb: Set speed to full-speed
[  615.727580] usb 1-1: new full-speed USB device number 31 using dwc2
[  615.914674] dwc2 f72c0000.usb: Set speed to full-speed
[  615.939233] usb 1-1: not running at top speed; connect to a high speed hub
[  615.949500] hub 1-1:1.0: USB hub found
[  615.953815] hub 1-1:1.0: 3 ports detected
[  616.246178] dwc2 f72c0000.usb: Set speed to full-speed
[  616.251539] usb 1-1.1: new low-speed USB device number 32 using dwc2
[  616.342042] dwc2 f72c0000.usb: Set speed to full-speed
[  616.393609] input: Logitech USB Optical Mouse as
/devices/platform/soc/f72c0000.usb/usb1/1-1/1-1.1/1-1.1:1.0/0003:046D:C058.0004/input/in4
[  616.408426] hid-generic 0003:046D:C058.0004: input,hidraw0: USB HID
v1.11 Mouse [Logitech USB Optical Mouse] on usb-f72c0000.usb-1.1/inpu0
[  616.506057] dwc2 f72c0000.usb: Set speed to full-speed
[  616.511449] usb 1-1.2: new full-speed USB device number 33 using dwc2
[  616.598037] dwc2 f72c0000.usb: Set speed to full-speed
[  616.626890] usb 1-1.2: not running at top speed; connect to a high speed hub
[  617.098791] asix 1-1.2:1.0 eth0: register 'asix' at
usb-f72c0000.usb-1.2, ASIX AX88772B USB 2.0 Ethernet,
00:50:b6:18:82:98
[  617.112147] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[  618.660076] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[  618.682072] asix 1-1.2:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1


But with DWC2_VERBOSE enabled, I'm usually seeing the following (this
is what hit the console, not from the full dmesg output):

[   83.658545] dwc2 f72c0000.usb: Set speed to high-speed
[   83.663897] usb 1-1: new high-speed USB device number 2 using dwc2
[   83.854516] dwc2 f72c0000.usb: Set speed to high-speed
[   83.901097] hub 1-1:1.0: USB hub found
[   83.910054] hub 1-1:1.0: 3 ports detected
[   84.241753] dwc2 f72c0000.usb: Set speed to full-speed
[   84.247008] usb 1-1.1: new low-speed USB device number 3 using dwc2
[   84.479943] usb 1-1: USB disconnect, device number 2
[   89.646499] dwc2 f72c0000.usb: Set speed to full-speed
[   89.651849] usb 1-1: new full-speed USB device number 7 using dwc2
[   89.842541] dwc2 f72c0000.usb: Set speed to full-speed
[   89.879490] usb 1-1: not running at top speed; connect to a high speed hub
[   89.906483] hub 1-1:1.0: USB hub found
[   89.915009] hub 1-1:1.0: 3 ports detected
[   90.245919] dwc2 f72c0000.usb: Set speed to full-speed
[   90.251114] usb 1-1.1: new low-speed USB device number 8 using dwc2
[   90.337866] dwc2 f72c0000.usb: Set speed to full-speed
[   90.385747] input: Logitech USB Optical Mouse as
/devices/platform/soc/f72c0000.usb/usb1/1-1/1-1.1/1-1.1:1.0/0003:046D:C058.0001/input/in1
[   90.398904] hid-generic 0003:046D:C058.0001: input,hidraw0: USB HID
v1.11 Mouse [Logitech USB Optical Mouse] on usb-f72c0000.usb-1.1/inpu0
[   90.414011] hub 1-1:1.0: hub_ext_port_status failed (err = -71)

And the eth adapter doesn't seem to be detected.

So I've attached the dmesg w/ VERBOSE off, but with DEBUG on.


> Also provide the topology of connected devices(class, speed) to dwc2
> root hub.

So HiKey is a bit quirky, and you can see how things are conencted on
page 12 of this manual:
https://www.96boards.org/wp-content/uploads/2015/02/HiKey_User_Guide_Rev0.2.pdf

Baiscally there's one OTG controller, that is connected to a switch,
which goes between the micro-B socket, and a hub. The hub is then
connected to two A sockets (and lines on the highspeed port).
Unfortunately the hub cannot handle mixed highspeed and lowspeed
devices at the same time (so, if I recall the terms properly, it
doesn't handle "split transactions").

Anyway the micro-B socket has priority, so if a cable is connected
there, the hub/A sockets are disconnected.

Normally, I've been plugging in a usb-mouse (low-speed) and
usb-ethernet adapter (high-speed) to the two A sockets, hanging off
the built-in hub.  Since there is the usb-mouse involved, the
interface is set to low-speed, so everything is running at low-speed.

Let me know if you have more questions or need more debug data.

thanks
-john

Download attachment "hikey-usb.dmesg" of type "application/octet-stream" (205098 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ