• Yoshihiro Shimoda's avatar
    usb: renesas_usbhs: fix the timing of dcp_control_transfer_done · 4ef35b10
    Yoshihiro Shimoda authored
    According to the datasheet, this driver should clear the INTSTS0.CTRT
    bit before this controller detects the next stage transition. Otherwise,
    the driver may not be able to clear the bit after the controller went to
    the next stage transition. After that, the driver will not be able to
    clear the INTSTS0.VALID, and a usb control transfer will not finish
    finally.
    
    If we use the testusb tool, it is easy to reproduce this issue:
    
     # testusb -a -t 10
    
    Since the previous code handled a data stage and a status stage in
    the usbhsf_pio_try_push(), it may not clear the INTSTS0.CTRT at the
    right timing.
    So, this patch change the timing of usbhs_dcp_control_transfer_done()
    to the usbhsg_irq_ctrl_stage().
    Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    4ef35b10
fifo.c 27.9 KB