فهرست منبع

ar8216: use vlan configuration for connecting ports (forced to be untagged) even with vlan_enable=0, but keep them isolated before the switch has been configured this makes enable_vlan=0 practical for vlan passthrough

SVN-Revision: 29719
Felix Fietkau 14 سال پیش
والد
کامیت
e87bb77966
1فایلهای تغییر یافته به همراه7 افزوده شده و 1 حذف شده
  1. 7 1
      target/linux/generic/files/drivers/net/phy/ar8216.c

+ 7 - 1
target/linux/generic/files/drivers/net/phy/ar8216.c

@@ -48,6 +48,8 @@ struct ar8216_priv {
 	bool port4_phy;
 	bool port4_phy;
 	char buf[80];
 	char buf[80];
 
 
+	bool init;
+
 	/* all fields below are cleared on reset */
 	/* all fields below are cleared on reset */
 	bool vlan;
 	bool vlan;
 	u16 vlan_id[AR8X16_MAX_VLANS];
 	u16 vlan_id[AR8X16_MAX_VLANS];
@@ -550,7 +552,7 @@ ar8216_hw_apply(struct switch_dev *dev)
 	ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
 	ar8216_vtu_op(priv, AR8216_VTU_OP_FLUSH, 0);
 
 
 	memset(portmask, 0, sizeof(portmask));
 	memset(portmask, 0, sizeof(portmask));
-	if (priv->vlan) {
+	if (!priv->init) {
 		/* calculate the port destination masks and load vlans
 		/* calculate the port destination masks and load vlans
 		 * into the vlan translation unit */
 		 * into the vlan translation unit */
 		for (j = 0; j < AR8X16_MAX_VLANS; j++) {
 		for (j = 0; j < AR8X16_MAX_VLANS; j++) {
@@ -877,6 +879,8 @@ ar8216_config_init(struct phy_device *pdev)
 		goto done;
 		goto done;
 	}
 	}
 
 
+	priv->init = true;
+
 	if (priv->chip == AR8316) {
 	if (priv->chip == AR8316) {
 		ret = ar8316_hw_init(priv);
 		ret = ar8316_hw_init(priv);
 		if (ret) {
 		if (ret) {
@@ -912,6 +916,8 @@ ar8216_config_init(struct phy_device *pdev)
 		dev->netdev_ops = &priv->ndo;
 		dev->netdev_ops = &priv->ndo;
 	}
 	}
 
 
+	priv->init = false;
+
 done:
 done:
 	return ret;
 	return ret;
 }
 }