All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net 00/10] net: hns: bugs fixed for hns
@ 2016-03-21 11:06 Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 01/10] net: hns: bug fix about ping6 Yisen Zhuang
                   ` (9 more replies)
  0 siblings, 10 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

This series includes some bug fixes and updates for hns driver.

>from Daode, one fix about mss.

>from Kejian, one fix about ping6 issue, one fix about mac address setting,
two fix for RSS setting, two fix about mtu setting.

>from qianqian, fixed HNS v2 xge statistic reg issue.

>from Sheng, one fix about manage packets sending, one fix about GMACs mac
setting.

For more details, please see individual patches.

Thanks a lot!

Daode Huang (1):
  net: hns: bug fix about the overflow of mss

Kejian Yan (6):
  net: hns: bug fix about ping6
  net: hns: add uc match for debug ports
  net: hns: fix return value of the function about rss
  net: hns: fixes a bug of RSS
  net: hns: fix the bug about mtu setting
  net: hns: adds limitation for debug port mtu

Qianqian Xie (1):
  net: hns: set xge statistic reg as read only

Sheng Li (2):
  net: hns: fixed portid bug in sending manage pkt
  net: hns: fixed the bug about GMACs mac setting

 drivers/net/ethernet/hisilicon/hns/hnae.h          |  3 ++
 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c  | 12 +++++--
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c | 40 +++++++++++++++++----
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c  | 18 +++++++++-
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h  |  4 +++
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c |  5 +--
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c  |  5 ++-
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.h  |  2 ++
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h  |  2 ++
 drivers/net/ethernet/hisilicon/hns/hns_enet.c      | 32 +++++++++++------
 drivers/net/ethernet/hisilicon/hns/hns_ethtool.c   | 42 ++++++++++++----------
 11 files changed, 123 insertions(+), 42 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [PATCH net 01/10] net: hns: bug fix about ping6
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 15:39   ` David Miller
  2016-03-21 11:06 ` [PATCH net 02/10] net: hns: fixed portid bug in sending manage pkt Yisen Zhuang
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Kejian Yan <yankejian@huawei.com>

The current upstreaming code fails to ping other IPv6 net device, because
the enet receives the multicast packets with the src mac addr whick is the
same as its mac addr. These packets need to be dropped.

Signed-off-by: Kejian Yan <yankejian@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_enet.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index 3f77ff7..9ad5da4 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -564,6 +564,7 @@ static int hns_nic_poll_rx_skb(struct hns_nic_ring_data *ring_data,
 	struct sk_buff *skb;
 	struct hnae_desc *desc;
 	struct hnae_desc_cb *desc_cb;
+	struct ethhdr *eh;
 	unsigned char *va;
 	int bnum, length, i;
 	int pull_len;
@@ -670,6 +671,14 @@ out_bnum_err:
 		return -EFAULT;
 	}
 
+	/* filter out multicast pkt with the same src mac as this port */
+	eh = (struct ethhdr *)skb->data;
+	if (unlikely(is_multicast_ether_addr(eh->h_dest) &&
+		     ether_addr_equal(ndev->dev_addr, eh->h_source))) {
+		dev_kfree_skb_any(skb);
+		return -EFAULT;
+	}
+
 	ring->stats.rx_pkts++;
 	ring->stats.rx_bytes += skb->len;
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 02/10] net: hns: fixed portid bug in sending manage pkt
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 01/10] net: hns: bug fix about ping6 Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 03/10] net: hns: add uc match for debug ports Yisen Zhuang
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Sheng Li <lisheng011@huawei.com>

In chip V2, the default value of port id in tx BD is Zero. If it is not
configurated to the other value, all management packets will be sent out
from port0. So port_id in the tx BD needs to be updated when sending a
management packet.

In V2 chip, when sending mamagement packets, the driver should
config the port id to BD descs.

Signed-off-by: Sheng Li <lisheng011@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hnae.h         | 3 +++
 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c | 1 +
 drivers/net/ethernet/hisilicon/hns/hns_enet.c     | 6 +++++-
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hnae.h b/drivers/net/ethernet/hisilicon/hns/hnae.h
index 1cbcb9f..37d0cce 100644
--- a/drivers/net/ethernet/hisilicon/hns/hnae.h
+++ b/drivers/net/ethernet/hisilicon/hns/hnae.h
@@ -147,6 +147,8 @@ enum hnae_led_state {
 
 #define HNSV2_TXD_BUFNUM_S 0
 #define HNSV2_TXD_BUFNUM_M (0x7 << HNSV2_TXD_BUFNUM_S)
+#define HNSV2_TXD_PORTID_S	4
+#define HNSV2_TXD_PORTID_M	(0X7 << HNSV2_TXD_PORTID_S)
 #define HNSV2_TXD_RI_B   1
 #define HNSV2_TXD_L4CS_B   2
 #define HNSV2_TXD_L3CS_B   3
@@ -516,6 +518,7 @@ struct hnae_handle {
 	int q_num;
 	int vf_id;
 	u32 eport_id;
+	u32 dport_id;	/* v2 tx bd should fill the dport_id */
 	enum hnae_port_type port_type;
 	struct list_head node;    /* list to hnae_ae_dev->handle_list */
 	struct hnae_buf_ops *bops; /* operation for the buffer */
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
index d4f92ed..90352d6 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
@@ -175,6 +175,7 @@ struct hnae_handle *hns_ae_get_handle(struct hnae_ae_dev *dev,
 	ae_handle->phy_node = vf_cb->mac_cb->phy_node;
 	ae_handle->if_support = vf_cb->mac_cb->if_support;
 	ae_handle->port_type = vf_cb->mac_cb->mac_type;
+	ae_handle->dport_id = port_idx;
 
 	return ae_handle;
 vf_id_err:
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index 9ad5da4..8aa325e 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -66,10 +66,14 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
 	desc->addr = cpu_to_le64(dma);
 	desc->tx.send_size = cpu_to_le16((u16)size);
 
-	/*config bd buffer end */
+	/* config bd buffer end */
 	hnae_set_bit(rrcfv, HNSV2_TXD_VLD_B, 1);
 	hnae_set_field(bn_pid, HNSV2_TXD_BUFNUM_M, 0, buf_num - 1);
 
+	/* fill port_id in the tx bd for sending management pkts */
+	hnae_set_field(bn_pid, HNSV2_TXD_PORTID_M,
+		       HNSV2_TXD_PORTID_S, ring->q->handle->dport_id);
+
 	if (type == DESC_TYPE_SKB) {
 		skb = (struct sk_buff *)priv;
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 03/10] net: hns: add uc match for debug ports
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 01/10] net: hns: bug fix about ping6 Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 02/10] net: hns: fixed portid bug in sending manage pkt Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 15:40   ` David Miller
  2016-03-21 11:06 ` [PATCH net 04/10] net: hns: fixed the bug about GMACs mac setting Yisen Zhuang
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Kejian Yan <yankejian@huawei.com>

Debug ports receives lots of packets with dest mac addr does not match
local mac addr, because the filter is close, and it does not drop the
useless packets. This patch adds ON/OFF switch of filtering the packets
whose dest mac addr do not match the local addr in  mac table. And the
switch is ON in initialization.

Signed-off-by: Kejian Yan <yankejian@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c  |  3 +++
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c | 30 +++++++++++++++++++++-
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c  | 11 ++++++++
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h  |  2 ++
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h  |  2 ++
 5 files changed, 47 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
index 90352d6..5e0cedf 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
@@ -420,7 +420,10 @@ static int hns_ae_set_autoneg(struct hnae_handle *handle, u8 enable)
 
 static void hns_ae_set_promisc_mode(struct hnae_handle *handle, u32 en)
 {
+	struct hns_mac_cb *mac_cb = hns_get_mac_cb(handle);
+
 	hns_dsaf_set_promisc_mode(hns_ae_get_dsaf_dev(handle->dev), en);
+	(void)hns_mac_set_promisc(mac_cb, (u8)!!en);
 }
 
 static int hns_ae_get_autoneg(struct hnae_handle *handle)
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
index b8517b0..5881405 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
@@ -290,6 +290,26 @@ static int hns_gmac_adjust_link(void *mac_drv, enum mac_speed speed,
 	return 0;
 }
 
+static void hns_gmac_set_uc_match(void *mac_drv, u16 en)
+{
+	struct mac_driver *drv = (struct mac_driver *)mac_drv;
+
+	dsaf_set_dev_bit(drv, GMAC_REC_FILT_CONTROL_REG,
+			 GMAC_UC_MATCH_EN_B, !en);
+	dsaf_set_dev_bit(drv, GMAC_STATION_ADDR_HIGH_2_REG,
+			 GMAC_ADDR_EN_B, !en);
+}
+
+static int hns_gmac_set_promisc(void *mac_drv, u8 en)
+{
+	struct mac_driver *drv = (struct mac_driver *)mac_drv;
+
+	if (drv->mac_cb->mac_type == HNAE_PORT_DEBUG)
+		hns_gmac_set_uc_match(mac_drv, en);
+
+	return 0;
+}
+
 static void hns_gmac_init(void *mac_drv)
 {
 	u32 port;
@@ -305,6 +325,8 @@ static void hns_gmac_init(void *mac_drv)
 	mdelay(10);
 	hns_gmac_disable(mac_drv, MAC_COMM_MODE_RX_AND_TX);
 	hns_gmac_tx_loop_pkt_dis(mac_drv);
+	if (drv->mac_cb->mac_type == HNAE_PORT_DEBUG)
+		hns_gmac_set_uc_match(mac_drv, 0);
 }
 
 void hns_gmac_update_stats(void *mac_drv)
@@ -407,8 +429,13 @@ static void hns_gmac_set_mac_addr(void *mac_drv, char *mac_addr)
 
 		u32 low_val = mac_addr[5] | (mac_addr[4] << 8)
 			| (mac_addr[3] << 16) | (mac_addr[2] << 24);
+
+		u32 val = dsaf_read_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG);
+		u32 sta_addr_en = dsaf_get_bit(val, GMAC_ADDR_EN_B);
+
 		dsaf_write_dev(drv, GMAC_STATION_ADDR_LOW_2_REG, low_val);
-		dsaf_write_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG, high_val);
+		dsaf_write_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG,
+			       high_val | (sta_addr_en << GMAC_ADDR_EN_B));
 	}
 }
 
@@ -699,6 +726,7 @@ void *hns_gmac_config(struct hns_mac_cb *mac_cb, struct mac_params *mac_param)
 	mac_drv->get_sset_count = hns_gmac_get_sset_count;
 	mac_drv->get_strings = hns_gmac_get_strings;
 	mac_drv->update_stats = hns_gmac_update_stats;
+	mac_drv->set_promiscuous = hns_gmac_set_promisc;
 
 	return (void *)mac_drv;
 }
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
index 5ef0e96..5f35418 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
@@ -861,6 +861,17 @@ int hns_mac_get_sset_count(struct hns_mac_cb *mac_cb, int stringset)
 	return mac_ctrl_drv->get_sset_count(stringset);
 }
 
+int hns_mac_set_promisc(struct hns_mac_cb *mac_cb, u8 en)
+{
+	struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
+	int ret = 0;
+
+	if (mac_ctrl_drv->set_promiscuous)
+		ret = mac_ctrl_drv->set_promiscuous(mac_ctrl_drv, en);
+
+	return ret;
+}
+
 int hns_mac_get_regs_count(struct hns_mac_cb *mac_cb)
 {
 	struct mac_driver *mac_ctrl_drv = hns_mac_get_drv(mac_cb);
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
index 0b05219..68b01fe 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
@@ -453,4 +453,6 @@ int hns_mac_get_regs_count(struct hns_mac_cb *mac_cb);
 void hns_set_led_opt(struct hns_mac_cb *mac_cb);
 int hns_cpld_led_set_id(struct hns_mac_cb *mac_cb,
 			enum hnae_led_state status);
+int hns_mac_set_promisc(struct hns_mac_cb *mac_cb, u8 en);
+
 #endif /* _HNS_DSAF_MAC_H */
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
index 60d695d..bf62687 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_reg.h
@@ -922,6 +922,8 @@
 #define GMAC_LP_REG_CF2MI_LP_EN_B	2
 
 #define GMAC_MODE_CHANGE_EB_B	0
+#define GMAC_UC_MATCH_EN_B	0
+#define GMAC_ADDR_EN_B		16
 
 #define GMAC_RECV_CTRL_STRIP_PAD_EN_B	3
 #define GMAC_RECV_CTRL_RUNT_PKT_EN_B	4
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 04/10] net: hns: fixed the bug about GMACs mac setting
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
                   ` (2 preceding siblings ...)
  2016-03-21 11:06 ` [PATCH net 03/10] net: hns: add uc match for debug ports Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 05/10] net: hns: set xge statistic reg as read only Yisen Zhuang
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Sheng Li <lisheng011@huawei.com>

When sending a pause frame out from GMACs, the packets' source MAC address
does not match the GMACs' MAC address. It causes by the condition before
the mac address setting routine for GMACs, the mac address cannot be set
into loacal mac table for service ports. It obviously the condition needs
to be deleted.

Signed-off-by: Sheng Li <lisheng011@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
index 5881405..a99ee00 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
@@ -424,19 +424,17 @@ static void hns_gmac_set_mac_addr(void *mac_drv, char *mac_addr)
 {
 	struct mac_driver *drv = (struct mac_driver *)mac_drv;
 
-	if (drv->mac_id >= DSAF_SERVICE_NW_NUM) {
-		u32 high_val = mac_addr[1] | (mac_addr[0] << 8);
+	u32 high_val = mac_addr[1] | (mac_addr[0] << 8);
 
-		u32 low_val = mac_addr[5] | (mac_addr[4] << 8)
-			| (mac_addr[3] << 16) | (mac_addr[2] << 24);
+	u32 low_val = mac_addr[5] | (mac_addr[4] << 8)
+		| (mac_addr[3] << 16) | (mac_addr[2] << 24);
 
-		u32 val = dsaf_read_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG);
-		u32 sta_addr_en = dsaf_get_bit(val, GMAC_ADDR_EN_B);
+	u32 val = dsaf_read_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG);
+	u32 sta_addr_en = dsaf_get_bit(val, GMAC_ADDR_EN_B);
 
-		dsaf_write_dev(drv, GMAC_STATION_ADDR_LOW_2_REG, low_val);
-		dsaf_write_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG,
-			       high_val | (sta_addr_en << GMAC_ADDR_EN_B));
-	}
+	dsaf_write_dev(drv, GMAC_STATION_ADDR_LOW_2_REG, low_val);
+	dsaf_write_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG,
+		       high_val | (sta_addr_en << GMAC_ADDR_EN_B));
 }
 
 static int hns_gmac_config_loopback(void *mac_drv, enum hnae_loop loop_mode,
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 05/10] net: hns: set xge statistic reg as read only
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
                   ` (3 preceding siblings ...)
  2016-03-21 11:06 ` [PATCH net 04/10] net: hns: fixed the bug about GMACs mac setting Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 06/10] net: hns: fix return value of the function about rss Yisen Zhuang
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Qianqian Xie <xieqianqian@huawei.com>

As the user manual of HNS V2 describs, XGE_DFX_CTRL_CFG.xge_dfx_ctrl_cfg
should be configed as zero if we want xge statistic reg to be read only.
But HNS V1 gets the other meanings. It needs to be identified the process
and then config it rightly.

Signed-off-by: Qianqian Xie <xieqianqian@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
index 38fc5be..5c1ac9b 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_main.c
@@ -748,8 +748,9 @@ static void hns_dsaf_tbl_stat_en(struct dsaf_device *dsaf_dev)
  */
 static void hns_dsaf_rocee_bp_en(struct dsaf_device *dsaf_dev)
 {
-	dsaf_set_dev_bit(dsaf_dev, DSAF_XGE_CTRL_SIG_CFG_0_REG,
-			 DSAF_FC_XGE_TX_PAUSE_S, 1);
+	if (AE_IS_VER1(dsaf_dev->dsaf_ver))
+		dsaf_set_dev_bit(dsaf_dev, DSAF_XGE_CTRL_SIG_CFG_0_REG,
+				 DSAF_FC_XGE_TX_PAUSE_S, 1);
 }
 
 /* set msk for dsaf exception irq*/
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 06/10] net: hns: fix return value of the function about rss
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
                   ` (4 preceding siblings ...)
  2016-03-21 11:06 ` [PATCH net 05/10] net: hns: set xge statistic reg as read only Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 15:42   ` David Miller
  2016-03-21 11:06 ` [PATCH net 07/10] net: hns: fixes a bug of RSS Yisen Zhuang
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Kejian Yan <yankejian@huawei.com>

Both .get_rxfh and .get_rxfh are always return 0, it should return result
from hardware when getting or setting rss. And the rss function should
return the correct data type.

Signed-off-by: Kejian Yan <yankejian@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c |  2 +-
 drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c |  2 +-
 drivers/net/ethernet/hisilicon/hns/hns_ethtool.c  | 28 +++++++----------------
 3 files changed, 10 insertions(+), 22 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
index 5e0cedf..1d0da87 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
@@ -803,7 +803,7 @@ static int hns_ae_set_rss(struct hnae_handle *handle, const u32 *indir,
 
 	/* set the RSS Hash Key if specififed by the user */
 	if (key)
-		hns_ppe_set_rss_key(ppe_cb, (int *)key);
+		hns_ppe_set_rss_key(ppe_cb, (u32 *)key);
 
 	/* update the shadow RSS table with user specified qids */
 	memcpy(ppe_cb->rss_indir_table, indir, HNS_PPEV2_RSS_IND_TBL_SIZE);
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c
index f302ef9..811ef35 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_ppe.c
@@ -27,7 +27,7 @@ void hns_ppe_set_tso_enable(struct hns_ppe_cb *ppe_cb, u32 value)
 void hns_ppe_set_rss_key(struct hns_ppe_cb *ppe_cb,
 			 const u32 rss_key[HNS_PPEV2_RSS_KEY_NUM])
 {
-	int key_item = 0;
+	u32 key_item = 0;
 
 	for (key_item = 0; key_item < HNS_PPEV2_RSS_KEY_NUM; key_item++)
 		dsaf_write_dev(ppe_cb, PPEV2_RSS_KEY_REG + key_item * 0x4,
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
index 3c4a3bc..f3a5e05 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
@@ -1173,18 +1173,15 @@ hns_get_rss_key_size(struct net_device *netdev)
 {
 	struct hns_nic_priv *priv = netdev_priv(netdev);
 	struct hnae_ae_ops *ops;
-	u32 ret;
 
 	if (AE_IS_VER1(priv->enet_ver)) {
 		netdev_err(netdev,
 			   "RSS feature is not supported on this hardware\n");
-		return -EOPNOTSUPP;
+		return (u32)-EOPNOTSUPP;
 	}
 
 	ops = priv->ae_handle->dev->ops;
-	ret = ops->get_rss_key_size(priv->ae_handle);
-
-	return ret;
+	return ops->get_rss_key_size(priv->ae_handle);
 }
 
 static u32
@@ -1192,18 +1189,15 @@ hns_get_rss_indir_size(struct net_device *netdev)
 {
 	struct hns_nic_priv *priv = netdev_priv(netdev);
 	struct hnae_ae_ops *ops;
-	u32 ret;
 
 	if (AE_IS_VER1(priv->enet_ver)) {
 		netdev_err(netdev,
 			   "RSS feature is not supported on this hardware\n");
-		return -EOPNOTSUPP;
+		return (u32)-EOPNOTSUPP;
 	}
 
 	ops = priv->ae_handle->dev->ops;
-	ret = ops->get_rss_indir_size(priv->ae_handle);
-
-	return ret;
+	return ops->get_rss_indir_size(priv->ae_handle);
 }
 
 static int
@@ -1211,12 +1205,11 @@ hns_get_rss(struct net_device *netdev, u32 *indir, u8 *key, u8 *hfunc)
 {
 	struct hns_nic_priv *priv = netdev_priv(netdev);
 	struct hnae_ae_ops *ops;
-	int ret;
 
 	if (AE_IS_VER1(priv->enet_ver)) {
 		netdev_err(netdev,
 			   "RSS feature is not supported on this hardware\n");
-		return -EOPNOTSUPP;
+		return (u32)-EOPNOTSUPP;
 	}
 
 	ops = priv->ae_handle->dev->ops;
@@ -1224,9 +1217,7 @@ hns_get_rss(struct net_device *netdev, u32 *indir, u8 *key, u8 *hfunc)
 	if (!indir)
 		return 0;
 
-	ret = ops->get_rss(priv->ae_handle, indir, key, hfunc);
-
-	return 0;
+	return ops->get_rss(priv->ae_handle, indir, key, hfunc);
 }
 
 static int
@@ -1235,12 +1226,11 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
 {
 	struct hns_nic_priv *priv = netdev_priv(netdev);
 	struct hnae_ae_ops *ops;
-	int ret;
 
 	if (AE_IS_VER1(priv->enet_ver)) {
 		netdev_err(netdev,
 			   "RSS feature is not supported on this hardware\n");
-		return -EOPNOTSUPP;
+		return (u32)-EOPNOTSUPP;
 	}
 
 	ops = priv->ae_handle->dev->ops;
@@ -1252,9 +1242,7 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
 	if (!indir)
 		return 0;
 
-	ret = ops->set_rss(priv->ae_handle, indir, key, hfunc);
-
-	return 0;
+	return ops->set_rss(priv->ae_handle, indir, key, hfunc);
 }
 
 static struct ethtool_ops hns_ethtool_ops = {
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 07/10] net: hns: fixes a bug of RSS
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
                   ` (5 preceding siblings ...)
  2016-03-21 11:06 ` [PATCH net 06/10] net: hns: fix return value of the function about rss Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 08/10] net: hns: fix the bug about mtu setting Yisen Zhuang
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Kejian Yan <yankejian@huawei.com>

If trying to get receive flow hash indirection table by ethtool, it needs
to call .get_rxnfc to get ring number first. So this patch implements the
.get_rxnfc of ethtool. And the data type of rss_indir_table is u32, it has
to be multiply by the width of data type when using memcpy.

Signed-off-by: Kejian Yan <yankejian@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c |  6 ++++--
 drivers/net/ethernet/hisilicon/hns/hns_ethtool.c  | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
index 1d0da87..d2cca60 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
@@ -791,7 +791,8 @@ static int hns_ae_get_rss(struct hnae_handle *handle, u32 *indir, u8 *key,
 		memcpy(key, ppe_cb->rss_key, HNS_PPEV2_RSS_KEY_SIZE);
 
 	/* update the current hash->queue mappings from the shadow RSS table */
-	memcpy(indir, ppe_cb->rss_indir_table, HNS_PPEV2_RSS_IND_TBL_SIZE);
+	memcpy(indir, ppe_cb->rss_indir_table,
+	       HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir));
 
 	return 0;
 }
@@ -806,7 +807,8 @@ static int hns_ae_set_rss(struct hnae_handle *handle, const u32 *indir,
 		hns_ppe_set_rss_key(ppe_cb, (u32 *)key);
 
 	/* update the shadow RSS table with user specified qids */
-	memcpy(ppe_cb->rss_indir_table, indir, HNS_PPEV2_RSS_IND_TBL_SIZE);
+	memcpy(ppe_cb->rss_indir_table, indir,
+	       HNS_PPEV2_RSS_IND_TBL_SIZE * sizeof(*indir));
 
 	/* now update the hardware */
 	hns_ppe_set_indir_table(ppe_cb, ppe_cb->rss_indir_table);
diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
index f3a5e05..02e9fa2 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
@@ -1245,6 +1245,23 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
 	return ops->set_rss(priv->ae_handle, indir, key, hfunc);
 }
 
+static int hns_get_rxnfc(struct net_device *netdev,
+			 struct ethtool_rxnfc *cmd,
+			 u32 *rule_locs)
+{
+	struct hns_nic_priv *priv = netdev_priv(netdev);
+
+	switch (cmd->cmd) {
+	case ETHTOOL_GRXRINGS:
+		cmd->data = priv->ae_handle->q_num;
+		break;
+	default:
+		return -EOPNOTSUPP;
+	}
+
+	return 0;
+}
+
 static struct ethtool_ops hns_ethtool_ops = {
 	.get_drvinfo = hns_nic_get_drvinfo,
 	.get_link  = hns_nic_get_link,
@@ -1268,6 +1285,7 @@ static struct ethtool_ops hns_ethtool_ops = {
 	.get_rxfh_indir_size = hns_get_rss_indir_size,
 	.get_rxfh = hns_get_rss,
 	.set_rxfh = hns_set_rss,
+	.get_rxnfc = hns_get_rxnfc,
 };
 
 void hns_ethtool_set_ops(struct net_device *ndev)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 08/10] net: hns: fix the bug about mtu setting
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
                   ` (6 preceding siblings ...)
  2016-03-21 11:06 ` [PATCH net 07/10] net: hns: fixes a bug of RSS Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 09/10] net: hns: adds limitation for debug port mtu Yisen Zhuang
  2016-03-21 11:06 ` [PATCH net 10/10] net: hns: bug fix about the overflow of mss Yisen Zhuang
  9 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Kejian Yan <yankejian@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 <yankejian@huawei.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@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

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 09/10] net: hns: adds limitation for debug port mtu
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
                   ` (7 preceding siblings ...)
  2016-03-21 11:06 ` [PATCH net 08/10] net: hns: fix the bug about mtu setting Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  2016-03-21 14:17   ` Sergei Shtylyov
  2016-03-21 11:06 ` [PATCH net 10/10] net: hns: bug fix about the overflow of mss Yisen Zhuang
  9 siblings, 1 reply; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Kejian Yan <yankejian@huawei.com>

