@@ -1763,10 +1763,15 @@ static u32 cdnsp_td_remainder(struct cdnsp_device *pdev,
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 ;
1769
1770
1771
+ /* Before ZLP driver needs set TD_SIZE = 1. */
1772
+ if (zlp )
1773
+ return 1 ;
1774
+
1770
1775
/* One TRB with a zero-length data packet. */
1771
1776
if (!more_trbs_coming || (transferred == 0 && trb_buff_len == 0 ) ||
1772
1777
trb_buff_len == td_total_len )
@@ -1960,7 +1965,8 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq)
1960
1965
/* Set the TRB length, TD size, and interrupter fields. */
1961
1966
remainder = cdnsp_td_remainder (pdev , enqd_len , trb_buff_len ,
1962
1967
full_len , preq ,
1963
- more_trbs_coming );
1968
+ more_trbs_coming ,
1969
+ zero_len_trb );
1964
1970
1965
1971
length_field = TRB_LEN (trb_buff_len ) | TRB_TD_SIZE (remainder ) |
1966
1972
TRB_INTR_TARGET (0 );
@@ -2025,7 +2031,7 @@ int cdnsp_queue_ctrl_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq)
2025
2031
2026
2032
if (preq -> request .length > 0 ) {
2027
2033
remainder = cdnsp_td_remainder (pdev , 0 , preq -> request .length ,
2028
- preq -> request .length , preq , 1 );
2034
+ preq -> request .length , preq , 1 , 0 );
2029
2035
2030
2036
length_field = TRB_LEN (preq -> request .length ) |
2031
2037
TRB_TD_SIZE (remainder ) | TRB_INTR_TARGET (0 );
@@ -2226,7 +2232,7 @@ static int cdnsp_queue_isoc_tx(struct cdnsp_device *pdev,
2226
2232
/* Set the TRB length, TD size, & interrupter fields. */
2227
2233
remainder = cdnsp_td_remainder (pdev , running_total ,
2228
2234
trb_buff_len , td_len , preq ,
2229
- more_trbs_coming );
2235
+ more_trbs_coming , 0 );
2230
2236
2231
2237
length_field = TRB_LEN (trb_buff_len ) | TRB_INTR_TARGET (0 );
2232
2238
0 commit comments