net/dpaa2: configure jumbo frames
[dpdk.git] / drivers / net / dpaa2 / dpaa2_ethdev.c
index edff04a..efd6064 100644 (file)
@@ -57,6 +57,7 @@ static struct rte_dpaa2_driver rte_dpaa2_pmd;
 static int dpaa2_dev_uninit(struct rte_eth_dev *eth_dev);
 static int dpaa2_dev_set_link_up(struct rte_eth_dev *dev);
 static int dpaa2_dev_set_link_down(struct rte_eth_dev *dev);
+static int dpaa2_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu);
 
 /**
  * Atomically reads the link status information from global
@@ -278,6 +279,20 @@ dpaa2_eth_dev_configure(struct rte_eth_dev *dev)
 
        PMD_INIT_FUNC_TRACE();
 
+       if (eth_conf->rxmode.jumbo_frame == 1) {
+               if (eth_conf->rxmode.max_rx_pkt_len <= DPAA2_MAX_RX_PKT_LEN) {
+                       ret = dpaa2_dev_mtu_set(dev,
+                                       eth_conf->rxmode.max_rx_pkt_len);
+                       if (ret) {
+                               PMD_INIT_LOG(ERR,
+                                            "unable to set mtu. check config\n");
+                               return ret;
+                       }
+               } else {
+                       return -1;
+               }
+       }
+
        /* Check for correct configuration */
        if (eth_conf->rxmode.mq_mode != ETH_MQ_RX_RSS &&
            data->nb_rx_queues > 1) {
@@ -778,6 +793,11 @@ dpaa2_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu)
        if ((mtu < ETHER_MIN_MTU) || (frame_size > DPAA2_MAX_RX_PKT_LEN))
                return -EINVAL;
 
+       if (frame_size > ETHER_MAX_LEN)
+               dev->data->dev_conf.rxmode.jumbo_frame = 1;
+       else
+               dev->data->dev_conf.rxmode.jumbo_frame = 0;
+
        /* Set the Max Rx frame length as 'mtu' +
         * Maximum Ethernet header length
         */