If mtu for debug port is set more than 1500, it may cause that packets
are dropped by ppe. So maximum value for debug port should be 1500.

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

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
index 3f96e3d..cfb8fc5 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c
@@ -470,6 +470,9 @@ int hns_mac_set_mtu(struct hns_mac_cb *mac_cb, u32 new_mtu)
 	u32 max_frm = AE_IS_VER1(mac_cb->dsaf_dev->dsaf_ver) ?
 			MAC_MAX_MTU : MAC_MAX_MTU_V2;
 
+	if (mac_cb->mac_type == HNAE_PORT_DEBUG)
+		max_frm = MAC_MAX_MTU_DBG;
+
 	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 a69c8af..a68efd6 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
@@ -28,6 +28,7 @@ struct dsaf_device;
 #define MAC_MAX_MTU		9600
 #define MAC_MAX_MTU_V2		9728
 #define MAC_MIN_MTU		68
+#define MAC_MAX_MTU_DBG         MAC_DEFAULT_MTU
 
 #define MAC_DEFAULT_PAUSE_TIME 0xff
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [PATCH net 10/10] net: hns: bug fix about the overflow of mss
  2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
                   ` (8 preceding siblings ...)
  2016-03-21 11:06 ` [PATCH net 09/10] net: hns: adds limitation for debug port mtu Yisen Zhuang
