diff options
author | Birger Koblitz <git@birger-koblitz.de> | 2022-01-18 20:53:31 +0100 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2022-02-17 15:21:47 +0000 |
commit | 9d396fc1e8a7068acaa34eef2f87409c16a209bd (patch) | |
tree | 4ebaddc4f60173614d82a14d6e7d74e3b85277fd /target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c | |
parent | f3c5e7ddcc365f66f9b21f3332a95d281a101303 (diff) | |
download | upstream-9d396fc1e8a7068acaa34eef2f87409c16a209bd.tar.gz upstream-9d396fc1e8a7068acaa34eef2f87409c16a209bd.tar.bz2 upstream-9d396fc1e8a7068acaa34eef2f87409c16a209bd.zip |
realtek: Add L2 aging configuration functions for all SoC families
Instead of a generic L2 aging configuration function with complex
logic, we implement an individual function for all SoC types.
Signed-off-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
Signed-off-by: Birger Koblitz <git@birger-koblitz.de>
Diffstat (limited to 'target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c')
-rw-r--r-- | target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c b/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c index 8ae174bd9e..dde1b5bebc 100644 --- a/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c +++ b/target/linux/realtek/files-5.10/drivers/net/dsa/rtl83xx/rtl839x.c @@ -1762,6 +1762,22 @@ void rtl839x_vlan_port_pvid_set(int port, enum pbvlan_type type, int pvid) sw_w32_mask(0xfff << 16, pvid << 16, RTL839X_VLAN_PORT_PB_VLAN + (port << 2)); } +static int rtl839x_set_ageing_time(unsigned long msec) +{ + int t = sw_r32(RTL839X_L2_CTRL_1); + + t &= 0x1FFFFF; + t = t * 3 / 5; /* Aging time in seconds. 0: L2 aging disabled */ + pr_debug("L2 AGING time: %d sec\n", t); + + t = (msec * 5 + 2000) / 3000; + t = t > 0x1FFFFF ? 0x1FFFFF : t; + sw_w32_mask(0x1FFFFF, t, RTL839X_L2_CTRL_1); + pr_debug("Dynamic aging for ports: %x\n", sw_r32(RTL839X_L2_PORT_AGING_OUT)); + + return 0; +} + static void rtl839x_set_igr_filter(int port, enum igr_filter state) { sw_w32_mask(0x3 << ((port & 0xf)<<1), state << ((port & 0xf)<<1), @@ -1799,6 +1815,7 @@ const struct rtl838x_reg rtl839x_reg = { .l2_ctrl_0 = RTL839X_L2_CTRL_0, .l2_ctrl_1 = RTL839X_L2_CTRL_1, .l2_port_aging_out = RTL839X_L2_PORT_AGING_OUT, + .set_ageing_time = rtl839x_set_ageing_time, .smi_poll_ctrl = RTL839X_SMI_PORT_POLLING_CTRL, .l2_tbl_flush_ctrl = RTL839X_L2_TBL_FLUSH_CTRL, .exec_tbl0_cmd = rtl839x_exec_tbl0_cmd, |