imx.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 net-next 0/3] net: fec: add some optimizations
@ 2025-07-11  9:16 Wei Fang
  2025-07-11  9:16 ` [PATCH v2 net-next 1/3] net: fec: use phy_interface_mode_is_rgmii() to check RGMII mode Wei Fang
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Wei Fang @ 2025-07-11  9:16 UTC (permalink / raw)
  To: shenwei.wang, xiaoning.wang, andrew+netdev, davem, edumazet, kuba,
	pabeni, maxime.chevallier
  Cc: netdev, linux-kernel, imx

Add some optimizations to the fec driver, see each patch for details.

---
v1 Link: https://lore.kernel.org/imx/20250710090902.1171180-1-wei.fang@nxp.com/
v2 changes:
1. Patch 3: Change the implementation of fec_set_hw_mac_addr() to make
it more readable.
2. Collect Reviewed-by tags.
---

Wei Fang (3):
  net: fec: use phy_interface_mode_is_rgmii() to check RGMII mode
  net: fec: add more macros for bits of FEC_ECR
  net: fec: add fec_set_hw_mac_addr() helper function

 drivers/net/ethernet/freescale/fec_main.c | 43 ++++++++++++-----------
 1 file changed, 22 insertions(+), 21 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 net-next 1/3] net: fec: use phy_interface_mode_is_rgmii() to check RGMII mode
  2025-07-11  9:16 [PATCH v2 net-next 0/3] net: fec: add some optimizations Wei Fang
@ 2025-07-11  9:16 ` Wei Fang
  2025-07-11  9:16 ` [PATCH v2 net-next 2/3] net: fec: add more macros for bits of FEC_ECR Wei Fang
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Wei Fang @ 2025-07-11  9:16 UTC (permalink / raw)
  To: shenwei.wang, xiaoning.wang, andrew+netdev, davem, edumazet, kuba,
	pabeni, maxime.chevallier
  Cc: netdev, linux-kernel, imx

Use the generic helper function phy_interface_mode_is_rgmii() to check
RGMII mode.

Signed-off-by: Wei Fang <wei.fang@nxp.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
 drivers/net/ethernet/freescale/fec_main.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index d4eed252ad40..f4f1f38d94eb 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -1194,10 +1194,7 @@ fec_restart(struct net_device *ndev)
 		rcntl |= 0x40000000 | 0x00000020;
 
 		/* RGMII, RMII or MII */
-		if (fep->phy_interface == PHY_INTERFACE_MODE_RGMII ||
-		    fep->phy_interface == PHY_INTERFACE_MODE_RGMII_ID ||
-		    fep->phy_interface == PHY_INTERFACE_MODE_RGMII_RXID ||
-		    fep->phy_interface == PHY_INTERFACE_MODE_RGMII_TXID)
+		if (phy_interface_mode_is_rgmii(fep->phy_interface))
 			rcntl |= (1 << 6);
 		else if (fep->phy_interface == PHY_INTERFACE_MODE_RMII)
 			rcntl |= FEC_RCR_RMII;
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 net-next 2/3] net: fec: add more macros for bits of FEC_ECR
  2025-07-11  9:16 [PATCH v2 net-next 0/3] net: fec: add some optimizations Wei Fang
  2025-07-11  9:16 ` [PATCH v2 net-next 1/3] net: fec: use phy_interface_mode_is_rgmii() to check RGMII mode Wei Fang
