aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSheng Li <lisheng011@huawei.com>2016-03-22 04:06:25 -0400
committerDavid S. Miller <davem@davemloft.net>2016-03-22 15:45:58 -0400
commita52047770f2720c9a3d49e2c95a269ef29463415 (patch)
tree486a4e6eea1b2577deb691a1e0f6bada5e44909e
parentd5679849d134704bd9f9e95d2370eb60abf37ed5 (diff)
net: hns: fixed the bug about GMACs mac setting
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> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c18
1 files 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 b8cf0e480655..6e2b76ede075 100644
--- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
+++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c
@@ -422,19 +422,17 @@ static void hns_gmac_set_mac_addr(void *mac_drv, char *mac_addr)
422{ 422{
423 struct mac_driver *drv = (struct mac_driver *)mac_drv; 423 struct mac_driver *drv = (struct mac_driver *)mac_drv;
424 424
425 if (drv->mac_id >= DSAF_SERVICE_NW_NUM) { 425 u32 high_val = mac_addr[1] | (mac_addr[0] << 8);
426 u32 high_val = mac_addr[1] | (mac_addr[0] << 8);
427 426
428 u32 low_val = mac_addr[5] | (mac_addr[4] << 8) 427 u32 low_val = mac_addr[5] | (mac_addr[4] << 8)
429 | (mac_addr[3] << 16) | (mac_addr[2] << 24); 428 | (mac_addr[3] << 16) | (mac_addr[2] << 24);
430 429
431 u32 val = dsaf_read_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG); 430 u32 val = dsaf_read_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG);
432 u32 sta_addr_en = dsaf_get_bit(val, GMAC_ADDR_EN_B); 431 u32 sta_addr_en = dsaf_get_bit(val, GMAC_ADDR_EN_B);
433 432
434 dsaf_write_dev(drv, GMAC_STATION_ADDR_LOW_2_REG, low_val); 433 dsaf_write_dev(drv, GMAC_STATION_ADDR_LOW_2_REG, low_val);
435 dsaf_write_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG, 434 dsaf_write_dev(drv, GMAC_STATION_ADDR_HIGH_2_REG,
436 high_val | (sta_addr_en << GMAC_ADDR_EN_B)); 435 high_val | (sta_addr_en << GMAC_ADDR_EN_B));
437 }
438} 436}
439 437
440static int hns_gmac_config_loopback(void *mac_drv, enum hnae_loop loop_mode, 438static int hns_gmac_config_loopback(void *mac_drv, enum hnae_loop loop_mode,