From 3f79aaa2979793c054eae2c8b4058c8c7fccdbe7 Mon Sep 17 00:00:00 2001 From: David Bauer Date: Sun, 24 Nov 2019 20:53:39 +0100 Subject: [PATCH 1/2] generic ar8xxx: increase VLAN table for AR83x7 The Atheros AR8327 and AR8337 have (according to their datasheet) a VLAN table with a maximum of 4096 entries. Currently, there's a hard limit of 128 VLANs, which is the same as for most other Atheros switches. Increase this limit only for the AR83x7 series and modify some shared functions to allow them to work with a variable max VLAN count. Signed-off-by: David Bauer --- 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 683241cf1c..5ace4e0b15 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -1204,7 +1204,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; @@ -1237,7 +1237,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]; @@ -1277,7 +1277,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); @@ -1356,7 +1356,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) @@ -1409,7 +1409,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 93170d5863..bf34fdb775 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.h +++ b/target/linux/generic/files/drivers/net/phy/ar8216.h @@ -31,6 +31,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 @@ -504,8 +507,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 1878585b0c..4cbfa4d234 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8327.c +++ b/target/linux/generic/files/drivers/net/phy/ar8327.c @@ -1481,7 +1481,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, @@ -1518,7 +1518,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, From 291d79935e9c4a974b037b6bed733ce92d4242e3 Mon Sep 17 00:00:00 2001 From: Stijn Tintel Date: Sat, 30 Nov 2019 20:17:42 +0200 Subject: [PATCH 2/2] octeon: fix sysupgrade Sysupgrade was failing due to incorrect replacement of backticks: /sbin/sysupgrade: /lib/upgrade/platform.sh: line 101: syntax error: missing '))' Fixes: 0bbfc3dff719 ("octeon: replace backticks by $(...)") Signed-off-by: Stijn Tintel --- target/linux/octeon/base-files/lib/upgrade/platform.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/linux/octeon/base-files/lib/upgrade/platform.sh b/target/linux/octeon/base-files/lib/upgrade/platform.sh index 149c2fd955..2de0f7a47e 100755 --- a/target/linux/octeon/base-files/lib/upgrade/platform.sh +++ b/target/linux/octeon/base-files/lib/upgrade/platform.sh @@ -85,8 +85,8 @@ platform_check_image() { er | \ erlite) local tar_file="$1" - local kernel_length=$((tar xf $tar_file sysupgrade-$board/kernel -O | wc -c) 2> /dev/null) - local rootfs_length=$((tar xf $tar_file sysupgrade-$board/root -O | wc -c) 2> /dev/null) + local kernel_length=$(tar xf $tar_file sysupgrade-$board/kernel -O | wc -c 2> /dev/null) + local rootfs_length=$(tar xf $tar_file sysupgrade-$board/root -O | wc -c 2> /dev/null) [ "$kernel_length" = 0 -o "$rootfs_length" = 0 ] && { echo "The upgrade image is corrupt." return 1