From 7a5b4777ba82a9df2aa162d8ca3fdd8d41e5021b Mon Sep 17 00:00:00 2001 From: LEAN-ESX Date: Thu, 5 Dec 2019 08:36:33 -0800 Subject: [PATCH] generic ar8xxx: increase VLAN table for AR83x7 --- target/linux/generic/files/drivers/net/phy/ar8216.c | 10 +++++----- target/linux/generic/files/drivers/net/phy/ar8216.h | 8 ++++++-- target/linux/generic/files/drivers/net/phy/ar8327.c | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 2f0be1b8d..16af922b4 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -985,7 +985,7 @@ ar8xxx_sw_set_vid(struct switch_dev *dev, const struct switch_attr *attr, { struct ar8xxx_priv *priv = swdev_to_ar8xxx(dev); - if (val->port_vlan >= AR8X16_MAX_VLANS) + if (val->port_vlan >= dev->vlans) return -EINVAL; priv->vlan_id[val->port_vlan] = val->value.i; @@ -1018,7 +1018,7 @@ ar8xxx_sw_get_ports(struct switch_dev *dev, struct switch_val *val) u8 ports; int i; - if (val->port_vlan >= AR8X16_MAX_VLANS) + if (val->port_vlan >= dev->vlans) return -EINVAL; ports = priv->vlan_table[val->port_vlan]; @@ -1058,7 +1058,7 @@ ar8xxx_sw_set_ports(struct switch_dev *dev, struct switch_val *val) /* make sure that an untagged port does not * appear in other vlans */ - for (j = 0; j < AR8X16_MAX_VLANS; j++) { + for (j = 0; j < dev->vlans; j++) { if (j == val->port_vlan) continue; priv->vlan_table[j] &= ~(1 << p->id); @@ -1137,7 +1137,7 @@ ar8xxx_sw_hw_apply(struct switch_dev *dev) if (!priv->init) { /* calculate the port destination masks and load vlans * into the vlan translation unit */ - for (j = 0; j < AR8X16_MAX_VLANS; j++) { + for (j = 0; j < dev->vlans; j++) { u8 vp = priv->vlan_table[j]; if (!vp) @@ -1190,7 +1190,7 @@ ar8xxx_sw_reset_switch(struct switch_dev *dev) memset(&priv->vlan, 0, sizeof(struct ar8xxx_priv) - offsetof(struct ar8xxx_priv, vlan)); - for (i = 0; i < AR8X16_MAX_VLANS; i++) + for (i = 0; i < dev->vlans; i++) priv->vlan_id[i] = i; /* Configure all ports */ diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.h b/target/linux/generic/files/drivers/net/phy/ar8216.h index 33f505cbe..0a3e96dbe 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.h +++ b/target/linux/generic/files/drivers/net/phy/ar8216.h @@ -30,6 +30,9 @@ /* size of the vlan table */ #define AR8X16_MAX_VLANS 128 +#define AR83X7_MAX_VLANS 4096 +#define AR8XXX_MAX_VLANS AR83X7_MAX_VLANS + #define AR8X16_PROBE_RETRIES 10 #define AR8X16_MAX_PORTS 8 @@ -453,8 +456,9 @@ struct ar8xxx_priv { /* all fields below are cleared on reset */ bool vlan; - u16 vlan_id[AR8X16_MAX_VLANS]; - u8 vlan_table[AR8X16_MAX_VLANS]; + + u16 vlan_id[AR8XXX_MAX_VLANS]; + u8 vlan_table[AR8XXX_MAX_VLANS]; u8 vlan_tagged; u16 pvid[AR8X16_MAX_PORTS]; int arl_age_time; diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c b/target/linux/generic/files/drivers/net/phy/ar8327.c index 170c3e43a..ad3f06597 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8327.c +++ b/target/linux/generic/files/drivers/net/phy/ar8327.c @@ -1476,7 +1476,7 @@ const struct ar8xxx_chip ar8327_chip = { .name = "Atheros AR8327", .ports = AR8327_NUM_PORTS, - .vlans = AR8X16_MAX_VLANS, + .vlans = AR83X7_MAX_VLANS, .swops = &ar8327_sw_ops, .reg_port_stats_start = 0x1000, @@ -1511,7 +1511,7 @@ const struct ar8xxx_chip ar8337_chip = { .name = "Atheros AR8337", .ports = AR8327_NUM_PORTS, - .vlans = AR8X16_MAX_VLANS, + .vlans = AR83X7_MAX_VLANS, .swops = &ar8327_sw_ops, .reg_port_stats_start = 0x1000,