net/ark: update DDM functions for firmware update
[dpdk.git] / drivers / net / nfp / nfp_common.c
index f8978e8..34e3a03 100644 (file)
@@ -176,6 +176,13 @@ nfp_net_configure(struct rte_eth_dev *dev)
                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;
 }
 
@@ -280,10 +287,6 @@ nfp_set_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr)
                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);
 
@@ -696,7 +699,17 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        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;
 
@@ -956,6 +969,13 @@ nfp_net_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
                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);
 
@@ -969,22 +989,25 @@ nfp_net_vlan_offload_set(struct rte_eth_dev *dev, int mask)
 {
        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;