net: hns: fixed portid bug in sending manage pkt
authorSheng Li <lisheng011@huawei.com>
Tue, 22 Mar 2016 08:06:23 +0000 (16:06 +0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 22 Mar 2016 19:45:57 +0000 (15:45 -0400)
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>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/hisilicon/hns/hnae.h
drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c
drivers/net/ethernet/hisilicon/hns/hns_enet.c

index 1cbcb9fa3fb56b5ea4fee252f3f35294e6e7b6d3..37d0cce392be84b9525c547bf583f5802d6c46ae 100644 (file)
@@ -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 */
index d4f92ed322d6e5c4ac10a3f8d208d94445760e27..90352d64d7da4cf439cb5ba3e5cda555297646fc 100644 (file)
@@ -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:
index ef84bd72e3ca3c028e4db2835c3efff3d985da1c..ef517af870c5ced65b3bd9b0a9a88289d955e88f 100644 (file)
@@ -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;