Merge Official Source

Signed-off-by: Tianling Shen <cnsztl@immortalwrt.org>
This commit is contained in:
Tianling Shen 2024-09-25 15:18:00 +08:00
commit df030ed6f3
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
7 changed files with 56 additions and 34 deletions

View File

@ -20,7 +20,7 @@ define Package/Default
PROVIDES:= PROVIDES:=
EXTRA_DEPENDS:= EXTRA_DEPENDS:=
MAINTAINER:=$(PKG_MAINTAINER) MAINTAINER:=$(PKG_MAINTAINER)
SOURCE:=$(patsubst $(TOPDIR)/%,%,$(CURDIR)) SOURCE:=$(patsubst $(TOPDIR)/%,%,$(patsubst $(TOPDIR)/package/%,feeds/base/%,$(CURDIR)))
ifneq ($(PKG_VERSION),) ifneq ($(PKG_VERSION),)
ifneq ($(PKG_RELEASE),) ifneq ($(PKG_RELEASE),)
VERSION:=$(PKG_VERSION)-$(PKG_RELEASE) VERSION:=$(PKG_VERSION)-$(PKG_RELEASE)

View File

@ -77,7 +77,8 @@ _ignore = $(foreach p,$(IGNORE_PACKAGES),--ignore $(p))
prepare-tmpinfo: FORCE prepare-tmpinfo: FORCE
@+$(MAKE) -r -s $(STAGING_DIR_HOST)/.prereq-build $(PREP_MK) @+$(MAKE) -r -s $(STAGING_DIR_HOST)/.prereq-build $(PREP_MK)
mkdir -p tmp/info mkdir -p tmp/info feeds
[ -e $(TOPDIR)/feeds/base ] || ln -sf $(TOPDIR)/package $(TOPDIR)/feeds/base
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPTH=5 SCAN_EXTRA="" $(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPTH=5 SCAN_EXTRA=""
$(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPTH=3 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1" $(_SINGLE)$(NO_TRACE_MAKE) -j1 -r -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPTH=3 SCAN_EXTRA="" SCAN_MAKEOPTS="TARGET_BUILD=1"
for type in package target; do \ for type in package target; do \

View File

@ -61,8 +61,8 @@
i2c { i2c {
compatible = "i2c-gpio"; compatible = "i2c-gpio";
sda-gpios = <&gpio 17 GPIO_ACTIVE_LOW>; sda-gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
scl-gpios = <&gpio 16 GPIO_ACTIVE_LOW>; scl-gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
}; };
}; };

View File

