usb: cdnsp: fix issue with ZLP - added TD_SIZE = 1

Patch modifies the TD_SIZE in TRB before ZLP TRB.
The TD_SIZE in TRB before ZLP TRB must be set to 1 to force
processing ZLP TRB by controller.

cc: <stable@vger.kernel.org>
Fixes: 3d82904559f4 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver")
Signed-off-by: Pawel Laszczak <pawell@cadence.com>
Reviewed-by: Peter Chen <peter.chen@kernel.org>
Link: https://lore.kernel.org/r/20221115092218.421267-1-pawell@cadence.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by Pawel Laszczak and committed by Greg Kroah-Hartman 7a21b27a f90f5afd

Changed files
+10 -4
drivers
usb
cdns3
+10 -4
drivers/usb/cdns3/cdnsp-ring.c
··· 1763 1763 int trb_buff_len, 1764 1764 unsigned int td_total_len, 1765 1765 struct cdnsp_request *preq, 1766 - bool more_trbs_coming) 1766 + bool more_trbs_coming, 1767 + bool zlp) 1767 1768 { 1768 1769 u32 maxp, total_packet_count; 1770 + 1771 + /* Before ZLP driver needs set TD_SIZE = 1. */ 1772 + if (zlp) 1773 + return 1; 1769 1774 1770 1775 /* One TRB with a zero-length data packet. */ 1771 1776 if (!more_trbs_coming || (transferred == 0 && trb_buff_len == 0) || ··· 1965 1960 /* Set the TRB length, TD size, and interrupter fields. */ 1966 1961 remainder = cdnsp_td_remainder(pdev, enqd_len, trb_buff_len, 1967 1962 full_len, preq, 1968 - more_trbs_coming); 1963 + more_trbs_coming, 1964 + zero_len_trb); 1969 1965 1970 1966 length_field = TRB_LEN(trb_buff_len) | TRB_TD_SIZE(remainder) | 1971 1967 TRB_INTR_TARGET(0); ··· 2031 2025 2032 2026 if (preq->request.length > 0) { 2033 2027 remainder = cdnsp_td_remainder(pdev, 0, preq->request.length, 2034 - preq->request.length, preq, 1); 2028 + preq->request.length, preq, 1, 0); 2035 2029 2036 2030 length_field = TRB_LEN(preq->request.length) | 2037 2031 TRB_TD_SIZE(remainder) | TRB_INTR_TARGET(0); ··· 2232 2226 /* Set the TRB length, TD size, & interrupter fields. */ 2233 2227 remainder = cdnsp_td_remainder(pdev, running_total, 2234 2228 trb_buff_len, td_len, preq, 2235 - more_trbs_coming); 2229 + more_trbs_coming, 0); 2236 2230 2237 2231 length_field = TRB_LEN(trb_buff_len) | TRB_INTR_TARGET(0); 2238 2232