diff --git a/include/image.mk b/include/image.mk index 441f55b741..984b64fb9c 100644 --- a/include/image.mk +++ b/include/image.mk @@ -45,7 +45,7 @@ IMG_PREFIX:=$(VERSION_DIST_SANITIZED)-$(IMG_PREFIX_VERNUM)$(IMG_PREFIX_VERCODE)$ IMG_ROOTFS:=$(IMG_PREFIX)-rootfs IMG_COMBINED:=$(IMG_PREFIX)-combined IMG_PART_SIGNATURE:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | mkhash md5 | cut -b1-8) -IMG_PART_DISKGUID:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | mkhash md5 | sed -r 's/(.{8})(.{4})(.{4})(.{4})(.{10})../\1-\2-\3-\4-\500/') +IMG_PART_DISKGUID:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | mkhash md5 | sed -E 's/(.{8})(.{4})(.{4})(.{4})(.{10})../\1-\2-\3-\4-\500/') MKFS_DEVTABLE_OPT := -D $(INCLUDE_DIR)/device_table.txt diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index 2cbc69e5dd..49c2fa0e7b 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -5,7 +5,7 @@ RAM_ROOT=/tmp/root export BACKUP_FILE=sysupgrade.tgz # file extracted by preinit [ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; } -libs() { ldd $* 2>/dev/null | sed -r 's/(.* => )?(.*) .*/\2/'; } +libs() { ldd $* 2>/dev/null | sed -E 's/(.* => )?(.*) .*/\2/'; } install_file() { # [ ... ] local target dest dir diff --git a/package/network/services/umdns/Makefile b/package/network/services/umdns/Makefile index ffbc3fed35..7dbbea322a 100644 --- a/package/network/services/umdns/Makefile +++ b/package/network/services/umdns/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=umdns -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_URL=$(PROJECT_GIT)/project/mdnsd.git PKG_SOURCE_PROTO:=git @@ -30,7 +30,7 @@ define Package/umdns DEPENDS:=+libubox +libubus +libblobmsg-json endef -TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include +TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include -Wno-address-of-packed-member define Package/umdns/conffiles /etc/config/umdns diff --git a/target/linux/ath79/mikrotik/base-files/lib/functions/mikrotik-caldata.sh b/target/linux/ath79/mikrotik/base-files/lib/functions/mikrotik-caldata.sh index 9c4016ee5d..71a1bf02f3 100644 --- a/target/linux/ath79/mikrotik/base-files/lib/functions/mikrotik-caldata.sh +++ b/target/linux/ath79/mikrotik/base-files/lib/functions/mikrotik-caldata.sh @@ -9,13 +9,18 @@ mikrotik_caldata_extract() { local offset=$(($2)) local count=$(($3)) local mtd - local erdfile="/lib/firmware/erd.bin" + local erdfile="/tmp/erd.bin" + local fwfile="/lib/firmware/${FIRMWARE}" + + [ -e $fwfile ] && exit 0 mtd=$(find_mtd_chardev $part) [ -n "$mtd" ] || caldata_die "no mtd device found for partition $part" rbextract -e $mtd $erdfile - dd if=$erdfile of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ + dd if=$erdfile of=$fwfile iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ caldata_die "failed to extract calibration data from $mtd" + + rm -f $erdfile } diff --git a/target/linux/generic/backport-5.4/745-v5.7-net-dsa-mt7530-add-support-for-port-mirroring.patch b/target/linux/generic/backport-5.4/745-v5.7-net-dsa-mt7530-add-support-for-port-mirroring.patch new file mode 100644 index 0000000000..39e351e279 --- /dev/null +++ b/target/linux/generic/backport-5.4/745-v5.7-net-dsa-mt7530-add-support-for-port-mirroring.patch @@ -0,0 +1,123 @@ +From 37feab6076aa816ed72fe836759a485353241916 Mon Sep 17 00:00:00 2001 +From: DENG Qingfang +Date: Fri, 6 Mar 2020 20:35:35 +0800 +Subject: net: dsa: mt7530: add support for port mirroring + +Add support for configuring port mirroring through the cls_matchall +classifier. We do a full ingress and/or egress capture towards a +capture port. +MT7530 supports one monitor port and multiple mirrored ports. + +Signed-off-by: DENG Qingfang +Signed-off-by: David S. Miller +--- + drivers/net/dsa/mt7530.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ + drivers/net/dsa/mt7530.h | 7 ++++++ + 2 files changed, 67 insertions(+) + +--- a/drivers/net/dsa/mt7530.c ++++ b/drivers/net/dsa/mt7530.c +@@ -1222,6 +1222,64 @@ mt7530_port_vlan_del(struct dsa_switch *ds, int port, + return 0; + } + ++static int mt7530_port_mirror_add(struct dsa_switch *ds, int port, ++ struct dsa_mall_mirror_tc_entry *mirror, ++ bool ingress) ++{ ++ struct mt7530_priv *priv = ds->priv; ++ u32 val; ++ ++ /* Check for existent entry */ ++ if ((ingress ? priv->mirror_rx : priv->mirror_tx) & BIT(port)) ++ return -EEXIST; ++ ++ val = mt7530_read(priv, MT7530_MFC); ++ ++ /* MT7530 only supports one monitor port */ ++ if (val & MIRROR_EN && MIRROR_PORT(val) != mirror->to_local_port) ++ return -EEXIST; ++ ++ val |= MIRROR_EN; ++ val &= ~MIRROR_MASK; ++ val |= mirror->to_local_port; ++ mt7530_write(priv, MT7530_MFC, val); ++ ++ val = mt7530_read(priv, MT7530_PCR_P(port)); ++ if (ingress) { ++ val |= PORT_RX_MIR; ++ priv->mirror_rx |= BIT(port); ++ } else { ++ val |= PORT_TX_MIR; ++ priv->mirror_tx |= BIT(port); ++ } ++ mt7530_write(priv, MT7530_PCR_P(port), val); ++ ++ return 0; ++} ++ ++static void mt7530_port_mirror_del(struct dsa_switch *ds, int port, ++ struct dsa_mall_mirror_tc_entry *mirror) ++{ ++ struct mt7530_priv *priv = ds->priv; ++ u32 val; ++ ++ val = mt7530_read(priv, MT7530_PCR_P(port)); ++ if (mirror->ingress) { ++ val &= ~PORT_RX_MIR; ++ priv->mirror_rx &= ~BIT(port); ++ } else { ++ val &= ~PORT_TX_MIR; ++ priv->mirror_tx &= ~BIT(port); ++ } ++ mt7530_write(priv, MT7530_PCR_P(port), val); ++ ++ if (!priv->mirror_rx && !priv->mirror_tx) { ++ val = mt7530_read(priv, MT7530_MFC); ++ val &= ~MIRROR_EN; ++ mt7530_write(priv, MT7530_MFC, val); ++ } ++} ++ + static enum dsa_tag_protocol + mtk_get_tag_protocol(struct dsa_switch *ds, int port, + enum dsa_tag_protocol mp) +@@ -1613,6 +1671,8 @@ static const struct dsa_switch_ops mt7530_switch_ops = { + .port_vlan_prepare = mt7530_port_vlan_prepare, + .port_vlan_add = mt7530_port_vlan_add, + .port_vlan_del = mt7530_port_vlan_del, ++ .port_mirror_add = mt7530_port_mirror_add, ++ .port_mirror_del = mt7530_port_mirror_del, + .phylink_validate = mt7530_phylink_validate, + .phylink_mac_link_state = mt7530_phylink_mac_link_state, + .phylink_mac_config = mt7530_phylink_mac_config, +--- a/drivers/net/dsa/mt7530.h ++++ b/drivers/net/dsa/mt7530.h +@@ -36,6 +36,9 @@ enum { + #define CPU_EN BIT(7) + #define CPU_PORT(x) ((x) << 4) + #define CPU_MASK (0xf << 4) ++#define MIRROR_EN BIT(3) ++#define MIRROR_PORT(x) ((x) & 0x7) ++#define MIRROR_MASK 0x7 + + /* Registers for address table access */ + #define MT7530_ATA1 0x74 +@@ -141,6 +144,8 @@ enum mt7530_stp_state { + + /* Register for port control */ + #define MT7530_PCR_P(x) (0x2004 + ((x) * 0x100)) ++#define PORT_TX_MIR BIT(9) ++#define PORT_RX_MIR BIT(8) + #define PORT_VLAN(x) ((x) & 0x3) + + enum mt7530_port_mode { +@@ -460,6 +465,8 @@ struct mt7530_priv { + phy_interface_t p6_interface; + phy_interface_t p5_interface; + unsigned int p5_intf_sel; ++ u8 mirror_rx; ++ u8 mirror_tx; + + struct mt7530_port ports[MT7530_NUM_PORTS]; + /* protect among processes for registers access*/ diff --git a/target/linux/generic/backport-5.4/746-stable-net-dsa-mt7530-fix-null-pointer-dereferencing-in-por.patch b/target/linux/generic/backport-5.4/746-stable-net-dsa-mt7530-fix-null-pointer-dereferencing-in-por.patch new file mode 100644 index 0000000000..1775bfb32c --- /dev/null +++ b/target/linux/generic/backport-5.4/746-stable-net-dsa-mt7530-fix-null-pointer-dereferencing-in-por.patch @@ -0,0 +1,39 @@ +From 0452800f6db4ed0a42ffb15867c0acfd68829f6a Mon Sep 17 00:00:00 2001 +From: Chuanhong Guo +Date: Fri, 3 Apr 2020 19:28:24 +0800 +Subject: net: dsa: mt7530: fix null pointer dereferencing in port5 setup +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The 2nd gmac of mediatek soc ethernet may not be connected to a PHY +and a phy-handle isn't always available. +Unfortunately, mt7530 dsa driver assumes that the 2nd gmac is always +connected to switch port 5 and setup mt7530 according to phy address +of 2nd gmac node, causing null pointer dereferencing when phy-handle +isn't defined in dts. +This commit fix this setup code by checking return value of +of_parse_phandle before using it. + +Fixes: 38f790a80560 ("net: dsa: mt7530: Add support for port 5") +Signed-off-by: Chuanhong Guo +Reviewed-by: Vivien Didelot +Reviewed-by: Florian Fainelli +Tested-by: René van Dorst +Signed-off-by: David S. Miller +--- + drivers/net/dsa/mt7530.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/net/dsa/mt7530.c ++++ b/drivers/net/dsa/mt7530.c +@@ -1411,6 +1411,9 @@ mt7530_setup(struct dsa_switch *ds) + continue; + + phy_node = of_parse_phandle(mac_np, "phy-handle", 0); ++ if (!phy_node) ++ continue; ++ + if (phy_node->parent == priv->dev->of_node->parent) { + interface = of_get_phy_mode(mac_np); + id = of_mdio_parse_addr(ds->dev, phy_node); diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/target/linux/generic/files/drivers/net/phy/rtl8367b.c index e7fe79302a..1b1d5001a3 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8367b.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8367b.c @@ -798,7 +798,7 @@ static int rtl8367b_extif_set_mode(struct rtl8366_smi *smi, int id, (7 << RTL8367B_DEBUG1_DN_SHIFT(id)) | (7 << RTL8367B_DEBUG1_DP_SHIFT(id))); } else { - REG_RMW(smi, RTL8367B_CHIP_DEBUG1_REG, + REG_RMW(smi, RTL8367B_CHIP_DEBUG2_REG, RTL8367B_DEBUG2_DRI_EXT2 | RTL8367B_DEBUG2_DRI_EXT2_RG | RTL8367B_DEBUG2_SLR_EXT2 | @@ -813,8 +813,7 @@ static int rtl8367b_extif_set_mode(struct rtl8366_smi *smi, int id, case RTL8367_EXTIF_MODE_TMII_MAC: case RTL8367_EXTIF_MODE_TMII_PHY: - REG_RMW(smi, RTL8367B_BYPASS_LINE_RATE_REG, - BIT((id + 1) % 2), BIT((id + 1) % 2)); + REG_RMW(smi, RTL8367B_BYPASS_LINE_RATE_REG, BIT(id), BIT(id)); break; case RTL8367_EXTIF_MODE_GMII: @@ -827,8 +826,7 @@ static int rtl8367b_extif_set_mode(struct rtl8366_smi *smi, int id, case RTL8367_EXTIF_MODE_MII_MAC: case RTL8367_EXTIF_MODE_MII_PHY: case RTL8367_EXTIF_MODE_DISABLED: - REG_RMW(smi, RTL8367B_BYPASS_LINE_RATE_REG, - BIT((id + 1) % 2), 0); + REG_RMW(smi, RTL8367B_BYPASS_LINE_RATE_REG, BIT(id), 0); REG_RMW(smi, RTL8367B_EXT_RGMXF_REG(id), BIT(6), 0); break;