@ 2016-03-21 11:06 ` Yisen Zhuang
  9 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-21 11:06 UTC (permalink / raw)
  To: davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Daode Huang <huangdaode@hisilicon.com>

When set MTU to the minimum value 68, there are increasing number
of error packets occur, which is caused by the overflowed value of
mss. This patch fix the bug.

Signed-off-by: Daode Huang <huangdaode@hisilicon.com>
Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
---
 drivers/net/ethernet/hisilicon/hns/hns_enet.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
index 8aa325e..a192691 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c
@@ -48,7 +48,6 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
 	struct iphdr *iphdr;
 	struct ipv6hdr *ipv6hdr;
 	struct sk_buff *skb;
-	int skb_tmp_len;
 	__be16 protocol;
 	u8 bn_pid = 0;
 	u8 rrcfv = 0;
@@ -94,13 +93,13 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
 				hnae_set_bit(rrcfv, HNSV2_TXD_L4CS_B, 1);
 
 				/* check for tcp/udp header */
-				if (iphdr->protocol == IPPROTO_TCP) {
+				if (iphdr->protocol == IPPROTO_TCP &&
+				    skb_is_gso(skb)) {
 					hnae_set_bit(tvsvsn,
 						     HNSV2_TXD_TSE_B, 1);
-					skb_tmp_len = SKB_TMP_LEN(skb);
 					l4_len = tcp_hdrlen(skb);
-					mss = mtu - skb_tmp_len - ETH_FCS_LEN;
-					paylen = skb->len - skb_tmp_len;
+					mss = skb_shinfo(skb)->gso_size;
+					paylen = skb->len - SKB_TMP_LEN(skb);
 				}
 			} else if (skb->protocol == htons(ETH_P_IPV6)) {
 				hnae_set_bit(tvsvsn, HNSV2_TXD_IPV6_B, 1);
@@ -108,13 +107,13 @@ static void fill_v2_desc(struct hnae_ring *ring, void *priv,
 				hnae_set_bit(rrcfv, HNSV2_TXD_L4CS_B, 1);
 
 				/* check for tcp/udp header */
-				if (ipv6hdr->nexthdr == IPPROTO_TCP) {
+				if (ipv6hdr->nexthdr == IPPROTO_TCP &&
+				    skb_is_gso(skb) && skb_is_gso_v6(skb)) {
 					hnae_set_bit(tvsvsn,
 						     HNSV2_TXD_TSE_B, 1);
-					skb_tmp_len = SKB_TMP_LEN(skb);
 					l4_len = tcp_hdrlen(skb);
-					mss = mtu - skb_tmp_len - ETH_FCS_LEN;
-					paylen = skb->len - skb_tmp_len;
+					mss = skb_shinfo(skb)->gso_size;
+					paylen = skb->len - SKB_TMP_LEN(skb);
 				}
 			}
 			desc->tx.ip_offset = ip_offset;
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* Re: [PATCH net 09/10] net: hns: adds limitation for debug port mtu
  2016-03-21 11:06 ` [PATCH net 09/10] net: hns: adds limitation for debug port mtu Yisen Zhuang
