From: Markus Stockhausen Date: Wed, 31 Dec 2025 13:20:38 +0000 (+0100) Subject: realtek: eth: move cpu_port to config structure X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8c6713ce4b72b64f175b6401ed58d30b08ef592;p=thirdparty%2Fopenwrt.git realtek: eth: move cpu_port to config structure There is no need to set the cpu port depending on the given family. Remove it from the private control structure and add the fixed value to the configuration structure. Signed-off-by: Markus Stockhausen Link: https://github.com/openwrt/openwrt/pull/21345 Signed-off-by: Robert Marko --- diff --git a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c index 28b5a57ddb6..1c3ff4e812e 100644 --- a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c +++ b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.c @@ -194,7 +194,6 @@ struct rtl838x_eth_priv { struct phylink_config phylink_config; struct phylink_pcs pcs; const struct rteth_config *r; - u8 cpu_port; u32 lastEvent; u16 rxrings; u16 rxringlen; @@ -447,6 +446,7 @@ static irqreturn_t rtl93xx_net_irq(int irq, void *dev_id) static const struct rteth_config rteth_838x_cfg = { .family_id = RTL8380_FAMILY_ID, + .cpu_port = 28, .net_irq = rtl83xx_net_irq, .mac_port_ctrl = rtl838x_mac_port_ctrl, .dma_if_intr_sts = RTL838X_DMA_IF_INTR_STS, @@ -473,6 +473,7 @@ static const struct rteth_config rteth_838x_cfg = { static const struct rteth_config rteth_839x_cfg = { .family_id = RTL8390_FAMILY_ID, + .cpu_port = 52, .net_irq = rtl83xx_net_irq, .mac_port_ctrl = rtl839x_mac_port_ctrl, .dma_if_intr_sts = RTL839X_DMA_IF_INTR_STS, @@ -499,6 +500,7 @@ static const struct rteth_config rteth_839x_cfg = { static const struct rteth_config rteth_930x_cfg = { .family_id = RTL9300_FAMILY_ID, + .cpu_port = 28, .net_irq = rtl93xx_net_irq, .mac_port_ctrl = rtl930x_mac_port_ctrl, .dma_if_intr_rx_runout_sts = RTL930X_DMA_IF_INTR_RX_RUNOUT_STS, @@ -531,6 +533,7 @@ static const struct rteth_config rteth_930x_cfg = { static const struct rteth_config rteth_931x_cfg = { .family_id = RTL9310_FAMILY_ID, + .cpu_port = 56, .net_irq = rtl93xx_net_irq, .mac_port_ctrl = rtl931x_mac_port_ctrl, .dma_if_intr_rx_runout_sts = RTL931X_DMA_IF_INTR_RX_RUNOUT_STS, @@ -566,8 +569,8 @@ static void rtl838x_hw_reset(struct rtl838x_eth_priv *priv) u32 int_saved, nbuf; u32 reset_mask; - pr_info("RESETTING %x, CPU_PORT %d\n", priv->r->family_id, priv->cpu_port); - sw_w32_mask(0x3, 0, priv->r->mac_port_ctrl(priv->cpu_port)); + pr_info("RESETTING %x, CPU_PORT %d\n", priv->r->family_id, priv->r->cpu_port); + sw_w32_mask(0x3, 0, priv->r->mac_port_ctrl(priv->r->cpu_port)); mdelay(100); /* Disable and clear interrupts */ @@ -663,16 +666,16 @@ static void rtl838x_hw_en_rxtx(struct rtl838x_eth_priv *priv) sw_w32_mask(0, RX_EN | TX_EN, priv->r->dma_if_ctrl); /* Restart TX/RX to CPU port */ - sw_w32_mask(0x0, 0x3, priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0x0, 0x3, priv->r->mac_port_ctrl(priv->r->cpu_port)); /* Set Speed, duplex, flow control * FORCE_EN | LINK_EN | NWAY_EN | DUP_SEL * | SPD_SEL = 0b10 | FORCE_FC_EN | PHY_MASTER_SLV_MANUAL_EN * | MEDIA_SEL */ - sw_w32(0x6192F, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32(0x6192F, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); /* Enable CRC checks on CPU-port */ - sw_w32_mask(0, BIT(3), priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0, BIT(3), priv->r->mac_port_ctrl(priv->r->cpu_port)); } static void rtl839x_hw_en_rxtx(struct rtl838x_eth_priv *priv) @@ -687,7 +690,7 @@ static void rtl839x_hw_en_rxtx(struct rtl838x_eth_priv *priv) sw_w32_mask(0, RX_EN | TX_EN, priv->r->dma_if_ctrl); /* Restart TX/RX to CPU port, enable CRC checking */ - sw_w32_mask(0x0, 0x3 | BIT(3), priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0x0, 0x3 | BIT(3), priv->r->mac_port_ctrl(priv->r->cpu_port)); /* CPU port joins Lookup Miss Flooding Portmask */ /* TODO: The code below should also work for the RTL838x */ @@ -696,7 +699,7 @@ static void rtl839x_hw_en_rxtx(struct rtl838x_eth_priv *priv) sw_w32(0x38000, RTL839X_TBL_ACCESS_L2_CTRL); /* Force CPU port link up */ - sw_w32_mask(0, 3, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32_mask(0, 3, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); } static void rtl93xx_hw_en_rxtx(struct rtl838x_eth_priv *priv) @@ -725,17 +728,17 @@ static void rtl93xx_hw_en_rxtx(struct rtl838x_eth_priv *priv) sw_w32_mask(0, RX_EN_93XX | TX_EN_93XX, priv->r->dma_if_ctrl); /* Restart TX/RX to CPU port, enable CRC checking */ - sw_w32_mask(0x0, 0x3 | BIT(4), priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0x0, 0x3 | BIT(4), priv->r->mac_port_ctrl(priv->r->cpu_port)); if (priv->r->family_id == RTL9300_FAMILY_ID) - sw_w32_mask(0, BIT(priv->cpu_port), RTL930X_L2_UNKN_UC_FLD_PMSK); + sw_w32_mask(0, BIT(priv->r->cpu_port), RTL930X_L2_UNKN_UC_FLD_PMSK); else - sw_w32_mask(0, BIT(priv->cpu_port), RTL931X_L2_UNKN_UC_FLD_PMSK); + sw_w32_mask(0, BIT(priv->r->cpu_port), RTL931X_L2_UNKN_UC_FLD_PMSK); if (priv->r->family_id == RTL9300_FAMILY_ID) - sw_w32(0x217, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32(0x217, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); else - sw_w32(0x2a1d, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32(0x2a1d, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); } static void rtl838x_setup_ring_buffer(struct rtl838x_eth_priv *priv, struct ring_b *ring) @@ -871,7 +874,7 @@ static void rtl838x_hw_stop(struct rtl838x_eth_priv *priv) u32 clear_irq = priv->r->family_id == RTL8380_FAMILY_ID ? 0x000fffff : 0x007fffff; /* Disable RX/TX from/to CPU-port */ - sw_w32_mask(0x3, 0, priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0x3, 0, priv->r->mac_port_ctrl(priv->r->cpu_port)); /* Disable traffic */ if (priv->r->family_id == RTL9300_FAMILY_ID || priv->r->family_id == RTL9310_FAMILY_ID) @@ -891,12 +894,12 @@ static void rtl838x_hw_stop(struct rtl838x_eth_priv *priv) if (priv->r->family_id == RTL8380_FAMILY_ID) { /* Disable FAST_AGE_OUT otherwise flush will hang */ sw_w32_mask(BIT(23), 0, RTL838X_L2_CTRL_1); - for (int i = 0; i <= priv->cpu_port; i++) { + for (int i = 0; i <= priv->r->cpu_port; i++) { sw_w32(BIT(26) | BIT(23) | i << 5, priv->r->l2_tbl_flush_ctrl); do { } while (sw_r32(priv->r->l2_tbl_flush_ctrl) & BIT(26)); } } else if (priv->r->family_id == RTL8390_FAMILY_ID) { - for (int i = 0; i <= priv->cpu_port; i++) { + for (int i = 0; i <= priv->r->cpu_port; i++) { sw_w32(BIT(28) | BIT(25) | i << 5, priv->r->l2_tbl_flush_ctrl); do { } while (sw_r32(priv->r->l2_tbl_flush_ctrl) & BIT(28)); } @@ -905,11 +908,11 @@ static void rtl838x_hw_stop(struct rtl838x_eth_priv *priv) /* CPU-Port: Link down */ if (priv->r->family_id == RTL8380_FAMILY_ID || priv->r->family_id == RTL8390_FAMILY_ID) - sw_w32(force_mac, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32(force_mac, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); else if (priv->r->family_id == RTL9300_FAMILY_ID) - sw_w32_mask(0x3, 0, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32_mask(0x3, 0, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); else if (priv->r->family_id == RTL9310_FAMILY_ID) - sw_w32_mask(BIT(0) | BIT(9), 0, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32_mask(BIT(0) | BIT(9), 0, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); mdelay(100); /* Disable all TX/RX interrupts */ @@ -1061,7 +1064,7 @@ static int rtl838x_eth_tx(struct sk_buff *skb, struct net_device *dev) /* Check for DSA tagging at the end of the buffer */ if (netdev_uses_dsa(dev) && skb->data[len - 4] == 0x80 && - skb->data[len - 3] < priv->cpu_port && + skb->data[len - 3] < priv->r->cpu_port && skb->data[len - 2] == 0x10 && skb->data[len - 1] == 0x00) { /* Reuse tag space for CRC if possible */ @@ -1319,9 +1322,9 @@ static void rtl838x_pcs_an_restart(struct phylink_pcs *pcs) pr_debug("In %s\n", __func__); /* Restart by disabling and re-enabling link */ - sw_w32(0x6192D, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32(0x6192D, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); mdelay(20); - sw_w32(0x6192F, priv->r->mac_force_mode_ctrl + priv->cpu_port * 4); + sw_w32(0x6192F, priv->r->mac_force_mode_ctrl + priv->r->cpu_port * 4); } static void rtl838x_pcs_get_state(struct phylink_pcs *pcs, @@ -1329,7 +1332,7 @@ static void rtl838x_pcs_get_state(struct phylink_pcs *pcs, { u32 speed; struct rtl838x_eth_priv *priv = container_of(pcs, struct rtl838x_eth_priv, pcs); - int port = priv->cpu_port; + int port = priv->r->cpu_port; pr_info("In %s\n", __func__); @@ -1386,7 +1389,7 @@ static void rtl838x_mac_link_down(struct phylink_config *config, pr_debug("In %s\n", __func__); /* Stop TX/RX to port */ - sw_w32_mask(0x03, 0, priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0x03, 0, priv->r->mac_port_ctrl(priv->r->cpu_port)); } static void rtl838x_mac_link_up(struct phylink_config *config, @@ -1399,7 +1402,7 @@ static void rtl838x_mac_link_up(struct phylink_config *config, pr_debug("In %s\n", __func__); /* Restart TX/RX to port */ - sw_w32_mask(0, 0x03, priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0, 0x03, priv->r->mac_port_ctrl(priv->r->cpu_port)); } static void rtl838x_set_mac_hw(struct net_device *dev, u8 *mac) @@ -1536,9 +1539,9 @@ static int rtl83xx_set_features(struct net_device *dev, netdev_features_t featur if ((features ^ dev->features) & NETIF_F_RXCSUM) { if (!(features & NETIF_F_RXCSUM)) - sw_w32_mask(BIT(3), 0, priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(BIT(3), 0, priv->r->mac_port_ctrl(priv->r->cpu_port)); else - sw_w32_mask(0, BIT(3), priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0, BIT(3), priv->r->mac_port_ctrl(priv->r->cpu_port)); } return 0; @@ -1550,9 +1553,9 @@ static int rtl93xx_set_features(struct net_device *dev, netdev_features_t featur if ((features ^ dev->features) & NETIF_F_RXCSUM) { if (!(features & NETIF_F_RXCSUM)) - sw_w32_mask(BIT(4), 0, priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(BIT(4), 0, priv->r->mac_port_ctrl(priv->r->cpu_port)); else - sw_w32_mask(0, BIT(4), priv->r->mac_port_ctrl(priv->cpu_port)); + sw_w32_mask(0, BIT(4), priv->r->mac_port_ctrl(priv->r->cpu_port)); } return 0; @@ -1700,19 +1703,15 @@ static int __init rtl838x_eth_probe(struct platform_device *pdev) switch (priv->r->family_id) { case RTL8380_FAMILY_ID: - priv->cpu_port = RTL838X_CPU_PORT; dev->netdev_ops = &rtl838x_eth_netdev_ops; break; case RTL8390_FAMILY_ID: - priv->cpu_port = RTL839X_CPU_PORT; dev->netdev_ops = &rtl839x_eth_netdev_ops; break; case RTL9300_FAMILY_ID: - priv->cpu_port = RTL930X_CPU_PORT; dev->netdev_ops = &rtl930x_eth_netdev_ops; break; case RTL9310_FAMILY_ID: - priv->cpu_port = RTL931X_CPU_PORT; dev->netdev_ops = &rtl931x_eth_netdev_ops; rtl931x_chip_init(priv); break; diff --git a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h index 4fe5a9e990b..99f154f0eed 100644 --- a/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h +++ b/target/linux/realtek/files-6.12/drivers/net/ethernet/rtl838x_eth.h @@ -449,6 +449,7 @@ struct dsa_tag; struct rteth_config { int family_id; + int cpu_port; irqreturn_t (*net_irq)(int irq, void *dev_id); int (*mac_port_ctrl)(int port); int dma_if_intr_sts;