forked from Minki/linux
ixgbe: Enable jumbo frame for FCoE feature in 82599
Enable jumbo frame when FCoE feature is enabled in 82599. Use 3K as the receive queue buffer size for receive queues used by FCoE to address for max Fiber Channel frame size as 2148 bytes (with max 2112 bytes of payload). Signed-off-by: Yi Zou <yi.zou@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
29ebf6f8c8
commit
63f39bd17a
@ -222,6 +222,10 @@ struct ixgbe_q_vector {
|
|||||||
(&(((struct ixgbe_adv_tx_context_desc *)((R).desc))[i]))
|
(&(((struct ixgbe_adv_tx_context_desc *)((R).desc))[i]))
|
||||||
|
|
||||||
#define IXGBE_MAX_JUMBO_FRAME_SIZE 16128
|
#define IXGBE_MAX_JUMBO_FRAME_SIZE 16128
|
||||||
|
#ifdef IXGBE_FCOE
|
||||||
|
/* Use 3K as the baby jumbo frame size for FCoE */
|
||||||
|
#define IXGBE_FCOE_JUMBO_FRAME_SIZE 3072
|
||||||
|
#endif /* IXGBE_FCOE */
|
||||||
|
|
||||||
#define OTHER_VECTOR 1
|
#define OTHER_VECTOR 1
|
||||||
#define NON_Q_VECTORS (OTHER_VECTOR)
|
#define NON_Q_VECTORS (OTHER_VECTOR)
|
||||||
|
@ -1864,6 +1864,10 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
|
|||||||
hlreg0 &= ~IXGBE_HLREG0_JUMBOEN;
|
hlreg0 &= ~IXGBE_HLREG0_JUMBOEN;
|
||||||
else
|
else
|
||||||
hlreg0 |= IXGBE_HLREG0_JUMBOEN;
|
hlreg0 |= IXGBE_HLREG0_JUMBOEN;
|
||||||
|
#ifdef IXGBE_FCOE
|
||||||
|
if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED)
|
||||||
|
hlreg0 |= IXGBE_HLREG0_JUMBOEN;
|
||||||
|
#endif
|
||||||
IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
|
IXGBE_WRITE_REG(hw, IXGBE_HLREG0, hlreg0);
|
||||||
|
|
||||||
rdlen = adapter->rx_ring[0].count * sizeof(union ixgbe_adv_rx_desc);
|
rdlen = adapter->rx_ring[0].count * sizeof(union ixgbe_adv_rx_desc);
|
||||||
@ -1885,6 +1889,17 @@ static void ixgbe_configure_rx(struct ixgbe_adapter *adapter)
|
|||||||
adapter->rx_ring[i].tail = IXGBE_RDT(j);
|
adapter->rx_ring[i].tail = IXGBE_RDT(j);
|
||||||
adapter->rx_ring[i].rx_buf_len = rx_buf_len;
|
adapter->rx_ring[i].rx_buf_len = rx_buf_len;
|
||||||
|
|
||||||
|
#ifdef IXGBE_FCOE
|
||||||
|
if (adapter->flags & IXGBE_FLAG_FCOE_ENABLED) {
|
||||||
|
struct ixgbe_ring_feature *f;
|
||||||
|
f = &adapter->ring_feature[RING_F_FCOE];
|
||||||
|
if ((rx_buf_len < IXGBE_FCOE_JUMBO_FRAME_SIZE) &&
|
||||||
|
(i >= f->mask) && (i < f->mask + f->indices))
|
||||||
|
adapter->rx_ring[i].rx_buf_len =
|
||||||
|
IXGBE_FCOE_JUMBO_FRAME_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* IXGBE_FCOE */
|
||||||
ixgbe_configure_srrctl(adapter, j);
|
ixgbe_configure_srrctl(adapter, j);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2423,6 +2438,13 @@ static int ixgbe_up_complete(struct ixgbe_adapter *adapter)
|
|||||||
IXGBE_WRITE_REG(hw, IXGBE_GPIE, gpie);
|
IXGBE_WRITE_REG(hw, IXGBE_GPIE, gpie);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef IXGBE_FCOE
|
||||||
|
/* adjust max frame to be able to do baby jumbo for FCoE */
|
||||||
|
if ((adapter->flags & IXGBE_FLAG_FCOE_ENABLED) &&
|
||||||
|
(max_frame < IXGBE_FCOE_JUMBO_FRAME_SIZE))
|
||||||
|
max_frame = IXGBE_FCOE_JUMBO_FRAME_SIZE;
|
||||||
|
|
||||||
|
#endif /* IXGBE_FCOE */
|
||||||
mhadd = IXGBE_READ_REG(hw, IXGBE_MHADD);
|
mhadd = IXGBE_READ_REG(hw, IXGBE_MHADD);
|
||||||
if (max_frame != (mhadd >> IXGBE_MHADD_MFS_SHIFT)) {
|
if (max_frame != (mhadd >> IXGBE_MHADD_MFS_SHIFT)) {
|
||||||
mhadd &= ~IXGBE_MHADD_MFS_MASK;
|
mhadd &= ~IXGBE_MHADD_MFS_MASK;
|
||||||
|
Loading…
Reference in New Issue
Block a user