@ 2025-07-11  9:16 ` Wei Fang
  2025-07-11  9:16 ` [PATCH v2 net-next 3/3] net: fec: add fec_set_hw_mac_addr() helper function Wei Fang
  2025-07-15  0:30 ` [PATCH v2 net-next 0/3] net: fec: add some optimizations patchwork-bot+netdevbpf
  3 siblings, 0 replies; 6+ messages in thread
From: Wei Fang @ 2025-07-11  9:16 UTC (permalink / raw)
  To: shenwei.wang, xiaoning.wang, andrew+netdev, davem, edumazet, kuba,
	pabeni, maxime.chevallier
  Cc: netdev, linux-kernel, imx

There are also some RCR bits that are not defined but are used by the
driver, so add macro definitions for these bits to improve readability
and maintainability.

In addition, although FEC_RCR_HALFDPX has been defined, it is not used
in the driver. According to the description of FEC_RCR[1] in RM, it is
used to disable receive on transmit. Therefore, it is more appropriate
to redefine FEC_RCR[1] as FEC_RCR_DRT.

Signed-off-by: Wei Fang <wei.fang@nxp.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
 drivers/net/ethernet/freescale/fec_main.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index f4f1f38d94eb..00f8be4119ed 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -279,13 +279,15 @@ MODULE_PARM_DESC(macaddr, "FEC Ethernet MAC address");
 #define FEC_ECR_BYTESWP         BIT(8)
 /* FEC RCR bits definition */
 #define FEC_RCR_LOOP            BIT(0)
-#define FEC_RCR_HALFDPX         BIT(1)
+#define FEC_RCR_DRT		BIT(1)
 #define FEC_RCR_MII             BIT(2)
 #define FEC_RCR_PROMISC         BIT(3)
 #define FEC_RCR_BC_REJ          BIT(4)
 #define FEC_RCR_FLOWCTL         BIT(5)
+#define FEC_RCR_RGMII		BIT(6)
 #define FEC_RCR_RMII            BIT(8)
 #define FEC_RCR_10BASET         BIT(9)
+#define FEC_RCR_NLC		BIT(30)
 /* TX WMARK bits */
 #define FEC_TXWMRK_STRFWD       BIT(8)
 
@@ -1131,7 +1133,7 @@ fec_restart(struct net_device *ndev)
 {
 	struct fec_enet_private *fep = netdev_priv(ndev);
 	u32 temp_mac[2];
-	u32 rcntl = OPT_FRAME_SIZE | 0x04;
+	u32 rcntl = OPT_FRAME_SIZE | FEC_RCR_MII;
 	u32 ecntl = FEC_ECR_ETHEREN;
 
 	if (fep->bufdesc_ex)
@@ -1162,7 +1164,7 @@ fec_restart(struct net_device *ndev)
 		writel(0x04, fep->hwp + FEC_X_CNTRL);
 	} else {
 		/* No Rcv on Xmit */
-		rcntl |= 0x02;
+		rcntl |= FEC_RCR_DRT;
 		writel(0x0, fep->hwp + FEC_X_CNTRL);
 	}
 
@@ -1191,11 +1193,11 @@ fec_restart(struct net_device *ndev)
 	 */
 	if (fep->quirks & FEC_QUIRK_ENET_MAC) {
 		/* Enable flow control and length check */
-		rcntl |= 0x40000000 | 0x00000020;
+		rcntl |= FEC_RCR_NLC | FEC_RCR_FLOWCTL;
 
 		/* RGMII, RMII or MII */
 		if (phy_interface_mode_is_rgmii(fep->phy_interface))
-			rcntl |= (1 << 6);
+			rcntl |= FEC_RCR_RGMII;
 		else if (fep->phy_interface == PHY_INTERFACE_MODE_RMII)
 			rcntl |= FEC_RCR_RMII;
 		else
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 net-next 3/3] net: fec: add fec_set_hw_mac_addr() helper function
  2025-07-11  9:16 [PATCH v2 net-next 0/3] net: fec: add some optimizations Wei Fang
  2025-07-11  9:16 ` [PATCH v2 net-next 1/3] net: fec: use phy_interface_mode_is_rgmii() to check RGMII mode Wei Fang
  2025-07-11  9:16 ` [PATCH v2 net-next 2/3] net: fec: add more macros for bits of FEC_ECR Wei Fang
@ 2025-07-11  9:16 ` Wei Fang
  2025-07-12 16:32   ` Andrew Lunn
  2025-07-15  0:30 ` [PATCH v2 net-next 0/3] net: fec: add some optimizations patchwork-bot+netdevbpf
  3 siblings, 1 reply; 6+ messages in thread
From: Wei Fang @ 2025-07-11  9:16 UTC (permalink / raw)
  To: shenwei.wang, xiaoning.wang, andrew+netdev, davem, edumazet, kuba,
	pabeni, maxime.chevallier
  Cc: netdev, linux-kernel, imx

In the current driver, the MAC address is set in both fec_restart() and
fec_set_mac_address(), so a generic helper function fec_set_hw_mac_addr()
is added to set the hardware MAC address to make the code more compact.

Signed-off-by: Wei Fang <wei.fang@nxp.com>
---
 drivers/net/ethernet/freescale/fec_main.c | 26 ++++++++++++-----------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 00f8be4119ed..b481ee8ee478 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -1123,6 +1123,17 @@ static void fec_ctrl_reset(struct fec_enet_private *fep, bool allow_wol)
 	}
 }
 
+static void fec_set_hw_mac_addr(struct net_device *ndev)
+{
+	struct fec_enet_private *fep = netdev_priv(ndev);
+
+	writel(ndev->dev_addr[3] | (ndev->dev_addr[2] << 8) |
+	       (ndev->dev_addr[1] << 16) | (ndev->dev_addr[0] << 24),
+	       fep->hwp + FEC_ADDR_LOW);
+	writel((ndev->dev_addr[5] << 16) | (ndev->dev_addr[4] << 24),
+	       fep->hwp + FEC_ADDR_HIGH);
+}
+
 /*
  * This function is called to start or restart the FEC during a link
  * change, transmit timeout, or to reconfigure the FEC.  The network
@@ -1132,7 +1143,6 @@ static void
 fec_restart(struct net_device *ndev)
 {
 	struct fec_enet_private *fep = netdev_priv(ndev);
-	u32 temp_mac[2];
 	u32 rcntl = OPT_FRAME_SIZE | FEC_RCR_MII;
 	u32 ecntl = FEC_ECR_ETHEREN;
 
@@ -1145,11 +1155,7 @@ fec_restart(struct net_device *ndev)
 	 * enet-mac reset will reset mac address registers too,
 	 * so need to reconfigure it.
 	 */
