From dd2af4711ae3d36ddf262472e561cd0e30a23ca6 Mon Sep 17 00:00:00 2001 From: Mieczyslaw Nalewaj Date: Sun, 21 Jul 2024 22:55:17 +0200 Subject: [PATCH] kernel: set and get mc index for rtl8367d family chips Set and get mc index for rtl8367d family chips Co-authored-by: Serge Vasilugin Signed-off-by: Mieczyslaw Nalewaj Link: https://github.com/openwrt/openwrt/pull/14804 Signed-off-by: Hauke Mehrtens --- .../generic/files/drivers/net/phy/rtl8367b.c | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/target/linux/generic/files/drivers/net/phy/rtl8367b.c b/target/linux/generic/files/drivers/net/phy/rtl8367b.c index a1efd8fe5bd..75912c44547 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8367b.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8367b.c @@ -276,6 +276,10 @@ struct rtl8367b_initval { #define RTL8367D_REG_MAC0_FORCE_SELECT 0x12c0 #define RTL8367D_REG_MAC0_FORCE_SELECT_EN 0x12c8 +#define RTL8367D_VLAN_PVID_CTRL_REG(_p) (0x0700 + (_p)) +#define RTL8367D_VLAN_PVID_CTRL_MASK 0xfff +#define RTL8367D_VLAN_PVID_CTRL_SHIFT(_p) 0 + static struct rtl8366_mib_counter rtl8367b_mib_counters[RTL8367B_NUM_MIB_COUNTERS] = { {0, 0, 4, "ifInOctets" }, @@ -1040,10 +1044,17 @@ static int rtl8367b_get_mc_index(struct rtl8366_smi *smi, int port, int *val) if (port >= RTL8367B_NUM_PORTS) return -EINVAL; - REG_RD(smi, RTL8367B_VLAN_PVID_CTRL_REG(port), &data); + if (smi->rtl8367b_chip >= RTL8367B_CHIP_RTL8367S_VB) { /* Family D */ + REG_RD(smi, RTL8367D_VLAN_PVID_CTRL_REG(port), &data); - *val = (data >> RTL8367B_VLAN_PVID_CTRL_SHIFT(port)) & - RTL8367B_VLAN_PVID_CTRL_MASK; + *val = (data >> RTL8367D_VLAN_PVID_CTRL_SHIFT(port)) & + RTL8367D_VLAN_PVID_CTRL_MASK; + } else { + REG_RD(smi, RTL8367B_VLAN_PVID_CTRL_REG(port), &data); + + *val = (data >> RTL8367B_VLAN_PVID_CTRL_SHIFT(port)) & + RTL8367B_VLAN_PVID_CTRL_MASK; + } return 0; } @@ -1053,7 +1064,14 @@ static int rtl8367b_set_mc_index(struct rtl8366_smi *smi, int port, int index) if (port >= RTL8367B_NUM_PORTS || index >= RTL8367B_NUM_VLANS) return -EINVAL; - return rtl8366_smi_rmwr(smi, RTL8367B_VLAN_PVID_CTRL_REG(port), + if (smi->rtl8367b_chip >= RTL8367B_CHIP_RTL8367S_VB) /* Family D */ + return rtl8366_smi_rmwr(smi, RTL8367D_VLAN_PVID_CTRL_REG(port), + RTL8367D_VLAN_PVID_CTRL_MASK << + RTL8367D_VLAN_PVID_CTRL_SHIFT(port), + (index & RTL8367D_VLAN_PVID_CTRL_MASK) << + RTL8367D_VLAN_PVID_CTRL_SHIFT(port)); + else + return rtl8366_smi_rmwr(smi, RTL8367B_VLAN_PVID_CTRL_REG(port), RTL8367B_VLAN_PVID_CTRL_MASK << RTL8367B_VLAN_PVID_CTRL_SHIFT(port), (index & RTL8367B_VLAN_PVID_CTRL_MASK) <<