From e87bb77966fcc38b07761c3f627e40cd906faffa Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Thu, 12 Jan 2012 10:15:11 +0000
Subject: [PATCH] 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
---
 target/linux/generic/files/drivers/net/phy/ar8216.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c
index 57088a9748..3019aced87 100644
--- a/target/linux/generic/files/drivers/net/phy/ar8216.c
+++ b/target/linux/generic/files/drivers/net/phy/ar8216.c
@@ -48,6 +48,8 @@ struct ar8216_priv {
 	bool port4_phy;
 	char buf[80];
 
+	bool init;
+
 	/* all fields below are cleared on reset */
 	bool vlan;
 	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);
 
 	memset(portmask, 0, sizeof(portmask));
-	if (priv->vlan) {
+	if (!priv->init) {
 		/* calculate the port destination masks and load vlans
 		 * into the vlan translation unit */
 		for (j = 0; j < AR8X16_MAX_VLANS; j++) {
@@ -877,6 +879,8 @@ ar8216_config_init(struct phy_device *pdev)
 		goto done;
 	}
 
+	priv->init = true;
+
 	if (priv->chip == AR8316) {
 		ret = ar8316_hw_init(priv);
 		if (ret) {
@@ -912,6 +916,8 @@ ar8216_config_init(struct phy_device *pdev)
 		dev->netdev_ops = &priv->ndo;
 	}
 
+	priv->init = false;
+
 done:
 	return ret;
 }
-- 
GitLab