Skip to content

Commit 3ded76a

Browse files
ffainellidavem330
authored andcommitted
net: systemport: Only inspect valid switch port & queues
Hesoteric board configurations where port 0 is not available would still make SYSTEMPORT inspect the switch port 0, queue 0, which, not being enabled, would cause transmit timeouts over time. Just ignore those unconfigured rings instead. Fixes: 84ff33eeb23d ("net: systemport: Establish DSA network device queue mapping") Signed-off-by: Florian Fainelli <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 9681ab0 commit 3ded76a

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

drivers/net/ethernet/broadcom/bcmsysport.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1420,8 +1420,12 @@ static int bcm_sysport_init_tx_ring(struct bcm_sysport_priv *priv,
14201420
/* Configure QID and port mapping */
14211421
reg = tdma_readl(priv, TDMA_DESC_RING_MAPPING(index));
14221422
reg &= ~(RING_QID_MASK | RING_PORT_ID_MASK << RING_PORT_ID_SHIFT);
1423-
reg |= ring->switch_queue & RING_QID_MASK;
1424-
reg |= ring->switch_port << RING_PORT_ID_SHIFT;
1423+
if (ring->inspect) {
1424+
reg |= ring->switch_queue & RING_QID_MASK;
1425+
reg |= ring->switch_port << RING_PORT_ID_SHIFT;
1426+
} else {
1427+
reg |= RING_IGNORE_STATUS;
1428+
}
14251429
tdma_writel(priv, reg, TDMA_DESC_RING_MAPPING(index));
14261430
tdma_writel(priv, 0, TDMA_DESC_RING_PCP_DEI_VID(index));
14271431

@@ -2108,6 +2112,7 @@ static int bcm_sysport_map_queues(struct net_device *dev,
21082112
*/
21092113
ring->switch_queue = q;
21102114
ring->switch_port = port;
2115+
ring->inspect = true;
21112116
priv->ring_map[q + port * num_tx_queues] = ring;
21122117

21132118
/* Set all queues as being used now */

drivers/net/ethernet/broadcom/bcmsysport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -714,6 +714,7 @@ struct bcm_sysport_tx_ring {
714714
unsigned long bytes; /* bytes statistics */
715715
unsigned int switch_queue; /* switch port queue number */
716716
unsigned int switch_port; /* switch port queue number */
717+
bool inspect; /* inspect switch port and queue */
717718
};
718719

719720
/* Driver private structure */

0 commit comments

Comments
 (0)