]> git.baikalelectronics.ru Git - kernel.git/commit
usb: gadget: fsl_udc_core: dTD's next dtd pointer need to be updated once written
authorPeter Chen <peter.chen@freescale.com>
Sun, 1 Apr 2012 07:17:16 +0000 (15:17 +0800)
committerFelipe Balbi <balbi@ti.com>
Fri, 4 May 2012 12:53:06 +0000 (15:53 +0300)
commit8e7b67ee8c95ee6bf1ca3400eef4f708da1c09b8
tree3b1dbc71853a24008a47a0346e1cd4e4435bca5f
parent3a716e307434fcd09dbd218e32352e29d234a82d
usb: gadget: fsl_udc_core: dTD's next dtd pointer need to be updated once written

dTD's next dtd pointer need to be updated once CPU writes it, or this
request may not be handled by controller, then host will get NAK from
device forever.

This problem occurs when there is a request is handling, we need to add
a new request to dTD list, if this new request is added before the current
one is finished, the new request is intended to added as next dtd pointer
at current dTD, but without wmb(), the dTD's next dtd pointer may not be
updated when the controller reads it. In that case, the controller will
still get Terminate Bit is 1 at dTD's next dtd pointer, that means there is
no next request, then this new request is missed by controller.

CC: <stable@vger.kernel.org>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Acked-by: Li Yang <leoli@freescale.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/fsl_udc_core.c