@ 2016-03-21 14:17   ` Sergei Shtylyov
  2016-03-22  1:19     ` Yisen Zhuang
  0 siblings, 1 reply; 19+ messages in thread
From: Sergei Shtylyov @ 2016-03-21 14:17 UTC (permalink / raw)
  To: Yisen Zhuang, davem
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

Hello.

On 03/21/2016 02:06 PM, Yisen Zhuang wrote:

> From: Kejian Yan <yankejian@huawei.com>
>
> If mtu for debug port is set more than 1500, it may cause that packets
> are dropped by ppe. So maximum value for debug port should be 1500.
>
> Signed-off-by: Kejian Yan <yankejian@huawei.com>
> Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
[...]
> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
> index a69c8af..a68efd6 100644
> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
> @@ -28,6 +28,7 @@ struct dsaf_device;
>   #define MAC_MAX_MTU		9600
>   #define MAC_MAX_MTU_V2		9728
>   #define MAC_MIN_MTU		68
> +#define MAC_MAX_MTU_DBG         MAC_DEFAULT_MTU

    Please use tabs, not spaces to indent the value, like above

[...]

MBR, Sergei

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH net 01/10] net: hns: bug fix about ping6
  2016-03-21 11:06 ` [PATCH net 01/10] net: hns: bug fix about ping6 Yisen Zhuang
@ 2016-03-21 15:39   ` David Miller
  2016-03-22  0:46     ` Yisen Zhuang
  0 siblings, 1 reply; 19+ messages in thread
From: David Miller @ 2016-03-21 15:39 UTC (permalink / raw)
  To: Yisen.Zhuang
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Yisen Zhuang <Yisen.Zhuang@huawei.com>
Date: Mon, 21 Mar 2016 19:06:32 +0800

> From: Kejian Yan <yankejian@huawei.com>
> 
> The current upstreaming code fails to ping other IPv6 net device, because
> the enet receives the multicast packets with the src mac addr whick is the
                                                                ^^^^^

"which"

> @@ -670,6 +671,14 @@ out_bnum_err:
>  		return -EFAULT;
>  	}
>  
> +	/* filter out multicast pkt with the same src mac as this port */
> +	eh = (struct ethhdr *)skb->data;

Please use the "eth_hdr()" helper.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH net 03/10] net: hns: add uc match for debug ports
  2016-03-21 11:06 ` [PATCH net 03/10] net: hns: add uc match for debug ports Yisen Zhuang
