From: "Chen Jing D(Mark)" <jing.d.c...@intel.com>

fm10k can't receive frame greater than 1536 and Scatter RX
function can't work correctly. The root cause is
SRRCTL.FM10K_SRRCTL_BUFFER_CHAINING_EN bit is not enabled.

Signed-off-by: Chen Jing D(Mark) <jing.d.chen at intel.com>
---
 drivers/net/fm10k/fm10k_ethdev.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/net/fm10k/fm10k_ethdev.c b/drivers/net/fm10k/fm10k_ethdev.c
index a5e09a0..19e718b 100644
--- a/drivers/net/fm10k/fm10k_ethdev.c
+++ b/drivers/net/fm10k/fm10k_ethdev.c
@@ -439,9 +439,14 @@ fm10k_dev_rx_init(struct rte_eth_dev *dev)

                /* It adds dual VLAN length for supporting dual VLAN */
                if ((dev->data->dev_conf.rxmode.max_rx_pkt_len +
-                               2 * FM10K_VLAN_TAG_SIZE) > buf_size){
+                               2 * FM10K_VLAN_TAG_SIZE) > buf_size ||
+                       dev->data->dev_conf.rxmode.enable_scatter) {
+                       uint32_t reg;
                        dev->data->scattered_rx = 1;
                        dev->rx_pkt_burst = fm10k_recv_scattered_pkts;
+                       reg = FM10K_READ_REG(hw, FM10K_SRRCTL(i));
+                       reg |= FM10K_SRRCTL_BUFFER_CHAINING_EN;
+                       FM10K_WRITE_REG(hw, FM10K_SRRCTL(i), reg);
                }

                /* Enable drop on empty, it's RO for VF */
@@ -452,11 +457,6 @@ fm10k_dev_rx_init(struct rte_eth_dev *dev)
                FM10K_WRITE_FLUSH(hw);
        }

-       if (dev->data->dev_conf.rxmode.enable_scatter) {
-               dev->rx_pkt_burst = fm10k_recv_scattered_pkts;
-               dev->data->scattered_rx = 1;
-       }
-
        /* Configure RSS if applicable */
        fm10k_dev_mq_rx_configure(dev);
        return 0;
-- 
1.7.7.6

Reply via email to