Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea870bf9 authored by Kejian Yan's avatar Kejian Yan Committed by Doug Ledford
Browse files

net: hns: fix port not available after testing loopback



After running command "ethtool -t eth0", eth0 can not be connected to
network. It is caused by the changing the inner loopback register and
this register cannot be changed when hns connected to network. The
routine of setting this register needs to be removed and using promisc
mode to let the packet looped back pass by dsaf mode.

Reported-by: default avatarJun He <hjat2005@huawei.com>
Signed-off-by: default avatarKejian Yan <yankejian@huawei.com>
Reviewed-by: default avatarYisen Zhaung <yisen.zhuang@huawei.com>
Signed-off-by: default avatarSalil Mehta <salil.mehta@huawei.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 34447271
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -678,9 +678,6 @@ static int hns_ae_config_loopback(struct hnae_handle *handle,
		ret = -EINVAL;
	}

	if (!ret)
		hns_dsaf_set_inner_lb(mac_cb->dsaf_dev, mac_cb->mac_id, en);

	return ret;
}

+0 −10
Original line number Diff line number Diff line
@@ -768,16 +768,6 @@ void hns_dsaf_set_promisc_mode(struct dsaf_device *dsaf_dev, u32 en)
				 DSAF_CFG_MIX_MODE_S, !!en);
}

void hns_dsaf_set_inner_lb(struct dsaf_device *dsaf_dev, u32 mac_id, u32 en)
{
	if (AE_IS_VER1(dsaf_dev->dsaf_ver) ||
	    dsaf_dev->mac_cb[mac_id]->mac_type == HNAE_PORT_DEBUG)
		return;

	dsaf_set_dev_bit(dsaf_dev, DSAFV2_SERDES_LBK_0_REG + 4 * mac_id,
			 DSAFV2_SERDES_LBK_EN_B, !!en);
}

/**
 * hns_dsaf_tbl_stat_en - tbl
 * @dsaf_id: dsa fabric id
+0 −1
Original line number Diff line number Diff line
@@ -466,6 +466,5 @@ void hns_dsaf_get_rx_mac_pause_en(struct dsaf_device *dsaf_dev, int mac_id,
				  u32 *en);
int hns_dsaf_set_rx_mac_pause_en(struct dsaf_device *dsaf_dev, int mac_id,
				 u32 en);
void hns_dsaf_set_inner_lb(struct dsaf_device *dsaf_dev, u32 mac_id, u32 en);

#endif /* __HNS_DSAF_MAIN_H__ */
+7 −0
Original line number Diff line number Diff line
@@ -342,6 +342,13 @@ static int __lb_setup(struct net_device *ndev,
		break;
	}

	if (!ret) {
		if (loop == MAC_LOOP_NONE)
			h->dev->ops->set_promisc_mode(
				h, ndev->flags & IFF_PROMISC);
		else
			h->dev->ops->set_promisc_mode(h, 1);
	}
	return ret;
}