Skip to content

Commit deb6bfa

Browse files
BryanW11731-MCHPdavem330
authored andcommitted
lan743x: Fix TX Stall Issue
It has been observed that tx queue may stall while downloading from certain web sites (example www.speedtest.net) The cause has been tracked down to a corner case where the tx interrupt vector was disabled automatically, but was not re enabled later. The lan743x has two mechanisms to enable/disable individual interrupts. Interrupts can be enabled/disabled by individual source, and they can also be enabled/disabled by individual vector which has been mapped to the source. Both must be enabled for interrupts to work properly. The TX code path, primarily uses the interrupt enable/disable of the TX source bit, while leaving the vector enabled all the time. However, while investigating this issue it was noticed that the driver requested the use of the vector auto clear feature. The test above revealed a case where the vector enable was cleared unintentionally. This patch fixes the issue by deleting the lines that request the vector auto clear feature to be used. Fixes: 23f0703 ("lan743x: Add main source files for new lan743x driver") Signed-off-by: Bryan Whitehead <Bryan.Whitehead@microchip.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 4d09d8d commit deb6bfa

File tree

1 file changed

+1
-8
lines changed

1 file changed

+1
-8
lines changed

drivers/net/ethernet/microchip/lan743x_main.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -585,8 +585,7 @@ static int lan743x_intr_open(struct lan743x_adapter *adapter)
585585

586586
if (adapter->csr.flags &
587587
LAN743X_CSR_FLAG_SUPPORTS_INTR_AUTO_SET_CLR) {
588-
flags = LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_CLEAR |
589-
LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET |
588+
flags = LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET |
590589
LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET |
591590
LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR |
592591
LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR;
@@ -599,12 +598,6 @@ static int lan743x_intr_open(struct lan743x_adapter *adapter)
599598
/* map TX interrupt to vector */
600599
int_vec_map1 |= INT_VEC_MAP1_TX_VEC_(index, vector);
601600
lan743x_csr_write(adapter, INT_VEC_MAP1, int_vec_map1);
602-
if (flags &
603-
LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_CLEAR) {
604-
int_vec_en_auto_clr |= INT_VEC_EN_(vector);
605-
lan743x_csr_write(adapter, INT_VEC_EN_AUTO_CLR,
606-
int_vec_en_auto_clr);
607-
}
608601

609602
/* Remove TX interrupt from shared mask */
610603
intr->vector_list[0].int_mask &= ~int_bit;

0 commit comments

Comments
 (0)