diff options
| -rw-r--r-- | drivers/net/ethernet/microchip/lan743x_main.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c index 310807ef328b..4d1b4a24907f 100644 --- a/drivers/net/ethernet/microchip/lan743x_main.c +++ b/drivers/net/ethernet/microchip/lan743x_main.c | |||
| @@ -1400,7 +1400,8 @@ static int lan743x_tx_frame_start(struct lan743x_tx *tx, | |||
| 1400 | } | 1400 | } |
| 1401 | 1401 | ||
| 1402 | static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx, | 1402 | static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx, |
| 1403 | unsigned int frame_length) | 1403 | unsigned int frame_length, |
| 1404 | int nr_frags) | ||
| 1404 | { | 1405 | { |
| 1405 | /* called only from within lan743x_tx_xmit_frame. | 1406 | /* called only from within lan743x_tx_xmit_frame. |
| 1406 | * assuming tx->ring_lock has already been acquired. | 1407 | * assuming tx->ring_lock has already been acquired. |
| @@ -1410,6 +1411,10 @@ static void lan743x_tx_frame_add_lso(struct lan743x_tx *tx, | |||
| 1410 | 1411 | ||
| 1411 | /* wrap up previous descriptor */ | 1412 | /* wrap up previous descriptor */ |
| 1412 | tx->frame_data0 |= TX_DESC_DATA0_EXT_; | 1413 | tx->frame_data0 |= TX_DESC_DATA0_EXT_; |
| 1414 | if (nr_frags <= 0) { | ||
| 1415 | tx->frame_data0 |= TX_DESC_DATA0_LS_; | ||
| 1416 | tx->frame_data0 |= TX_DESC_DATA0_IOC_; | ||
| 1417 | } | ||
| 1413 | tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; | 1418 | tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; |
| 1414 | tx_descriptor->data0 = tx->frame_data0; | 1419 | tx_descriptor->data0 = tx->frame_data0; |
| 1415 | 1420 | ||
| @@ -1514,8 +1519,11 @@ static void lan743x_tx_frame_end(struct lan743x_tx *tx, | |||
| 1514 | u32 tx_tail_flags = 0; | 1519 | u32 tx_tail_flags = 0; |
| 1515 | 1520 | ||
| 1516 | /* wrap up previous descriptor */ | 1521 | /* wrap up previous descriptor */ |
| 1517 | tx->frame_data0 |= TX_DESC_DATA0_LS_; | 1522 | if ((tx->frame_data0 & TX_DESC_DATA0_DTYPE_MASK_) == |
| 1518 | tx->frame_data0 |= TX_DESC_DATA0_IOC_; | 1523 | TX_DESC_DATA0_DTYPE_DATA_) { |
| 1524 | tx->frame_data0 |= TX_DESC_DATA0_LS_; | ||
| 1525 | tx->frame_data0 |= TX_DESC_DATA0_IOC_; | ||
| 1526 | } | ||
| 1519 | 1527 | ||
| 1520 | tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; | 1528 | tx_descriptor = &tx->ring_cpu_ptr[tx->frame_tail]; |
| 1521 | buffer_info = &tx->buffer_info[tx->frame_tail]; | 1529 | buffer_info = &tx->buffer_info[tx->frame_tail]; |
| @@ -1600,7 +1608,7 @@ static netdev_tx_t lan743x_tx_xmit_frame(struct lan743x_tx *tx, | |||
| 1600 | } | 1608 | } |
| 1601 | 1609 | ||
| 1602 | if (gso) | 1610 | if (gso) |
| 1603 | lan743x_tx_frame_add_lso(tx, frame_length); | 1611 | lan743x_tx_frame_add_lso(tx, frame_length, nr_frags); |
| 1604 | 1612 | ||
| 1605 | if (nr_frags <= 0) | 1613 | if (nr_frags <= 0) |
| 1606 | goto finish; | 1614 | goto finish; |
