bnxt_en: Check maximum supported MTU from firmware.
Some NICs have a firmware enforced maximum MTU setting by management firmware. Set up netdev->max_mtu accordingly. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c1a7bdff17
commit
7eb9bb3a0c
|
@ -2835,7 +2835,8 @@ int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
|
|||
if (page_mode) {
|
||||
if (bp->dev->mtu > BNXT_MAX_PAGE_MODE_MTU)
|
||||
return -EOPNOTSUPP;
|
||||
bp->dev->max_mtu = BNXT_MAX_PAGE_MODE_MTU;
|
||||
bp->dev->max_mtu =
|
||||
min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU);
|
||||
bp->flags &= ~BNXT_FLAG_AGG_RINGS;
|
||||
bp->flags |= BNXT_FLAG_NO_AGG_RINGS | BNXT_FLAG_RX_PAGE_MODE;
|
||||
bp->dev->hw_features &= ~NETIF_F_LRO;
|
||||
|
@ -2843,7 +2844,7 @@ int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
|
|||
bp->rx_dir = DMA_BIDIRECTIONAL;
|
||||
bp->rx_skb_func = bnxt_rx_page_skb;
|
||||
} else {
|
||||
bp->dev->max_mtu = BNXT_MAX_MTU;
|
||||
bp->dev->max_mtu = bp->max_mtu;
|
||||
bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE;
|
||||
bp->rx_dir = DMA_FROM_DEVICE;
|
||||
bp->rx_skb_func = bnxt_rx_skb;
|
||||
|
@ -4732,6 +4733,10 @@ static int bnxt_hwrm_func_qcfg(struct bnxt *bp)
|
|||
else
|
||||
bp->br_mode = BRIDGE_MODE_UNDEF;
|
||||
|
||||
bp->max_mtu = le16_to_cpu(resp->max_mtu_configured);
|
||||
if (!bp->max_mtu)
|
||||
bp->max_mtu = BNXT_MAX_MTU;
|
||||
|
||||
func_qcfg_exit:
|
||||
mutex_unlock(&bp->hwrm_cmd_lock);
|
||||
return rc;
|
||||
|
@ -8095,10 +8100,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
dev->features |= dev->hw_features | NETIF_F_HIGHDMA;
|
||||
dev->priv_flags |= IFF_UNICAST_FLT;
|
||||
|
||||
/* MTU range: 60 - 9500 */
|
||||
dev->min_mtu = ETH_ZLEN;
|
||||
dev->max_mtu = BNXT_MAX_MTU;
|
||||
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
init_waitqueue_head(&bp->sriov_cfg_wait);
|
||||
mutex_init(&bp->sriov_lock);
|
||||
|
@ -8146,6 +8147,10 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
bnxt_ethtool_init(bp);
|
||||
bnxt_dcb_init(bp);
|
||||
|
||||
/* MTU range: 60 - FW defined max */
|
||||
dev->min_mtu = ETH_ZLEN;
|
||||
dev->max_mtu = bp->max_mtu;
|
||||
|
||||
rc = bnxt_probe_phy(bp);
|
||||
if (rc)
|
||||
goto init_err_pci_clean;
|
||||
|
|
|
@ -1172,6 +1172,7 @@ struct bnxt {
|
|||
int nr_vnics;
|
||||
u32 rss_hash_cfg;
|
||||
|
||||
u16 max_mtu;
|
||||
u8 max_tc;
|
||||
u8 max_lltc; /* lossless TCs */
|
||||
struct bnxt_queue_info q_info[BNXT_MAX_QUEUE];
|
||||
|
|
Loading…
Reference in New Issue