ring->rx_buf_len = vsi->rx_buf_len;
 
-       rx_ctx.dbuff = ring->rx_buf_len >> I40E_RXQ_CTX_DBUFF_SHIFT;
+       rx_ctx.dbuff = DIV_ROUND_UP(ring->rx_buf_len,
+                                   BIT_ULL(I40E_RXQ_CTX_DBUFF_SHIFT));
 
        rx_ctx.base = (ring->dma / 128);
        rx_ctx.qlen = ring->count;
        int err = 0;
        u16 i;
 
-       if (vsi->netdev && (vsi->netdev->mtu > ETH_DATA_LEN))
-               vsi->max_frame = vsi->netdev->mtu + ETH_HLEN
-                              + ETH_FCS_LEN + VLAN_HLEN;
-       else
-               vsi->max_frame = I40E_RXBUFFER_2048;
-
-       vsi->rx_buf_len = I40E_RXBUFFER_2048;
-
-       /* round up for the chip's needs */
-       vsi->rx_buf_len = ALIGN(vsi->rx_buf_len,
-                               BIT_ULL(I40E_RXQ_CTX_DBUFF_SHIFT));
+       if (!vsi->netdev || (vsi->back->flags & I40E_FLAG_LEGACY_RX)) {
+               vsi->max_frame = I40E_MAX_RXBUFFER;
+               vsi->rx_buf_len = I40E_RXBUFFER_2048;
+#if (PAGE_SIZE < 8192)
+       } else if (vsi->netdev->mtu <= ETH_DATA_LEN) {
+               vsi->max_frame = I40E_RXBUFFER_1536 - NET_IP_ALIGN;
+               vsi->rx_buf_len = I40E_RXBUFFER_1536 - NET_IP_ALIGN;
+#endif
+       } else {
+               vsi->max_frame = I40E_MAX_RXBUFFER;
+               vsi->rx_buf_len = I40E_RXBUFFER_2048;
+       }
 
        /* set up individual rings */
        for (i = 0; i < vsi->num_queue_pairs && !err; i++)
 
 
 /* Supported Rx Buffer Sizes (a multiple of 128) */
 #define I40E_RXBUFFER_256   256
+#define I40E_RXBUFFER_1536  1536  /* 128B aligned standard Ethernet frame */
 #define I40E_RXBUFFER_2048  2048
-#define I40E_RXBUFFER_3072  3072   /* For FCoE MTU of 2158 */
-#define I40E_RXBUFFER_4096  4096
-#define I40E_RXBUFFER_8192  8192
 #define I40E_MAX_RXBUFFER   9728  /* largest size for single descriptor */
 
 /* NOTE: netdev_alloc_skb reserves up to 64 bytes, NET_IP_ALIGN means we
 
 
 /* Supported Rx Buffer Sizes (a multiple of 128) */
 #define I40E_RXBUFFER_256   256
+#define I40E_RXBUFFER_1536  1536  /* 128B aligned standard Ethernet frame */
 #define I40E_RXBUFFER_2048  2048
-#define I40E_RXBUFFER_3072  3072   /* For FCoE MTU of 2158 */
-#define I40E_RXBUFFER_4096  4096
-#define I40E_RXBUFFER_8192  8192
 #define I40E_MAX_RXBUFFER   9728  /* largest size for single descriptor */
 
 /* NOTE: netdev_alloc_skb reserves up to 64 bytes, NET_IP_ALIGN means we
 
 #define I40EVF_MAX_RXD         4096
 #define I40EVF_MIN_RXD         64
 #define I40EVF_REQ_DESCRIPTOR_MULTIPLE 32
-
-/* Supported Rx Buffer Sizes */
-#define I40EVF_RXBUFFER_2048   2048
-#define I40EVF_MAX_RXBUFFER    16384  /* largest size for single descriptor */
 #define I40EVF_MAX_AQ_BUF_SIZE 4096
 #define I40EVF_AQ_LEN          32
 #define I40EVF_AQ_MAX_ERR      20 /* times to try before resetting AQ */
 
  **/
 static void i40evf_configure_rx(struct i40evf_adapter *adapter)
 {
+       unsigned int rx_buf_len = I40E_RXBUFFER_2048;
+       struct net_device *netdev = adapter->netdev;
        struct i40e_hw *hw = &adapter->hw;
        int i;
 
+       /* Legacy Rx will always default to a 2048 buffer size. */
+#if (PAGE_SIZE < 8192)
+       if (!(adapter->flags & I40EVF_FLAG_LEGACY_RX)) {
+               /* We use a 1536 buffer size for configurations with
+                * standard Ethernet mtu.  On x86 this gives us enough room
+                * for shared info and 192 bytes of padding.
+                */
+               if (netdev->mtu <= ETH_DATA_LEN)
+                       rx_buf_len = I40E_RXBUFFER_1536 - NET_IP_ALIGN;
+       }
+#endif
+
        for (i = 0; i < adapter->num_active_queues; i++) {
                adapter->rx_rings[i].tail = hw->hw_addr + I40E_QRX_TAIL1(i);
-               adapter->rx_rings[i].rx_buf_len = I40EVF_RXBUFFER_2048;
+               adapter->rx_rings[i].rx_buf_len = rx_buf_len;
        }
 }
 
 
        struct i40e_virtchnl_vsi_queue_config_info *vqci;
        struct i40e_virtchnl_queue_pair_info *vqpi;
        int pairs = adapter->num_active_queues;
-       int i, len;
+       int i, len, max_frame = I40E_MAX_RXBUFFER;
 
        if (adapter->current_op != I40E_VIRTCHNL_OP_UNKNOWN) {
                /* bail because we already have a command pending */
        if (!vqci)
                return;
 
+       /* Limit maximum frame size when jumbo frames is not enabled */
+       if (!(adapter->flags & I40EVF_FLAG_LEGACY_RX) &&
+           (adapter->netdev->mtu <= ETH_DATA_LEN))
+               max_frame = I40E_RXBUFFER_1536 - NET_IP_ALIGN;
+
        vqci->vsi_id = adapter->vsi_res->vsi_id;
        vqci->num_queue_pairs = pairs;
        vqpi = vqci->qpair;
                vqpi->rxq.queue_id = i;
                vqpi->rxq.ring_len = adapter->rx_rings[i].count;
                vqpi->rxq.dma_ring_addr = adapter->rx_rings[i].dma;
-               vqpi->rxq.max_pkt_size = adapter->netdev->mtu
-                                       + ETH_HLEN + VLAN_HLEN + ETH_FCS_LEN;
-               vqpi->rxq.databuffer_size = adapter->rx_rings[i].rx_buf_len;
+               vqpi->rxq.max_pkt_size = max_frame;
+               vqpi->rxq.databuffer_size =
+                       ALIGN(adapter->rx_rings[i].rx_buf_len,
+                             BIT_ULL(I40E_RXQ_CTX_DBUFF_SHIFT));
                vqpi++;
        }