* [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups
@ 2026-02-06 3:17 Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 01/15] net: ftgmac100: List all compatibles Jacky Chou
` (15 more replies)
0 siblings, 16 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
The probe function of the ftgmac100 is rather complex, due to the way
it has evolved over time, dealing with poor DT descriptions, and new
variants of the MAC.
Make use of DT match data to identify the MAC variant, rather than
looking at the compatible string all the time.
Make use of devm_ calls to simplify cleanup. This indirectly fixes
inconsistent goto label names.
Always probe the MDIO bus, when it exists. This simplifies the logic a
bit.
Move code into helpers to simply probe.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
Changes in v5:
- [8/15] Updated commit message.
- [8/15] Assigned priv->ndev to NULL when failed at ftgmac100_probe_ncsi()
- [9/15] Updated commit message.
- [9/15] Added a check for priv->mii_bus whether exists.
- Link to v4: https://lore.kernel.org/r/20260204-ftgmac-cleanup-v4-0-b7f379939b76@aspeedtech.com
Changes in v4:
- [08/15] Add err lable to ncsi_unregister_dev() or
fixed_phy_unregister() when getting any fail in ftgmac100_probe_ncsi()
- Link to v3: https://lore.kernel.org/r/20260202-ftgmac-cleanup-v3-0-6a6a8d45280a@aspeedtech.com
Changes in v3:
- [06/15] Add check for devm_clk_get_optional_enabled().
- [09/15] Directly return status from ftgmac100_setup_mdio(). That is
[13/15] patch behavior, so delete [13/15].
- [09/15] Adjust err lable.
- Add a new patch to make use of devm_ methods for mdiobus to simplify
cleanup.
- Link to v2: https://lore.kernel.org/r/20260116-ftgmac-cleanup-v2-0-81f41f01f2a8@aspeedtech.com
Changes in v2:
- Add net-next prefix.
- [08/15] Updated commit message.
- [04/15] Deleted {}.
- Link to v1: https://lore.kernel.org/r/20260105-ftgmac-cleanup-v1-0-b68e4a3d8fbe@aspeedtech.com
---
Andrew Lunn (14):
net: ftgmac100: List all compatibles
net: ftgmac100: Add match data containing MAC ID
net: ftgmac100: Replace all of_device_is_compatible()
net: ftgmac100: Use devm_alloc_etherdev()
net: ftgmac100: Use devm_request_memory_region/devm_ioremap
net: ftgmac100: Use devm_clk_get_enabled
net: ftgmac100: Simplify error handling for ftgmac100_initial_mac
net: ftgmac100: Move NCSI probe code into a helper
net: ftgmac100: Always register the MDIO bus when it exists
net: ftgmac100: Simplify legacy MDIO setup
net: ftgmac100: Move DT probe into a helper
net: ftgmac100: Remove redundant PHY_POLL
net: ftgmac100: Simplify condition on HW arbitration
net: ftgmac100: Fix wrong netif_napi_del in release
Jacky Chou (1):
net: ftgmac100: Use devm_mdiobus_alloc/devm_of_mdiobus_register
drivers/net/ethernet/faraday/ftgmac100.c | 356 +++++++++++++++++--------------
1 file changed, 194 insertions(+), 162 deletions(-)
---
base-commit: 24cf78c738318f3d2b961a1ab4b3faf1eca860d7
change-id: 20251208-ftgmac-cleanup-20b223bf4681
Best regards,
--
Jacky Chou <jacky_chou@aspeedtech.com>
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH net-next v5 01/15] net: ftgmac100: List all compatibles
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 02/15] net: ftgmac100: Add match data containing MAC ID Jacky Chou
` (14 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
As a step towards cleanup the probe function, list each compatible the
driver supports.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index a863f7841210..bd768a93b9e6 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -2091,6 +2091,9 @@ static void ftgmac100_remove(struct platform_device *pdev)
}
static const struct of_device_id ftgmac100_of_match[] = {
+ { .compatible = "aspeed,ast2400-mac" },
+ { .compatible = "aspeed,ast2500-mac" },
+ { .compatible = "aspeed,ast2600-mac" },
{ .compatible = "faraday,ftgmac100" },
{ }
};
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 02/15] net: ftgmac100: Add match data containing MAC ID
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 01/15] net: ftgmac100: List all compatibles Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 03/15] net: ftgmac100: Replace all of_device_is_compatible() Jacky Chou
` (13 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
The driver supports 4 different versions of the FTGMAC core. Extend
the compatible matching to include match data, which indicates the
version of the MAC. Default to the initial Faraday device if DT is not
being used. Lookup the match data early in probe to keep error handing
simple.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 55 +++++++++++++++++++++++++++++---
1 file changed, 50 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index bd768a93b9e6..104eb7b1f5bb 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -33,6 +33,17 @@
#define DRV_NAME "ftgmac100"
+enum ftgmac100_mac_id {
+ FTGMAC100_FARADAY = 1,
+ FTGMAC100_AST2400,
+ FTGMAC100_AST2500,
+ FTGMAC100_AST2600
+};
+
+struct ftgmac100_match_data {
+ enum ftgmac100_mac_id mac_id;
+};
+
/* Arbitrary values, I am not sure the HW has limits */
#define MAX_RX_QUEUE_ENTRIES 1024
#define MAX_TX_QUEUE_ENTRIES 1024
@@ -66,6 +77,8 @@ struct ftgmac100 {
struct resource *res;
void __iomem *base;
+ enum ftgmac100_mac_id mac_id;
+
/* Rx ring */
unsigned int rx_q_entries;
struct ftgmac100_rxdes *rxdes;
@@ -1835,6 +1848,8 @@ static bool ftgmac100_has_child_node(struct device_node *np, const char *name)
static int ftgmac100_probe(struct platform_device *pdev)
{
+ const struct ftgmac100_match_data *match_data;
+ enum ftgmac100_mac_id mac_id;
struct resource *res;
int irq;
struct net_device *netdev;
@@ -1843,6 +1858,16 @@ static int ftgmac100_probe(struct platform_device *pdev)
struct device_node *np;
int err = 0;
+ np = pdev->dev.of_node;
+ if (np) {
+ match_data = of_device_get_match_data(&pdev->dev);
+ if (!match_data)
+ return -EINVAL;
+ mac_id = match_data->mac_id;
+ } else {
+ mac_id = FTGMAC100_FARADAY;
+ }
+
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res)
return -ENXIO;
@@ -1870,6 +1895,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
priv = netdev_priv(netdev);
priv->netdev = netdev;
priv->dev = &pdev->dev;
+ priv->mac_id = mac_id;
INIT_WORK(&priv->reset_task, ftgmac100_reset_task);
/* map io memory */
@@ -1900,7 +1926,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
if (err)
goto err_phy_connect;
- np = pdev->dev.of_node;
if (np && (of_device_is_compatible(np, "aspeed,ast2400-mac") ||
of_device_is_compatible(np, "aspeed,ast2500-mac") ||
of_device_is_compatible(np, "aspeed,ast2600-mac"))) {
@@ -2090,11 +2115,31 @@ static void ftgmac100_remove(struct platform_device *pdev)
free_netdev(netdev);
}
+static const struct ftgmac100_match_data ftgmac100_match_data_ast2400 = {
+ .mac_id = FTGMAC100_AST2400
+};
+
+static const struct ftgmac100_match_data ftgmac100_match_data_ast2500 = {
+ .mac_id = FTGMAC100_AST2500
+};
+
+static const struct ftgmac100_match_data ftgmac100_match_data_ast2600 = {
+ .mac_id = FTGMAC100_AST2600
+};
+
+static const struct ftgmac100_match_data ftgmac100_match_data_faraday = {
+ .mac_id = FTGMAC100_FARADAY
+};
+
static const struct of_device_id ftgmac100_of_match[] = {
- { .compatible = "aspeed,ast2400-mac" },
- { .compatible = "aspeed,ast2500-mac" },
- { .compatible = "aspeed,ast2600-mac" },
- { .compatible = "faraday,ftgmac100" },
+ { .compatible = "aspeed,ast2400-mac",
+ .data = &ftgmac100_match_data_ast2400},
+ { .compatible = "aspeed,ast2500-mac",
+ .data = &ftgmac100_match_data_ast2500 },
+ { .compatible = "aspeed,ast2600-mac",
+ .data = &ftgmac100_match_data_ast2600 },
+ { .compatible = "faraday,ftgmac100",
+ .data = &ftgmac100_match_data_faraday },
{ }
};
MODULE_DEVICE_TABLE(of, ftgmac100_of_match);
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 03/15] net: ftgmac100: Replace all of_device_is_compatible()
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 01/15] net: ftgmac100: List all compatibles Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 02/15] net: ftgmac100: Add match data containing MAC ID Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 04/15] net: ftgmac100: Use devm_alloc_etherdev() Jacky Chou
` (12 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
Now that the priv structure includes the MAC ID, make use of it
instead of the more expensive of_device_is_compatible().
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index 104eb7b1f5bb..f07167cabf39 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1720,8 +1720,8 @@ static int ftgmac100_setup_mdio(struct net_device *netdev)
if (!priv->mii_bus)
return -EIO;
- if (of_device_is_compatible(np, "aspeed,ast2400-mac") ||
- of_device_is_compatible(np, "aspeed,ast2500-mac")) {
+ if (priv->mac_id == FTGMAC100_AST2400 ||
+ priv->mac_id == FTGMAC100_AST2500) {
/* The AST2600 has a separate MDIO controller */
/* For the AST2400 and AST2500 this driver only supports the
@@ -1926,9 +1926,9 @@ static int ftgmac100_probe(struct platform_device *pdev)
if (err)
goto err_phy_connect;
- if (np && (of_device_is_compatible(np, "aspeed,ast2400-mac") ||
- of_device_is_compatible(np, "aspeed,ast2500-mac") ||
- of_device_is_compatible(np, "aspeed,ast2600-mac"))) {
+ if (priv->mac_id == FTGMAC100_AST2400 ||
+ priv->mac_id == FTGMAC100_AST2500 ||
+ priv->mac_id == FTGMAC100_AST2600) {
priv->rxdes0_edorr_mask = BIT(30);
priv->txdes0_edotr_mask = BIT(30);
priv->is_aspeed = true;
@@ -1973,8 +1973,8 @@ static int ftgmac100_probe(struct platform_device *pdev)
* available PHYs and register them.
*/
if (of_get_property(np, "phy-handle", NULL) &&
- (of_device_is_compatible(np, "aspeed,ast2400-mac") ||
- of_device_is_compatible(np, "aspeed,ast2500-mac"))) {
+ (priv->mac_id == FTGMAC100_AST2400 ||
+ priv->mac_id == FTGMAC100_AST2500)) {
err = ftgmac100_setup_mdio(netdev);
if (err)
goto err_setup_mdio;
@@ -2026,7 +2026,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
goto err_phy_connect;
/* Disable ast2600 problematic HW arbitration */
- if (of_device_is_compatible(np, "aspeed,ast2600-mac"))
+ if (priv->mac_id == FTGMAC100_AST2600)
iowrite32(FTGMAC100_TM_DEFAULT,
priv->base + FTGMAC100_OFFSET_TM);
}
@@ -2044,11 +2044,11 @@ static int ftgmac100_probe(struct platform_device *pdev)
netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_FILTER;
/* AST2400 doesn't have working HW checksum generation */
- if (np && (of_device_is_compatible(np, "aspeed,ast2400-mac")))
+ if (priv->mac_id == FTGMAC100_AST2400)
netdev->hw_features &= ~NETIF_F_HW_CSUM;
/* AST2600 tx checksum with NCSI is broken */
- if (priv->use_ncsi && of_device_is_compatible(np, "aspeed,ast2600-mac"))
+ if (priv->use_ncsi && priv->mac_id == FTGMAC100_AST2600)
netdev->hw_features &= ~NETIF_F_HW_CSUM;
if (np && of_get_property(np, "no-hw-checksum", NULL))
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 04/15] net: ftgmac100: Use devm_alloc_etherdev()
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (2 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 03/15] net: ftgmac100: Replace all of_device_is_compatible() Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 05/15] net: ftgmac100: Use devm_request_memory_region/devm_ioremap Jacky Chou
` (11 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
Make use of devm_alloc_etherdev() to simplify cleanup.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index f07167cabf39..397ada43c851 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1877,11 +1877,9 @@ static int ftgmac100_probe(struct platform_device *pdev)
return irq;
/* setup net_device */
- netdev = alloc_etherdev(sizeof(*priv));
- if (!netdev) {
- err = -ENOMEM;
- goto err_alloc_etherdev;
- }
+ netdev = devm_alloc_etherdev(&pdev->dev, sizeof(*priv));
+ if (!netdev)
+ return -ENOMEM;
SET_NETDEV_DEV(netdev, &pdev->dev);
@@ -2080,8 +2078,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
err_ioremap:
release_resource(priv->res);
err_req_mem:
- free_netdev(netdev);
-err_alloc_etherdev:
return err;
}
@@ -2112,7 +2108,6 @@ static void ftgmac100_remove(struct platform_device *pdev)
release_resource(priv->res);
netif_napi_del(&priv->napi);
- free_netdev(netdev);
}
static const struct ftgmac100_match_data ftgmac100_match_data_ast2400 = {
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 05/15] net: ftgmac100: Use devm_request_memory_region/devm_ioremap
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (3 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 04/15] net: ftgmac100: Use devm_alloc_etherdev() Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 06/15] net: ftgmac100: Use devm_clk_get_enabled Jacky Chou
` (10 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
Make use of devm_ methods to request and remap the device memory to
simplify cleanup.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 20 ++++++--------------
1 file changed, 6 insertions(+), 14 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index 397ada43c851..ec2e7ec23ddf 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1897,19 +1897,18 @@ static int ftgmac100_probe(struct platform_device *pdev)
INIT_WORK(&priv->reset_task, ftgmac100_reset_task);
/* map io memory */
- priv->res = request_mem_region(res->start, resource_size(res),
- dev_name(&pdev->dev));
+ priv->res = devm_request_mem_region(&pdev->dev,
+ res->start, resource_size(res),
+ dev_name(&pdev->dev));
if (!priv->res) {
dev_err(&pdev->dev, "Could not reserve memory region\n");
- err = -ENOMEM;
- goto err_req_mem;
+ return -ENOMEM;
}
- priv->base = ioremap(res->start, resource_size(res));
+ priv->base = devm_ioremap(&pdev->dev, res->start, resource_size(res));
if (!priv->base) {
dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
- err = -EIO;
- goto err_ioremap;
+ return -EIO;
}
netdev->irq = irq;
@@ -2074,10 +2073,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
ncsi_unregister_dev(priv->ndev);
ftgmac100_destroy_mdio(netdev);
err_setup_mdio:
- iounmap(priv->base);
-err_ioremap:
- release_resource(priv->res);
-err_req_mem:
return err;
}
@@ -2104,9 +2099,6 @@ static void ftgmac100_remove(struct platform_device *pdev)
ftgmac100_phy_disconnect(netdev);
ftgmac100_destroy_mdio(netdev);
- iounmap(priv->base);
- release_resource(priv->res);
-
netif_napi_del(&priv->napi);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 06/15] net: ftgmac100: Use devm_clk_get_enabled
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (4 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 05/15] net: ftgmac100: Use devm_request_memory_region/devm_ioremap Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 07/15] net: ftgmac100: Simplify error handling for ftgmac100_initial_mac Jacky Chou
` (9 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
Make use of devm_ methods to request and enable clocks to simplify
cleanup.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 24 ++++++------------------
1 file changed, 6 insertions(+), 18 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index ec2e7ec23ddf..1fb03dd55c8f 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1801,13 +1801,10 @@ static int ftgmac100_setup_clk(struct ftgmac100 *priv)
struct clk *clk;
int rc;
- clk = devm_clk_get(priv->dev, NULL /* MACCLK */);
+ clk = devm_clk_get_enabled(priv->dev, NULL /* MACCLK */);
if (IS_ERR(clk))
return PTR_ERR(clk);
priv->clk = clk;
- rc = clk_prepare_enable(priv->clk);
- if (rc)
- return rc;
/* Aspeed specifies a 100MHz clock is required for up to
* 1000Mbit link speeds. As NCSI is limited to 100Mbit, 25MHz
@@ -1816,21 +1813,17 @@ static int ftgmac100_setup_clk(struct ftgmac100 *priv)
rc = clk_set_rate(priv->clk, priv->use_ncsi ? FTGMAC_25MHZ :
FTGMAC_100MHZ);
if (rc)
- goto cleanup_clk;
+ return rc;
/* RCLK is for RMII, typically used for NCSI. Optional because it's not
* necessary if it's the AST2400 MAC, or the MAC is configured for
* RGMII, or the controller is not an ASPEED-based controller.
*/
- priv->rclk = devm_clk_get_optional(priv->dev, "RCLK");
- rc = clk_prepare_enable(priv->rclk);
- if (!rc)
- return 0;
+ priv->rclk = devm_clk_get_optional_enabled(priv->dev, "RCLK");
+ if (IS_ERR(priv->rclk))
+ return PTR_ERR(priv->rclk);
-cleanup_clk:
- clk_disable_unprepare(priv->clk);
-
- return rc;
+ return 0;
}
static bool ftgmac100_has_child_node(struct device_node *np, const char *name)
@@ -2064,8 +2057,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
return 0;
err_register_netdev:
- clk_disable_unprepare(priv->rclk);
- clk_disable_unprepare(priv->clk);
err_phy_connect:
ftgmac100_phy_disconnect(netdev);
err_ncsi_dev:
@@ -2088,9 +2079,6 @@ static void ftgmac100_remove(struct platform_device *pdev)
ncsi_unregister_dev(priv->ndev);
unregister_netdev(netdev);
- clk_disable_unprepare(priv->rclk);
- clk_disable_unprepare(priv->clk);
-
/* There's a small chance the reset task will have been re-queued,
* during stop, make sure it's gone before we free the structure.
*/
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 07/15] net: ftgmac100: Simplify error handling for ftgmac100_initial_mac
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (5 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 06/15] net: ftgmac100: Use devm_clk_get_enabled Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 08/15] net: ftgmac100: Move NCSI probe code into a helper Jacky Chou
` (8 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
ftgmac100_initial_mac() does not allocate any resources. All resources
by the probe function up until this call point use devm_ methods. So
just return the error code rather than use a goto.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index 1fb03dd55c8f..e511d6d5f7c2 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1914,7 +1914,7 @@ static int ftgmac100_probe(struct platform_device *pdev)
/* MAC address from chip or random one */
err = ftgmac100_initial_mac(priv);
if (err)
- goto err_phy_connect;
+ return err;
if (priv->mac_id == FTGMAC100_AST2400 ||
priv->mac_id == FTGMAC100_AST2500 ||
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 08/15] net: ftgmac100: Move NCSI probe code into a helper
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (6 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 07/15] net: ftgmac100: Simplify error handling for ftgmac100_initial_mac Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 09/15] net: ftgmac100: Always register the MDIO bus when it exists Jacky Chou
` (7 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
To help reduce the complexity of the probe function, move the NCSI
probe code into a helper.
The refactoring results in improved cleanup of the fixed PHY in
error paths.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 72 ++++++++++++++++++++------------
1 file changed, 45 insertions(+), 27 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index e511d6d5f7c2..c9d25b9e6502 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1839,6 +1839,48 @@ static bool ftgmac100_has_child_node(struct device_node *np, const char *name)
return ret;
}
+static int ftgmac100_probe_ncsi(struct net_device *netdev,
+ struct ftgmac100 *priv,
+ struct platform_device *pdev)
+{
+ struct device_node *np = pdev->dev.of_node;
+ struct phy_device *phydev;
+ int err;
+
+ if (!IS_ENABLED(CONFIG_NET_NCSI)) {
+ dev_err(&pdev->dev, "NCSI stack not enabled\n");
+ return -EINVAL;
+ }
+
+ dev_info(&pdev->dev, "Using NCSI interface\n");
+ priv->use_ncsi = true;
+ priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
+ if (!priv->ndev)
+ return -EINVAL;
+
+ phydev = fixed_phy_register(&ncsi_phy_status, np);
+ if (IS_ERR(phydev)) {
+ dev_err(&pdev->dev, "failed to register fixed PHY device\n");
+ err = PTR_ERR(phydev);
+ goto err_register_ndev;
+ }
+ err = phy_connect_direct(netdev, phydev, ftgmac100_adjust_link,
+ PHY_INTERFACE_MODE_RMII);
+ if (err) {
+ dev_err(&pdev->dev, "Connecting PHY failed\n");
+ goto err_register_phy;
+ }
+
+ return 0;
+err_register_phy:
+ fixed_phy_unregister(phydev);
+err_register_ndev:
+ if (priv->ndev)
+ ncsi_unregister_dev(priv->ndev);
+ priv->ndev = NULL;
+ return err;
+}
+
static int ftgmac100_probe(struct platform_device *pdev)
{
const struct ftgmac100_match_data *match_data;
@@ -1846,7 +1888,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
struct resource *res;
int irq;
struct net_device *netdev;
- struct phy_device *phydev;
struct ftgmac100 *priv;
struct device_node *np;
int err = 0;
@@ -1928,32 +1969,9 @@ static int ftgmac100_probe(struct platform_device *pdev)
}
if (np && of_get_property(np, "use-ncsi", NULL)) {
- if (!IS_ENABLED(CONFIG_NET_NCSI)) {
- dev_err(&pdev->dev, "NCSI stack not enabled\n");
- err = -EINVAL;
- goto err_phy_connect;
- }
-
- dev_info(&pdev->dev, "Using NCSI interface\n");
- priv->use_ncsi = true;
- priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
- if (!priv->ndev) {
- err = -EINVAL;
- goto err_phy_connect;
- }
-
- phydev = fixed_phy_register(&ncsi_phy_status, np);
- if (IS_ERR(phydev)) {
- dev_err(&pdev->dev, "failed to register fixed PHY device\n");
- err = PTR_ERR(phydev);
- goto err_phy_connect;
- }
- err = phy_connect_direct(netdev, phydev, ftgmac100_adjust_link,
- PHY_INTERFACE_MODE_RMII);
- if (err) {
- dev_err(&pdev->dev, "Connecting PHY failed\n");
- goto err_phy_connect;
- }
+ err = ftgmac100_probe_ncsi(netdev, priv, pdev);
+ if (err)
+ goto err_setup_mdio;
} else if (np && (of_phy_is_fixed_link(np) ||
of_get_property(np, "phy-handle", NULL))) {
struct phy_device *phy;
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 09/15] net: ftgmac100: Always register the MDIO bus when it exists
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (7 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 08/15] net: ftgmac100: Move NCSI probe code into a helper Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 10/15] net: ftgmac100: Simplify legacy MDIO setup Jacky Chou
` (6 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
Both the Aspeed 2400 and 2500 and the original faraday version of the
MAC have MDIO bus controllers as part of the MAC. Since it exists,
always registering it makes the code simpler, and causes no harm. If
there is no mdio node in device tree, of_mdiobus_register() will fall
back to mdiobus_register(), making it safe.
AST2600 uses an external MDIO controller and does not have an embedded
MDIO bus in the MAC. For such configurations, the legacy MII probe path
must not be entered without a registered mii_bus.
Add an explicit check to fail gracefully when no MDIO bus is present,
preventing a NULL pointer dereference while keeping the intended
behavior for platforms without embedded MDIO.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 45 ++++++++++++++------------------
1 file changed, 20 insertions(+), 25 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index c9d25b9e6502..c33726e7bff6 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1483,6 +1483,11 @@ static int ftgmac100_mii_probe(struct net_device *netdev)
phy_interface_t phy_intf;
int err;
+ if (!priv->mii_bus) {
+ dev_err(priv->dev, "No MDIO bus available\n");
+ return -ENODEV;
+ }
+
/* Default to RGMII. It's a gigabit part after all */
err = of_get_phy_mode(np, &phy_intf);
if (err)
@@ -1968,32 +1973,28 @@ static int ftgmac100_probe(struct platform_device *pdev)
priv->txdes0_edotr_mask = BIT(15);
}
+ if (priv->mac_id == FTGMAC100_FARADAY ||
+ priv->mac_id == FTGMAC100_AST2400 ||
+ priv->mac_id == FTGMAC100_AST2500) {
+ err = ftgmac100_setup_mdio(netdev);
+ if (err)
+ return err;
+ }
+
if (np && of_get_property(np, "use-ncsi", NULL)) {
err = ftgmac100_probe_ncsi(netdev, priv, pdev);
if (err)
- goto err_setup_mdio;
+ goto err;
} else if (np && (of_phy_is_fixed_link(np) ||
of_get_property(np, "phy-handle", NULL))) {
struct phy_device *phy;
- /* Support "mdio"/"phy" child nodes for ast2400/2500 with
- * an embedded MDIO controller. Automatically scan the DTS for
- * available PHYs and register them.
- */
- if (of_get_property(np, "phy-handle", NULL) &&
- (priv->mac_id == FTGMAC100_AST2400 ||
- priv->mac_id == FTGMAC100_AST2500)) {
- err = ftgmac100_setup_mdio(netdev);
- if (err)
- goto err_setup_mdio;
- }
-
phy = of_phy_get_and_connect(priv->netdev, np,
&ftgmac100_adjust_link);
if (!phy) {
dev_err(&pdev->dev, "Failed to connect to phy\n");
err = -EINVAL;
- goto err_phy_connect;
+ goto err;
}
/* Indicate that we support PAUSE frames (see comment in
@@ -2010,14 +2011,11 @@ static int ftgmac100_probe(struct platform_device *pdev)
* PHYs.
*/
priv->use_ncsi = false;
- err = ftgmac100_setup_mdio(netdev);
- if (err)
- goto err_setup_mdio;
err = ftgmac100_mii_probe(netdev);
if (err) {
dev_err(priv->dev, "MII probe failed!\n");
- goto err_ncsi_dev;
+ goto err;
}
}
@@ -2025,13 +2023,13 @@ static int ftgmac100_probe(struct platform_device *pdev)
priv->rst = devm_reset_control_get_optional_exclusive(priv->dev, NULL);
if (IS_ERR(priv->rst)) {
err = PTR_ERR(priv->rst);
- goto err_phy_connect;
+ goto err;
}
if (priv->is_aspeed) {
err = ftgmac100_setup_clk(priv);
if (err)
- goto err_phy_connect;
+ goto err;
/* Disable ast2600 problematic HW arbitration */
if (priv->mac_id == FTGMAC100_AST2600)
@@ -2067,21 +2065,18 @@ static int ftgmac100_probe(struct platform_device *pdev)
err = register_netdev(netdev);
if (err) {
dev_err(&pdev->dev, "Failed to register netdev\n");
- goto err_register_netdev;
+ goto err;
}
netdev_info(netdev, "irq %d, mapped at %p\n", netdev->irq, priv->base);
return 0;
-err_register_netdev:
-err_phy_connect:
+err:
ftgmac100_phy_disconnect(netdev);
-err_ncsi_dev:
if (priv->ndev)
ncsi_unregister_dev(priv->ndev);
ftgmac100_destroy_mdio(netdev);
-err_setup_mdio:
return err;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 10/15] net: ftgmac100: Simplify legacy MDIO setup
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (8 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 09/15] net: ftgmac100: Always register the MDIO bus when it exists Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 11/15] net: ftgmac100: Move DT probe into a helper Jacky Chou
` (5 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
There are old device trees which place the PHY nodes directly in the
MAC nodes, rather than within an MDIO container node.
The probe logic indicates that the use of NCSI and the legacy
placement of PHYs is mutually exclusive. Hence priv->use_ncsi cannot
be true, so there is no reason to set it false.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index c33726e7bff6..ee886ed03587 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -2010,8 +2010,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
* child node. Automatically scan the MDIO bus for available
* PHYs.
*/
- priv->use_ncsi = false;
-
err = ftgmac100_mii_probe(netdev);
if (err) {
dev_err(priv->dev, "MII probe failed!\n");
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 11/15] net: ftgmac100: Move DT probe into a helper
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (9 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 10/15] net: ftgmac100: Simplify legacy MDIO setup Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 12/15] net: ftgmac100: Remove redundant PHY_POLL Jacky Chou
` (4 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
By moving all the DT probe code into a helper, the complex if else if
else structure can be simplified. No functional change intended.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 87 ++++++++++++++++++++------------
1 file changed, 54 insertions(+), 33 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index ee886ed03587..ad1203b8de0b 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1886,6 +1886,58 @@ static int ftgmac100_probe_ncsi(struct net_device *netdev,
return err;
}
+static int ftgmac100_probe_dt(struct net_device *netdev,
+ struct platform_device *pdev,
+ struct ftgmac100 *priv,
+ struct device_node *np)
+{
+ struct phy_device *phy;
+ int err;
+
+ if (of_get_property(np, "use-ncsi", NULL))
+ return ftgmac100_probe_ncsi(netdev, priv, pdev);
+
+ if (of_phy_is_fixed_link(np) ||
+ of_get_property(np, "phy-handle", NULL)) {
+ /* Support "mdio"/"phy" child nodes for ast2400/2500
+ * with an embedded MDIO controller. Automatically
+ * scan the DTS for available PHYs and register
+ * them. 2600 has an independent MDIO controller, not
+ * part of the MAC.
+ */
+ phy = of_phy_get_and_connect(priv->netdev, np,
+ &ftgmac100_adjust_link);
+ if (!phy) {
+ dev_err(&pdev->dev, "Failed to connect to phy\n");
+ return -EINVAL;
+ }
+
+ /* Indicate that we support PAUSE frames (see comment in
+ * Documentation/networking/phy.rst)
+ */
+ phy_support_asym_pause(phy);
+
+ /* Display what we found */
+ phy_attached_info(phy);
+ return 0;
+ }
+
+ if (!ftgmac100_has_child_node(np, "mdio")) {
+ /* Support legacy ASPEED devicetree descriptions that
+ * decribe a MAC with an embedded MDIO controller but
+ * have no "mdio" child node. Automatically scan the
+ * MDIO bus for available PHYs.
+ */
+ err = ftgmac100_mii_probe(netdev);
+ if (err) {
+ dev_err(priv->dev, "MII probe failed!\n");
+ return err;
+ }
+ }
+
+ return 0;
+}
+
static int ftgmac100_probe(struct platform_device *pdev)
{
const struct ftgmac100_match_data *match_data;
@@ -1981,41 +2033,10 @@ static int ftgmac100_probe(struct platform_device *pdev)
return err;
}
- if (np && of_get_property(np, "use-ncsi", NULL)) {
- err = ftgmac100_probe_ncsi(netdev, priv, pdev);
+ if (np) {
+ err = ftgmac100_probe_dt(netdev, pdev, priv, np);
if (err)
goto err;
- } else if (np && (of_phy_is_fixed_link(np) ||
- of_get_property(np, "phy-handle", NULL))) {
- struct phy_device *phy;
-
- phy = of_phy_get_and_connect(priv->netdev, np,
- &ftgmac100_adjust_link);
- if (!phy) {
- dev_err(&pdev->dev, "Failed to connect to phy\n");
- err = -EINVAL;
- goto err;
- }
-
- /* Indicate that we support PAUSE frames (see comment in
- * Documentation/networking/phy.rst)
- */
- phy_support_asym_pause(phy);
-
- /* Display what we found */
- phy_attached_info(phy);
- } else if (np && !ftgmac100_has_child_node(np, "mdio")) {
- /* Support legacy ASPEED devicetree descriptions that decribe a
- * MAC with an embedded MDIO controller but have no "mdio"
- * child node. Automatically scan the MDIO bus for available
- * PHYs.
- */
- err = ftgmac100_mii_probe(netdev);
- if (err) {
- dev_err(priv->dev, "MII probe failed!\n");
- goto err;
- }
-
}
priv->rst = devm_reset_control_get_optional_exclusive(priv->dev, NULL);
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 12/15] net: ftgmac100: Remove redundant PHY_POLL
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (10 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 11/15] net: ftgmac100: Move DT probe into a helper Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 13/15] net: ftgmac100: Simplify condition on HW arbitration Jacky Chou
` (3 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
When an MDIO bus is allocated, the irqs for each PHY are set to
polling. Remove the redundant code in the MAC driver which does the
same.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index ad1203b8de0b..b86e47853217 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1717,7 +1717,7 @@ static int ftgmac100_setup_mdio(struct net_device *netdev)
struct platform_device *pdev = to_platform_device(priv->dev);
struct device_node *np = pdev->dev.of_node;
struct device_node *mdio_np;
- int i, err = 0;
+ int err = 0;
u32 reg;
/* initialize mdio bus */
@@ -1745,9 +1745,6 @@ static int ftgmac100_setup_mdio(struct net_device *netdev)
priv->mii_bus->read = ftgmac100_mdiobus_read;
priv->mii_bus->write = ftgmac100_mdiobus_write;
- for (i = 0; i < PHY_MAX_ADDR; i++)
- priv->mii_bus->irq[i] = PHY_POLL;
-
mdio_np = of_get_child_by_name(np, "mdio");
err = of_mdiobus_register(priv->mii_bus, mdio_np);
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 13/15] net: ftgmac100: Simplify condition on HW arbitration
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (11 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 12/15] net: ftgmac100: Remove redundant PHY_POLL Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 14/15] net: ftgmac100: Fix wrong netif_napi_del in release Jacky Chou
` (2 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
The MAC ID is sufficient to indicate this is a ast2600.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index b86e47853217..410c5ab82516 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -2046,13 +2046,13 @@ static int ftgmac100_probe(struct platform_device *pdev)
err = ftgmac100_setup_clk(priv);
if (err)
goto err;
-
- /* Disable ast2600 problematic HW arbitration */
- if (priv->mac_id == FTGMAC100_AST2600)
- iowrite32(FTGMAC100_TM_DEFAULT,
- priv->base + FTGMAC100_OFFSET_TM);
}
+ /* Disable ast2600 problematic HW arbitration */
+ if (priv->mac_id == FTGMAC100_AST2600)
+ iowrite32(FTGMAC100_TM_DEFAULT,
+ priv->base + FTGMAC100_OFFSET_TM);
+
/* Default ring sizes */
priv->rx_q_entries = priv->new_rx_q_entries = DEF_RX_QUEUE_ENTRIES;
priv->tx_q_entries = priv->new_tx_q_entries = DEF_TX_QUEUE_ENTRIES;
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 14/15] net: ftgmac100: Fix wrong netif_napi_del in release
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (12 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 13/15] net: ftgmac100: Simplify condition on HW arbitration Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 15/15] net: ftgmac100: Use devm_mdiobus_alloc/devm_of_mdiobus_register Jacky Chou
2026-02-10 12:50 ` [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups patchwork-bot+netdevbpf
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou, Simon Horman
From: Andrew Lunn <andrew@lunn.ch>
netif_napi_add() is called in open. There is a symmetric call to
netif_napi_del() in stop. Remove to wrong call to netif_napi_del() in
release.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index 410c5ab82516..e3b69451d436 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -2115,8 +2115,6 @@ static void ftgmac100_remove(struct platform_device *pdev)
ftgmac100_phy_disconnect(netdev);
ftgmac100_destroy_mdio(netdev);
-
- netif_napi_del(&priv->napi);
}
static const struct ftgmac100_match_data ftgmac100_match_data_ast2400 = {
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH net-next v5 15/15] net: ftgmac100: Use devm_mdiobus_alloc/devm_of_mdiobus_register
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (13 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 14/15] net: ftgmac100: Fix wrong netif_napi_del in release Jacky Chou
@ 2026-02-06 3:17 ` Jacky Chou
2026-02-10 12:50 ` [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups patchwork-bot+netdevbpf
15 siblings, 0 replies; 17+ messages in thread
From: Jacky Chou @ 2026-02-06 3:17 UTC (permalink / raw)
To: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni
Cc: netdev, linux-kernel, Andrew Lunn, Jacky Chou
Make use of devm_ methods to allocate and register mdiobus to simplify
cleanup.
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
---
drivers/net/ethernet/faraday/ftgmac100.c | 26 ++++----------------------
1 file changed, 4 insertions(+), 22 deletions(-)
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index e3b69451d436..1e91e79c8134 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1721,7 +1721,7 @@ static int ftgmac100_setup_mdio(struct net_device *netdev)
u32 reg;
/* initialize mdio bus */
- priv->mii_bus = mdiobus_alloc();
+ priv->mii_bus = devm_mdiobus_alloc(priv->dev);
if (!priv->mii_bus)
return -EIO;
@@ -1747,19 +1747,14 @@ static int ftgmac100_setup_mdio(struct net_device *netdev)
mdio_np = of_get_child_by_name(np, "mdio");
- err = of_mdiobus_register(priv->mii_bus, mdio_np);
+ err = devm_of_mdiobus_register(priv->dev, priv->mii_bus, mdio_np);
+ of_node_put(mdio_np);
if (err) {
dev_err(priv->dev, "Cannot register MDIO bus!\n");
- goto err_register_mdiobus;
+ return err;
}
- of_node_put(mdio_np);
-
return 0;
-
-err_register_mdiobus:
- mdiobus_free(priv->mii_bus);
- return err;
}
static void ftgmac100_phy_disconnect(struct net_device *netdev)
@@ -1778,17 +1773,6 @@ static void ftgmac100_phy_disconnect(struct net_device *netdev)
fixed_phy_unregister(phydev);
}
-static void ftgmac100_destroy_mdio(struct net_device *netdev)
-{
- struct ftgmac100 *priv = netdev_priv(netdev);
-
- if (!priv->mii_bus)
- return;
-
- mdiobus_unregister(priv->mii_bus);
- mdiobus_free(priv->mii_bus);
-}
-
static void ftgmac100_ncsi_handler(struct ncsi_dev *nd)
{
if (unlikely(nd->state != ncsi_dev_state_functional))
@@ -2092,7 +2076,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
ftgmac100_phy_disconnect(netdev);
if (priv->ndev)
ncsi_unregister_dev(priv->ndev);
- ftgmac100_destroy_mdio(netdev);
return err;
}
@@ -2114,7 +2097,6 @@ static void ftgmac100_remove(struct platform_device *pdev)
cancel_work_sync(&priv->reset_task);
ftgmac100_phy_disconnect(netdev);
- ftgmac100_destroy_mdio(netdev);
}
static const struct ftgmac100_match_data ftgmac100_match_data_ast2400 = {
--
2.34.1
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
` (14 preceding siblings ...)
2026-02-06 3:17 ` [PATCH net-next v5 15/15] net: ftgmac100: Use devm_mdiobus_alloc/devm_of_mdiobus_register Jacky Chou
@ 2026-02-10 12:50 ` patchwork-bot+netdevbpf
15 siblings, 0 replies; 17+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-02-10 12:50 UTC (permalink / raw)
To: Jacky Chou
Cc: andrew+netdev, davem, edumazet, kuba, pabeni, netdev,
linux-kernel, andrew, horms
Hello:
This series was applied to netdev/net-next.git (main)
by Paolo Abeni <pabeni@redhat.com>:
On Fri, 6 Feb 2026 11:17:40 +0800 you wrote:
> The probe function of the ftgmac100 is rather complex, due to the way
> it has evolved over time, dealing with poor DT descriptions, and new
> variants of the MAC.
>
> Make use of DT match data to identify the MAC variant, rather than
> looking at the compatible string all the time.
>
> [...]
Here is the summary with links:
- [net-next,v5,01/15] net: ftgmac100: List all compatibles
https://git.kernel.org/netdev/net-next/c/03a2aba50b2c
- [net-next,v5,02/15] net: ftgmac100: Add match data containing MAC ID
https://git.kernel.org/netdev/net-next/c/41fbe5aa5086
- [net-next,v5,03/15] net: ftgmac100: Replace all of_device_is_compatible()
https://git.kernel.org/netdev/net-next/c/9b42f74808de
- [net-next,v5,04/15] net: ftgmac100: Use devm_alloc_etherdev()
https://git.kernel.org/netdev/net-next/c/f4bef838a455
- [net-next,v5,05/15] net: ftgmac100: Use devm_request_memory_region/devm_ioremap
https://git.kernel.org/netdev/net-next/c/67127f88c80b
- [net-next,v5,06/15] net: ftgmac100: Use devm_clk_get_enabled
https://git.kernel.org/netdev/net-next/c/4659ccedf22b
- [net-next,v5,07/15] net: ftgmac100: Simplify error handling for ftgmac100_initial_mac
https://git.kernel.org/netdev/net-next/c/d1d8392883bf
- [net-next,v5,08/15] net: ftgmac100: Move NCSI probe code into a helper
https://git.kernel.org/netdev/net-next/c/7535d70ba0e7
- [net-next,v5,09/15] net: ftgmac100: Always register the MDIO bus when it exists
https://git.kernel.org/netdev/net-next/c/efeb21441173
- [net-next,v5,10/15] net: ftgmac100: Simplify legacy MDIO setup
https://git.kernel.org/netdev/net-next/c/3e523741aae7
- [net-next,v5,11/15] net: ftgmac100: Move DT probe into a helper
https://git.kernel.org/netdev/net-next/c/20248a719dc8
- [net-next,v5,12/15] net: ftgmac100: Remove redundant PHY_POLL
https://git.kernel.org/netdev/net-next/c/0855b43d8218
- [net-next,v5,13/15] net: ftgmac100: Simplify condition on HW arbitration
https://git.kernel.org/netdev/net-next/c/96b4887a718c
- [net-next,v5,14/15] net: ftgmac100: Fix wrong netif_napi_del in release
https://git.kernel.org/netdev/net-next/c/201dddf68899
- [net-next,v5,15/15] net: ftgmac100: Use devm_mdiobus_alloc/devm_of_mdiobus_register
https://git.kernel.org/netdev/net-next/c/7ac5dddef516
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] 17+ messages in thread
end of thread, other threads:[~2026-02-10 12:50 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-06 3:17 [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 01/15] net: ftgmac100: List all compatibles Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 02/15] net: ftgmac100: Add match data containing MAC ID Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 03/15] net: ftgmac100: Replace all of_device_is_compatible() Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 04/15] net: ftgmac100: Use devm_alloc_etherdev() Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 05/15] net: ftgmac100: Use devm_request_memory_region/devm_ioremap Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 06/15] net: ftgmac100: Use devm_clk_get_enabled Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 07/15] net: ftgmac100: Simplify error handling for ftgmac100_initial_mac Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 08/15] net: ftgmac100: Move NCSI probe code into a helper Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 09/15] net: ftgmac100: Always register the MDIO bus when it exists Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 10/15] net: ftgmac100: Simplify legacy MDIO setup Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 11/15] net: ftgmac100: Move DT probe into a helper Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 12/15] net: ftgmac100: Remove redundant PHY_POLL Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 13/15] net: ftgmac100: Simplify condition on HW arbitration Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 14/15] net: ftgmac100: Fix wrong netif_napi_del in release Jacky Chou
2026-02-06 3:17 ` [PATCH net-next v5 15/15] net: ftgmac100: Use devm_mdiobus_alloc/devm_of_mdiobus_register Jacky Chou
2026-02-10 12:50 ` [PATCH net-next v5 00/15] net: ftgmac100: Various probe cleanups 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