From: Kejian Yan <yankej...@huawei.com>

In chip V1, the maximum mtu value is 9600. But in chip V2, it is 9728.
And it is always configurates as 9600 before this patch.

Signed-off-by: Kejian Yan <yankej...@huawei.com>
Signed-off-by: Yisen Zhuang <yisen.zhu...@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 4 +++-
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h | 1 +
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c | 3 +++
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h | 2 ++
 4 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c 
b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
index 5f35418..3f96e3d 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
@@ -467,8 +467,10 @@ int hns_mac_set_mtu(struct hns_mac_cb *mac_cb, u32 new_mtu)
        struct mac_driver *drv = hns_mac_get_drv(mac_cb);
        u32 buf_size = mac_cb->dsaf_dev->buf_size;
        u32 new_frm = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
+       u32 max_frm = AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver) ?
+                       MAC_MAX_MTU : MAC_MAX_MTU_V2;
 
-       if ((new_mtu < MAC_MIN_MTU) || (new_frm > MAC_MAX_MTU) ||
+       if ((new_mtu < MAC_MIN_MTU) || (new_frm > max_frm) ||
            (new_frm > HNS_RCB_RING_MAX_BD_PER_PKT * buf_size))
                return -EINVAL;
 
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h 
b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
index 68b01fe..a69c8af 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
@@ -26,6 +26,7 @@ struct dsaf_device;
 
 #define MAC_DEFAULT_MTU        (ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN + 
ETH_DATA_LEN)
 #define MAC_MAX_MTU            9600
+#define MAC_MAX_MTU_V2         9728
 #define MAC_MIN_MTU            68
 
 #define MAC_DEFAULT_PAUSE_TIME 0xff
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c 
b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c
index 811ef35..f2a7b8a 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c
@@ -343,6 +343,9 @@ static void hns_ppe_init_hw(struct hns_ppe_cb *ppe_cb)
        if (!AE_IS_VER1(dsaf_dev->dsaf_ver)) {
                hns_ppe_set_vlan_strip(ppe_cb, 0);
 
+               dsaf_write_dev(ppe_cb, PPE_CFG_MAX_FRAME_LEN_REG,
+                              HNS_PPEV2_MAX_FRAME_LEN);
+
                /* set default RSS key in h/w */
                hns_ppe_set_rss_key(ppe_cb, ppe_cb->rss_key);
 
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h 
b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h
index 0f5cb69..e9c0ec2 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h
@@ -30,6 +30,8 @@
 #define HNS_PPEV2_RSS_KEY_SIZE 40 /* in bytes or 320 bits */
 #define HNS_PPEV2_RSS_KEY_NUM (HNS_PPEV2_RSS_KEY_SIZE / sizeof(u32))
 
+#define HNS_PPEV2_MAX_FRAME_LEN 0X980
+
 enum ppe_qid_mode {
        PPE_QID_MODE0 = 0, /* fixed queue id mode */
        PPE_QID_MODE1,     /* switch:128VM non switch:6Port/4VM/4TC */
-- 
1.9.1

Reply via email to