From: Markus Stockhausen Date: Tue, 13 Jan 2026 12:55:38 +0000 (+0100) Subject: realtek: dsa: Remove family check from port_get_stp_state() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84a6288a0849fa0ef56a12e7bf028f07c0c6884f;p=thirdparty%2Fopenwrt.git realtek: dsa: Remove family check from port_get_stp_state() The device specific stp_get() functions can return the state of a given port individually. No need to disassemble the device specific state table. Additionally change function prefix. Signed-off-by: Markus Stockhausen Link: https://github.com/openwrt/openwrt/pull/21527 Signed-off-by: Hauke Mehrtens --- diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c index 66e7c784ffa..53e79bde822 100644 --- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c +++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/common.c @@ -18,36 +18,20 @@ struct phylink_pcs *rtpcs_create(struct device *dev, struct device_node *np, int port); -int rtl83xx_port_get_stp_state(struct rtl838x_switch_priv *priv, int port) +int rtldsa_port_get_stp_state(struct rtl838x_switch_priv *priv, int port) { + u32 table[4]; u32 msti = 0; - u32 port_state[4]; - int index, bit; - int pos = port; - int n = priv->port_width << 1; + int state; - /* Ports above or equal CPU port can never be configured */ if (port >= priv->cpu_port) - return -1; + return -EINVAL; mutex_lock(&priv->reg_mutex); - - /* For the RTL839x and following, the bits are left-aligned in the 64/128 bit field */ - if (priv->family_id == RTL8390_FAMILY_ID) - pos += 12; - if (priv->family_id == RTL9300_FAMILY_ID) - pos += 3; - if (priv->family_id == RTL9310_FAMILY_ID) - pos += 8; - - index = n - (pos >> 4) - 1; - bit = (pos << 1) % 32; - - priv->r->stp_get(priv, msti, port, port_state); - + state = priv->r->stp_get(priv, msti, port, table); mutex_unlock(&priv->reg_mutex); - return (port_state[index] >> bit) & 3; + return state; } static struct table_reg rtl838x_tbl_regs[] = { diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/debugfs.c b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/debugfs.c index 5acdf05d807..908f6538dd6 100644 --- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/debugfs.c +++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/debugfs.c @@ -162,12 +162,12 @@ static ssize_t stp_state_read(struct file *filp, char __user *buffer, size_t cou { struct rtl838x_port *p = filp->private_data; struct dsa_switch *ds = p->dp->ds; - int value = rtl83xx_port_get_stp_state(ds->priv, p->dp->index); + int state = rtldsa_port_get_stp_state(ds->priv, p->dp->index); - if (value < 0) - return -EINVAL; + if (state < 0) + return state; - return rtl838x_common_read(buffer, count, ppos, (u32)value); + return rtl838x_common_read(buffer, count, ppos, (u32)state); } static ssize_t stp_state_write(struct file *filp, const char __user *buffer, diff --git a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h index f8516bbf58a..66766da3315 100644 --- a/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h +++ b/target/linux/realtek/files-6.12/drivers/net/dsa/rtl83xx/rtl83xx.h @@ -135,7 +135,7 @@ void __init rtl83xx_setup_qos(struct rtl838x_switch_priv *priv); void rtl83xx_fast_age(struct dsa_switch *ds, int port); int rtl83xx_packet_cntr_alloc(struct rtl838x_switch_priv *priv); -int rtl83xx_port_get_stp_state(struct rtl838x_switch_priv *priv, int port); +int rtldsa_port_get_stp_state(struct rtl838x_switch_priv *priv, int port); int rtl83xx_port_is_under(const struct net_device *dev, struct rtl838x_switch_priv *priv); void rtl83xx_port_stp_state_set(struct dsa_switch *ds, int port, u8 state); int rtl83xx_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data);