-	memcpy(&temp_mac, ndev->dev_addr, ETH_ALEN);
-	writel((__force u32)cpu_to_be32(temp_mac[0]),
-	       fep->hwp + FEC_ADDR_LOW);
-	writel((__force u32)cpu_to_be32(temp_mac[1]),
-	       fep->hwp + FEC_ADDR_HIGH);
+	fec_set_hw_mac_addr(ndev);
 
 	/* Clear any outstanding interrupt, except MDIO. */
 	writel((0xffffffff & ~FEC_ENET_MII), fep->hwp + FEC_IEVENT);
@@ -3693,7 +3699,6 @@ static void set_multicast_list(struct net_device *ndev)
 static int
 fec_set_mac_address(struct net_device *ndev, void *p)
 {
-	struct fec_enet_private *fep = netdev_priv(ndev);
 	struct sockaddr *addr = p;
 
 	if (addr) {
@@ -3710,11 +3715,8 @@ fec_set_mac_address(struct net_device *ndev, void *p)
 	if (!netif_running(ndev))
 		return 0;
 
-	writel(ndev->dev_addr[3] | (ndev->dev_addr[2] << 8) |
-		(ndev->dev_addr[1] << 16) | (ndev->dev_addr[0] << 24),
-		fep->hwp + FEC_ADDR_LOW);
-	writel((ndev->dev_addr[5] << 16) | (ndev->dev_addr[4] << 24),
-		fep->hwp + FEC_ADDR_HIGH);
+	fec_set_hw_mac_addr(ndev);
+
 	return 0;
 }
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 net-next 3/3] net: fec: add fec_set_hw_mac_addr() helper function
  2025-07-11  9:16 ` [PATCH v2 net-next 3/3] net: fec: add fec_set_hw_mac_addr() helper function Wei Fang
@ 2025-07-12 16:32   ` Andrew Lunn
  0 siblings, 0 replies; 6+ messages in thread
From: Andrew Lunn @ 2025-07-12 16:32 UTC (permalink / raw)
  To: Wei Fang
  Cc: shenwei.wang, xiaoning.wang, andrew+netdev, davem, edumazet, kuba,
	pabeni, maxime.chevallier, netdev, linux-kernel, imx

On Fri, Jul 11, 2025 at 05:16:39PM +0800, Wei Fang wrote:
> In the current driver, the MAC address is set in both fec_restart() and
> fec_set_mac_address(), so a generic helper function fec_set_hw_mac_addr()
> is added to set the hardware MAC address to make the code more compact.
> 
> Signed-off-by: Wei Fang <wei.fang@nxp.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2 net-next 0/3] net: fec: add some optimizations
  2025-07-11  9:16 [PATCH v2 net-next 0/3] net: fec: add some optimizations Wei Fang
                   ` (2 preceding siblings ...)
  2025-07-11  9:16 ` [PATCH v2 net-next 3/3] net: fec: add fec_set_hw_mac_addr() helper function Wei Fang
@ 2025-07-15  0:30 ` patchwork-bot+netdevbpf
  3 siblings, 0 replies; 6+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-07-15  0:30 UTC (permalink / raw)
  To: Wei Fang
  Cc: shenwei.wang, xiaoning.wang, andrew+netdev, davem, edumazet, kuba,
	pabeni, maxime.chevallier, netdev, linux-kernel, imx

Hello:

This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Fri, 11 Jul 2025 17:16:36 +0800 you wrote:
> Add some optimizations to the fec driver, see each patch for details.
> 
> ---
> v1 Link: https://lore.kernel.org/imx/20250710090902.1171180-1-wei.fang@nxp.com/
> v2 changes:
> 1. Patch 3: Change the implementation of fec_set_hw_mac_addr() to make
> it more readable.
> 2. Collect Reviewed-by tags.
> 
> [...]

Here is the summary with links:
  - [v2,net-next,1/3] net: fec: use phy_interface_mode_is_rgmii() to check RGMII mode
    https://git.kernel.org/netdev/net-next/c/893bb0beed4d
  - [v2,net-next,2/3] net: fec: add more macros for bits of FEC_ECR
    https://git.kernel.org/netdev/net-next/c/2d33dc605815
  - [v2,net-next,3/3] net: fec: add fec_set_hw_mac_addr() helper function
    https://git.kernel.org/netdev/net-next/c/d39e1342d045

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-07-15  0:30 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-11  9:16 [PATCH v2 net-next 0/3] net: fec: add some optimizations Wei Fang
2025-07-11  9:16 ` [PATCH v2 net-next 1/3] net: fec: use phy_interface_mode_is_rgmii() to check RGMII mode Wei Fang
2025-07-11  9:16 ` [PATCH v2 net-next 2/3] net: fec: add more macros for bits of FEC_ECR Wei Fang
2025-07-11  9:16 ` [PATCH v2 net-next 3/3] net: fec: add fec_set_hw_mac_addr() helper function Wei Fang
2025-07-12 16:32   ` Andrew Lunn
2025-07-15  0:30 ` [PATCH v2 net-next 0/3] net: fec: add some optimizations patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).