return -EINVAL;
}
+ /* Checking MTU set */
+ if (rxmode->mtu > hw->flbufsz) {
+ PMD_INIT_LOG(INFO, "MTU (%u) larger then current mbufsize (%u) not supported",
+ rxmode->mtu, hw->flbufsz);
+ return -ERANGE;
+ }
+
return 0;
}
return -EBUSY;
}
- if ((hw->ctrl & NFP_NET_CFG_CTRL_ENABLE) &&
- !(hw->cap & NFP_NET_CFG_CTRL_LIVE_ADDR))
- return -EBUSY;
-
/* Writing new MAC to the specific port BAR address */
nfp_net_write_mac(hw, (uint8_t *)mac_addr);
dev_info->max_rx_queues = (uint16_t)hw->max_rx_queues;
dev_info->max_tx_queues = (uint16_t)hw->max_tx_queues;
dev_info->min_rx_bufsize = RTE_ETHER_MIN_MTU;
- dev_info->max_rx_pktlen = hw->max_mtu;
+ /*
+ * The maximum rx packet length (max_rx_pktlen) is set to the
+ * maximum supported frame size that the NFP can handle. This
+ * includes layer 2 headers, CRC and other metadata that can
+ * optionally be used.
+ * The maximum layer 3 MTU (max_mtu) is read from hardware,
+ * which was set by the firmware loaded onto the card.
+ */
+ dev_info->max_rx_pktlen = NFP_FRAME_SIZE_MAX;
+ dev_info->max_mtu = hw->max_mtu;
+ dev_info->min_mtu = RTE_ETHER_MIN_MTU;
/* Next should change when PF support is implemented */
dev_info->max_mac_addrs = 1;
return -EBUSY;
}
+ /* MTU larger then current mbufsize not supported */
+ if (mtu > hw->flbufsz) {
+ PMD_DRV_LOG(ERR, "MTU (%u) larger then current mbufsize (%u) not supported",
+ mtu, hw->flbufsz);
+ return -ERANGE;
+ }
+
/* writing to configuration space */
nn_cfg_writel(hw, NFP_NET_CFG_MTU, mtu);
{
uint32_t new_ctrl, update;
struct nfp_net_hw *hw;
+ struct rte_eth_conf *dev_conf;
int ret;
hw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);
- new_ctrl = 0;
-
- /* Enable vlan strip if it is not configured yet */
- if ((mask & RTE_ETH_VLAN_STRIP_OFFLOAD) &&
- !(hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN))
- new_ctrl = hw->ctrl | NFP_NET_CFG_CTRL_RXVLAN;
+ dev_conf = &dev->data->dev_conf;
+ new_ctrl = hw->ctrl;
- /* Disable vlan strip just if it is configured */
- if (!(mask & RTE_ETH_VLAN_STRIP_OFFLOAD) &&
- (hw->ctrl & NFP_NET_CFG_CTRL_RXVLAN))
- new_ctrl = hw->ctrl & ~NFP_NET_CFG_CTRL_RXVLAN;
+ /*
+ * Vlan stripping setting
+ * Enable or disable VLAN stripping
+ */
+ if (mask & RTE_ETH_VLAN_STRIP_MASK) {
+ if (dev_conf->rxmode.offloads & RTE_ETH_RX_OFFLOAD_VLAN_STRIP)
+ new_ctrl |= NFP_NET_CFG_CTRL_RXVLAN;
+ else
+ new_ctrl &= ~NFP_NET_CFG_CTRL_RXVLAN;
+ }
- if (new_ctrl == 0)
+ if (new_ctrl == hw->ctrl)
return 0;
update = NFP_NET_CFG_UPDATE_GEN;