Dear All,

I'm using iMX6q for my application. It uses the touchscreen IC
connected via USB port (Host port 1). The touchscreen operates with
low-speed. 

Board: Wandboard rev1b / some custom board
SW: Mainline Linux 4.13
 
Problem:
 
I do observe that the USB transfers are truncated - for example
"Get Configuration Descriptor", which length is 34B only gets 16B from
the device. 

I do get the "Invalid PID sequence" error and despite the
DATA1 Packet received by host - the EHCI controller is not sending ACK. 
 
 
The problem is not observed when I plug the touchscreen device via USB
2.0 HUB. (iMX6q -> USB 2.0 HUB -> touchscreen)

Also, the problem is not present on different EHCI implementations -
namely Intel or Synopsis (Exynos 5422). 


Please find below some data dump from EHCI's qTD (Queue Element
                                                  Transfer Descriptor):
 
[ 1.987479] ci_hdrc ci_hdrc.0: submit_async 1 urb edfe6e80 ep0out 
                                len 178, qtd ef061180 [qh edfe6780]
[ 1.988781] ehci urb: IRQ status: 0x1 INTREN: 0x37 hrt: 0x80
[ 1.988795] scan_async: urb qh: 0xedfe6780 qtd_list: 0xef0610f8
[ 1.988802] qh_completions: urb token 0x80000e00 0 178
[ 1.988809] qh_completions: urb token 0x920d08 0 178     
                                      ^--- here we do have still 
                                        active "status" 9x8
[ 1.988815] qh_completions: urb token 0x8c00 32 178       
                                      ^--- here the IOC bit is 
                                           set (0x8)
[ 1.988828] ci_hdrc ci_hdrc.0: ehci_urb_done 1 urb edfe6e80 
                                ep0in status 0 len 32/178
 
The above code is executed after receiving "USBINT" interrupt - 
        according to EHCI controller everything went fine
 

[ 1.992192] ci_hdrc ci_hdrc.0: submit_async 1 urb edfe6e80 ep0out 
                        len 178, qtd ef061060 [qh edfe6780]
[ 1.995785] ehci urb: IRQ status: 0x1 INTREN: 0x37 hrt: 0x80
[ 1.995804] scan_async: urb qh: 0xedfe6780 qtd_list: 0xef0611b8
[ 1.995811] qh_completions: urb token 0x80000e00 0 178  
                                      ^--- setup transaction
[ 1.995819] qh_completions: urb token 0xd00 0 178       
                                      ^--- here we do have 0x0 status
[ 1.995825] qh_completions: urb token 0x8c00 178 178   
                                      ^--- here we do ask for 
                                        interrupt when done
[ 1.995840] ci_hdrc ci_hdrc.0: ehci_urb_done 1 urb edfe6e80 
                        ep0in status 0 len 178/178


The most _strange_ issue here is the lack of _any_ error indicated by
the HOST driver. All transmissions end with USBINT set. No error
interrupt present. This corrupted data (with smaller size than
expected) is then passed to upper layers, causing subtle errors.


Have anybody had similar problem?

Any hints on how to proceed?





The problem has been described in detail (including screen shots 
from USB analyzer + some further investigations) here:
https://community.nxp.com/thread/462409


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to