@ 2016-03-21 15:40   ` David Miller
  2016-03-22  1:03     ` Yisen Zhuang
  0 siblings, 1 reply; 19+ messages in thread
From: David Miller @ 2016-03-21 15:40 UTC (permalink / raw)
  To: Yisen.Zhuang
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Yisen Zhuang <Yisen.Zhuang@huawei.com>
Date: Mon, 21 Mar 2016 19:06:34 +0800

> +	(void)hns_mac_set_promisc(mac_cb, (u8)!!en);

This cast to void is unnecssary.

> +static void hns_gmac_set_uc_match(void *mac_drv, u16 en)
> +{
> +	struct mac_driver *drv = (struct mac_driver *)mac_drv;

Casts from void pointers are unnecessary.

> +{
> +	struct mac_driver *drv = (struct mac_driver *)mac_drv;

Likewise.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH net 06/10] net: hns: fix return value of the function about rss
  2016-03-21 11:06 ` [PATCH net 06/10] net: hns: fix return value of the function about rss Yisen Zhuang
@ 2016-03-21 15:42   ` David Miller
  2016-03-22  1:16     ` Yisen Zhuang
  0 siblings, 1 reply; 19+ messages in thread
From: David Miller @ 2016-03-21 15:42 UTC (permalink / raw)
  To: Yisen.Zhuang
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm

From: Yisen Zhuang <Yisen.Zhuang@huawei.com>
Date: Mon, 21 Mar 2016 19:06:37 +0800

> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
> index 3c4a3bc..f3a5e05 100644
> --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
> +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
 ...
> @@ -1235,12 +1226,11 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
>  {
>  	struct hns_nic_priv *priv = netdev_priv(netdev);
>  	struct hnae_ae_ops *ops;
> -	int ret;
>  
>  	if (AE_IS_VER1(priv->enet_ver)) {
>  		netdev_err(netdev,
>  			   "RSS feature is not supported on this hardware\n");
> -		return -EOPNOTSUPP;
> +		return (u32)-EOPNOTSUPP;
>  	}
>  

This is incredibly broken, you cannot cast this negative error return value to
an unsigned integer.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH net 01/10] net: hns: bug fix about ping6
  2016-03-21 15:39   ` David Miller
@ 2016-03-22  0:46     ` Yisen Zhuang
  0 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-22  0:46 UTC (permalink / raw)
  To: David Miller
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm



在 2016/3/21 23:39, David Miller 写道:
> From: Yisen Zhuang <Yisen.Zhuang@huawei.com>
> Date: Mon, 21 Mar 2016 19:06:32 +0800
> 
>> From: Kejian Yan <yankejian@huawei.com>
>>
>> The current upstreaming code fails to ping other IPv6 net device, because
>> the enet receives the multicast packets with the src mac addr whick is the
>                                                                 ^^^^^
> 
> "which"

Will fix it in next submit.

Thanks

> 
>> @@ -670,6 +671,14 @@ out_bnum_err:
>>  		return -EFAULT;
>>  	}
>>  
>> +	/* filter out multicast pkt with the same src mac as this port */
>> +	eh = (struct ethhdr *)skb->data;
> 
> Please use the "eth_hdr()" helper.

Will fix it in next submit.

Thanks,

Yisen

> 
> .
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH net 03/10] net: hns: add uc match for debug ports
  2016-03-21 15:40   ` David Miller
@ 2016-03-22  1:03     ` Yisen Zhuang
  0 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-22  1:03 UTC (permalink / raw)
  To: David Miller
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm



在 2016/3/21 23:40, David Miller 写道:
> From: Yisen Zhuang <Yisen.Zhuang@huawei.com>
> Date: Mon, 21 Mar 2016 19:06:34 +0800
> 
>> +	(void)hns_mac_set_promisc(mac_cb, (u8)!!en);
> 
> This cast to void is unnecssary.

I think hns_mac_set_promisc don't need to return a value, so i will fix it in next submit.

Thanks

> 
>> +static void hns_gmac_set_uc_match(void *mac_drv, u16 en)
>> +{
>> +	struct mac_driver *drv = (struct mac_driver *)mac_drv;
> 
> Casts from void pointers are unnecessary.

Will fix it in next submit.

Thanks

> 
>> +{
>> +	struct mac_driver *drv = (struct mac_driver *)mac_drv;
> 
> Likewise.

Will fix it in next submit.

Thanks,

Yisen

> 
> .
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH net 06/10] net: hns: fix return value of the function about rss
  2016-03-21 15:42   ` David Miller
@ 2016-03-22  1:16     ` Yisen Zhuang
  0 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-22  1:16 UTC (permalink / raw)
  To: David Miller
  Cc: yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm



在 2016/3/21 23:42, David Miller 写道:
> From: Yisen Zhuang <Yisen.Zhuang@huawei.com>
> Date: Mon, 21 Mar 2016 19:06:37 +0800
> 
>> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
>> index 3c4a3bc..f3a5e05 100644
>> --- a/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
>> +++ b/drivers/net/ethernet/hisilicon/hns/hns_ethtool.c
>  ...
>> @@ -1235,12 +1226,11 @@ hns_set_rss(struct net_device *netdev, const u32 *indir, const u8 *key,
>>  {
>>  	struct hns_nic_priv *priv = netdev_priv(netdev);
>>  	struct hnae_ae_ops *ops;
>> -	int ret;
>>  
>>  	if (AE_IS_VER1(priv->enet_ver)) {
>>  		netdev_err(netdev,
>>  			   "RSS feature is not supported on this hardware\n");
>> -		return -EOPNOTSUPP;
>> +		return (u32)-EOPNOTSUPP;
>>  	}
>>  
> 
> This is incredibly broken, you cannot cast this negative error return value to
> an unsigned integer.
> 
Hi David,

This is my misunderstanding of the return value. Will fix it in next version.

Many thanks,

Yisen

> .
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [PATCH net 09/10] net: hns: adds limitation for debug port mtu
  2016-03-21 14:17   ` Sergei Shtylyov
@ 2016-03-22  1:19     ` Yisen Zhuang
  0 siblings, 0 replies; 19+ messages in thread
From: Yisen Zhuang @ 2016-03-22  1:19 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: davem, yankejian, huangdaode, salil.mehta, lisheng011, lipeng321,
	liguozhu, arnd, xieqianqian, andrew, ivecera, netdev,
	linux-kernel, linuxarm



在 2016/3/21 22:17, Sergei Shtylyov 写道:
> Hello.
> 
> On 03/21/2016 02:06 PM, Yisen Zhuang wrote:
> 
>> From: Kejian Yan <yankejian@huawei.com>
>>
>> If mtu for debug port is set more than 1500, it may cause that packets
>> are dropped by ppe. So maximum value for debug port should be 1500.
>>
>> Signed-off-by: Kejian Yan <yankejian@huawei.com>
>> Signed-off-by: Yisen Zhuang <Yisen.Zhuang@huawei.com>
> [...]
>> diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
>> index a69c8af..a68efd6 100644
>> --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
>> +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.h
>> @@ -28,6 +28,7 @@ struct dsaf_device;
>>   #define MAC_MAX_MTU        9600
>>   #define MAC_MAX_MTU_V2        9728
>>   #define MAC_MIN_MTU        68
>> +#define MAC_MAX_MTU_DBG         MAC_DEFAULT_MTU
> 
>    Please use tabs, not spaces to indent the value, like above

Will fix it in next version.

Thanks,

Yisen

> 
> [...]
> 
> MBR, Sergei
> 
> 
> .
> 

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2016-03-22  1:20 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-21 11:06 [PATCH net 00/10] net: hns: bugs fixed for hns Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 01/10] net: hns: bug fix about ping6 Yisen Zhuang
2016-03-21 15:39   ` David Miller
2016-03-22  0:46     ` Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 02/10] net: hns: fixed portid bug in sending manage pkt Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 03/10] net: hns: add uc match for debug ports Yisen Zhuang
2016-03-21 15:40   ` David Miller
2016-03-22  1:03     ` Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 04/10] net: hns: fixed the bug about GMACs mac setting Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 05/10] net: hns: set xge statistic reg as read only Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 06/10] net: hns: fix return value of the function about rss Yisen Zhuang
2016-03-21 15:42   ` David Miller
2016-03-22  1:16     ` Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 07/10] net: hns: fixes a bug of RSS Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 08/10] net: hns: fix the bug about mtu setting Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 09/10] net: hns: adds limitation for debug port mtu Yisen Zhuang
2016-03-21 14:17   ` Sergei Shtylyov
2016-03-22  1:19     ` Yisen Zhuang
2016-03-21 11:06 ` [PATCH net 10/10] net: hns: bug fix about the overflow of mss Yisen Zhuang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.