@ -14,6 +14,7 @@
led-failsafe = &flash; led-failsafe = &flash;
led-running = &power; led-running = &power;
led-upgrade = &flash; led-upgrade = &flash;
label-mac-device = &gmac;
}; };
soc { soc {

View File

@ -2367,7 +2367,6 @@ define Device/tplink_er605-v2
KERNEL_IN_UBI := 1 KERNEL_IN_UBI := 1
KERNEL_LOADADDR := 0x82000000 KERNEL_LOADADDR := 0x82000000
KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb KERNEL := kernel-bin | relocate-kernel 0x80001000 | lzma | fit lzma $$(KDIR)/image-$$(firstword $$(DEVICE_DTS)).dtb
IMAGES += sysupgrade.tar
IMAGE_SIZE := 127744k IMAGE_SIZE := 127744k
endef endef
TARGET_DEVICES += tplink_er605-v2 TARGET_DEVICES += tplink_er605-v2

View File

@ -109,6 +109,20 @@ static enum dsa_tag_protocol rtl83xx_get_tag_protocol(struct dsa_switch *ds,
return DSA_TAG_PROTO_TRAILER; return DSA_TAG_PROTO_TRAILER;
} }
static void rtl83xx_vlan_set_pvid(struct rtl838x_switch_priv *priv,
int port, int pvid)
{
/* Set both inner and outer PVID of the port */
priv->r->vlan_port_pvid_set(port, PBVLAN_TYPE_INNER, pvid);
priv->r->vlan_port_pvid_set(port, PBVLAN_TYPE_OUTER, pvid);
priv->r->vlan_port_pvidmode_set(port, PBVLAN_TYPE_INNER,
PBVLAN_MODE_UNTAG_AND_PRITAG);
priv->r->vlan_port_pvidmode_set(port, PBVLAN_TYPE_OUTER,
PBVLAN_MODE_UNTAG_AND_PRITAG);
priv->ports[port].pvid = pvid;
}
/* Initialize all VLANS */ /* Initialize all VLANS */
static void rtl83xx_vlan_setup(struct rtl838x_switch_priv *priv) static void rtl83xx_vlan_setup(struct rtl838x_switch_priv *priv)
{ {
@ -132,17 +146,22 @@ static void rtl83xx_vlan_setup(struct rtl838x_switch_priv *priv)
info.l2_tunnel_list_id = -1; info.l2_tunnel_list_id = -1;
} }
/* Initialize all vlans 0-4095 */ /* Initialize normal VLANs 1-4095 */
for (int i = 0; i < MAX_VLANS; i ++) for (int i = 1; i < MAX_VLANS; i ++)
priv->r->vlan_set_tagged(i, &info); priv->r->vlan_set_tagged(i, &info);
/* reset PVIDs; defaults to 1 on reset */ /*
for (int i = 0; i <= priv->ds->num_ports; i++) { * Initialize the special VLAN 0 and reset PVIDs. The CPU port PVID
priv->r->vlan_port_pvid_set(i, PBVLAN_TYPE_INNER, 0); * is applied to packets from the CPU for untagged destinations,
priv->r->vlan_port_pvid_set(i, PBVLAN_TYPE_OUTER, 0); * regardless if the actual ingress VID. Any port with untagged
priv->r->vlan_port_pvidmode_set(i, PBVLAN_TYPE_INNER, PBVLAN_MODE_UNTAG_AND_PRITAG); * egress VLAN(s) must therefore be a member of VLAN 0 to support
priv->r->vlan_port_pvidmode_set(i, PBVLAN_TYPE_OUTER, PBVLAN_MODE_UNTAG_AND_PRITAG); * CPU port as ingress when VLAN filtering is enabled.
*/
for (int i = 0; i <= priv->cpu_port; i++) {
rtl83xx_vlan_set_pvid(priv, i, 0);
info.tagged_ports |= BIT_ULL(i);
} }
priv->r->vlan_set_tagged(0, &info);
/* Set forwarding action based on inner VLAN tag */ /* Set forwarding action based on inner VLAN tag */
for (int i = 0; i < priv->cpu_port; i++) for (int i = 0; i < priv->cpu_port; i++)
@ -1405,20 +1424,6 @@ static int rtl83xx_vlan_prepare(struct dsa_switch *ds, int port,
return 0; return 0;
} }
static void rtl83xx_vlan_set_pvid(struct rtl838x_switch_priv *priv,
int port, int pvid)
{
/* Set both inner and outer PVID of the port */
priv->r->vlan_port_pvid_set(port, PBVLAN_TYPE_INNER, pvid);
priv->r->vlan_port_pvid_set(port, PBVLAN_TYPE_OUTER, pvid);
priv->r->vlan_port_pvidmode_set(port, PBVLAN_TYPE_INNER,
PBVLAN_MODE_UNTAG_AND_PRITAG);
priv->r->vlan_port_pvidmode_set(port, PBVLAN_TYPE_OUTER,
PBVLAN_MODE_UNTAG_AND_PRITAG);
priv->ports[port].pvid = pvid;
}
static int rtl83xx_vlan_add(struct dsa_switch *ds, int port, static int rtl83xx_vlan_add(struct dsa_switch *ds, int port,
const struct switchdev_obj_port_vlan *vlan, const struct switchdev_obj_port_vlan *vlan,
struct netlink_ext_ack *extack) struct netlink_ext_ack *extack)
@ -1430,6 +1435,9 @@ static int rtl83xx_vlan_add(struct dsa_switch *ds, int port,
pr_debug("%s port %d, vid %d, flags %x\n", pr_debug("%s port %d, vid %d, flags %x\n",
__func__, port, vlan->vid, vlan->flags); __func__, port, vlan->vid, vlan->flags);
/* Let no one mess with our special VLAN 0 */
if (!vlan->vid) return 0;
if (vlan->vid > 4095) { if (vlan->vid > 4095) {
dev_err(priv->dev, "VLAN out of range: %d", vlan->vid); dev_err(priv->dev, "VLAN out of range: %d", vlan->vid);
return -ENOTSUPP; return -ENOTSUPP;
@ -1441,10 +1449,20 @@ static int rtl83xx_vlan_add(struct dsa_switch *ds, int port,
mutex_lock(&priv->reg_mutex); mutex_lock(&priv->reg_mutex);
if (vlan->flags & BRIDGE_VLAN_INFO_PVID) /*
rtl83xx_vlan_set_pvid(priv, port, vlan->vid); * Realtek switches copy frames as-is to/from the CPU. For a proper
else if (priv->ports[port].pvid == vlan->vid) * VLAN handling the 12 bit RVID field (= VLAN id) for incoming traffic
rtl83xx_vlan_set_pvid(priv, port, 0); * and the 1 bit RVID_SEL field (0 = use inner tag, 1 = use outer tag)
* for outgoing traffic of the CPU tag structure need to be handled. As
* of now no such logic is in place. So for the CPU port keep the fixed
* PVID=0 from initial setup in place and ignore all subsequent settings.
*/
if (port != priv->cpu_port) {
if (vlan->flags & BRIDGE_VLAN_INFO_PVID)
rtl83xx_vlan_set_pvid(priv, port, vlan->vid);
else if (priv->ports[port].pvid == vlan->vid)
rtl83xx_vlan_set_pvid(priv, port, 0);
}
/* Get port memberships of this vlan */ /* Get port memberships of this vlan */
priv->r->vlan_tables_read(vlan->vid, &info); priv->r->vlan_tables_read(vlan->vid, &info);
@ -1488,6 +1506,9 @@ static int rtl83xx_vlan_del(struct dsa_switch *ds, int port,
pr_debug("%s: port %d, vid %d, flags %x\n", pr_debug("%s: port %d, vid %d, flags %x\n",
__func__, port, vlan->vid, vlan->flags); __func__, port, vlan->vid, vlan->flags);
/* Let no one mess with our special VLAN 0 */
if (!vlan->vid) return 0;
if (vlan->vid > 4095) { if (vlan->vid > 4095) {
dev_err(priv->dev, "VLAN out of range: %d", vlan->vid); dev_err(priv->dev, "VLAN out of range: %d", vlan->vid);
return -ENOTSUPP; return -ENOTSUPP;

View File

@ -11,9 +11,9 @@ PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware-utils.git PKG_SOURCE_URL=$(PROJECT_GIT)/project/firmware-utils.git
PKG_SOURCE_DATE:=2024-01-31 PKG_SOURCE_DATE:=2024-09-22
PKG_SOURCE_VERSION:=c46b4b4ad7e77aab555bb41d6adc5554d11a83e8 PKG_SOURCE_VERSION:=f3b636d0ee478ee8d757cb42d469e0a40d07627a
PKG_MIRROR_HASH:=4affc0a85368ec8fc6df3719c628dd88b13ce6cc46ba2a52741a61d089e25e51 PKG_MIRROR_HASH:=c60f97e2c48842dd5c8e55cb214ce1139fa7586cd22ca489d656320b06bbbe68
include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/host-build.mk
include $(INCLUDE_DIR)/cmake.mk include $(INCLUDE_DIR)/cmake.mk