* [PATCH net-next 1/5] net: fsl_pq_mdio: use dev variable in _probe
2024-11-15 20:41 [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Rosen Penev
@ 2024-11-15 20:41 ` Rosen Penev
2024-11-15 20:41 ` [PATCH net-next 2/5] net: fsl_pq_mdio: use devm for mdiobus_alloc_size Rosen Penev
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Rosen Penev @ 2024-11-15 20:41 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, open list
Moving &pdev->dev to its own variable makes the code slightly more
readable.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/freescale/fsl_pq_mdio.c | 26 ++++++++++----------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index 56d2f79fb7e3..108e760c7a5f 100644
--- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -409,16 +409,17 @@ static void set_tbipa(const u32 tbipa_val, struct platform_device *pdev,
static int fsl_pq_mdio_probe(struct platform_device *pdev)
{
const struct fsl_pq_mdio_data *data;
- struct device_node *np = pdev->dev.of_node;
- struct resource res;
- struct device_node *tbi;
+ struct device *dev = &pdev->dev;
struct fsl_pq_mdio_priv *priv;
+ struct device_node *tbi;
struct mii_bus *new_bus;
+ struct device_node *np;
+ struct resource res;
int err;
- data = device_get_match_data(&pdev->dev);
+ data = device_get_match_data(dev);
if (!data) {
- dev_err(&pdev->dev, "Failed to match device\n");
+ dev_err(dev, "Failed to match device\n");
return -ENODEV;
}
@@ -432,9 +433,10 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
new_bus->write = &fsl_pq_mdio_write;
new_bus->reset = &fsl_pq_mdio_reset;
+ np = dev->of_node;
err = of_address_to_resource(np, 0, &res);
if (err < 0) {
- dev_err(&pdev->dev, "could not obtain address information\n");
+ dev_err(dev, "could not obtain address information\n");
goto error;
}
@@ -454,20 +456,19 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
* space.
*/
if (data->mii_offset > resource_size(&res)) {
- dev_err(&pdev->dev, "invalid register map\n");
+ dev_err(dev, "invalid register map\n");
err = -EINVAL;
goto error;
}
priv->regs = priv->map + data->mii_offset;
- new_bus->parent = &pdev->dev;
+ new_bus->parent = dev;
platform_set_drvdata(pdev, new_bus);
if (data->get_tbipa) {
for_each_child_of_node(np, tbi) {
if (of_node_is_type(tbi, "tbi-phy")) {
- dev_dbg(&pdev->dev, "found TBI PHY node %pOFP\n",
- tbi);
+ dev_dbg(dev, "found TBI PHY node %pOFP\n", tbi);
break;
}
}
@@ -475,7 +476,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
if (tbi) {
const u32 *prop = of_get_property(tbi, "reg", NULL);
if (!prop) {
- dev_err(&pdev->dev,
+ dev_err(dev,
"missing 'reg' property in node %pOF\n",
tbi);
err = -EBUSY;
@@ -491,8 +492,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
err = of_mdiobus_register(new_bus, np);
if (err) {
- dev_err(&pdev->dev, "cannot register %s as MDIO bus\n",
- new_bus->name);
+ dev_err(dev, "cannot register %s as MDIO bus\n", new_bus->name);
goto error;
}
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH net-next 2/5] net: fsl_pq_mdio: use devm for mdiobus_alloc_size
2024-11-15 20:41 [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Rosen Penev
2024-11-15 20:41 ` [PATCH net-next 1/5] net: fsl_pq_mdio: use dev variable in _probe Rosen Penev
@ 2024-11-15 20:41 ` Rosen Penev
2024-11-15 20:41 ` [PATCH net-next 3/5] net: fsl_pq_mdio: use platform_get_resource Rosen Penev
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Rosen Penev @ 2024-11-15 20:41 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, open list
Using devm avoids having to manually free. In the case of this driver,
it's simple enough that it's ideal for devm.
There also seems to be a mistake here. Using kfree instead of
mdiobus_free.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/freescale/fsl_pq_mdio.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index 108e760c7a5f..d7f9d99fe782 100644
--- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -423,7 +423,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
return -ENODEV;
}
- new_bus = mdiobus_alloc_size(sizeof(*priv));
+ new_bus = devm_mdiobus_alloc_size(dev, sizeof(*priv));
if (!new_bus)
return -ENOMEM;
@@ -437,17 +437,15 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
err = of_address_to_resource(np, 0, &res);
if (err < 0) {
dev_err(dev, "could not obtain address information\n");
- goto error;
+ return err;
}
snprintf(new_bus->id, MII_BUS_ID_SIZE, "%pOFn@%llx", np,
(unsigned long long)res.start);
priv->map = of_iomap(np, 0);
- if (!priv->map) {
- err = -ENOMEM;
- goto error;
- }
+ if (!priv->map)
+ return -ENOMEM;
/*
* Some device tree nodes represent only the MII registers, and
@@ -502,8 +500,6 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
if (priv->map)
iounmap(priv->map);
- kfree(new_bus);
-
return err;
}
@@ -517,7 +513,6 @@ static void fsl_pq_mdio_remove(struct platform_device *pdev)
mdiobus_unregister(bus);
iounmap(priv->map);
- mdiobus_free(bus);
}
static struct platform_driver fsl_pq_mdio_driver = {
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH net-next 3/5] net: fsl_pq_mdio: use platform_get_resource
2024-11-15 20:41 [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Rosen Penev
2024-11-15 20:41 ` [PATCH net-next 1/5] net: fsl_pq_mdio: use dev variable in _probe Rosen Penev
2024-11-15 20:41 ` [PATCH net-next 2/5] net: fsl_pq_mdio: use devm for mdiobus_alloc_size Rosen Penev
@ 2024-11-15 20:41 ` Rosen Penev
2024-11-15 20:41 ` [PATCH net-next 4/5] net: fsl_pq_mdio: use devm for of_iomap Rosen Penev
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Rosen Penev @ 2024-11-15 20:41 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, open list
Replace of_address_to_resource with platform_get_resource. No need to
use the of_node when the pdev is sufficient.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/freescale/fsl_pq_mdio.c | 19 +++++++++----------
1 file changed, 9 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index d7f9d99fe782..f14607555f33 100644
--- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -414,7 +414,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
struct device_node *tbi;
struct mii_bus *new_bus;
struct device_node *np;
- struct resource res;
+ struct resource *res;
int err;
data = device_get_match_data(dev);
@@ -433,15 +433,15 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
new_bus->write = &fsl_pq_mdio_write;
new_bus->reset = &fsl_pq_mdio_reset;
- np = dev->of_node;
- err = of_address_to_resource(np, 0, &res);
- if (err < 0) {
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res) {
dev_err(dev, "could not obtain address information\n");
- return err;
+ return -ENOMEM;
}
+ np = dev->of_node;
snprintf(new_bus->id, MII_BUS_ID_SIZE, "%pOFn@%llx", np,
- (unsigned long long)res.start);
+ (unsigned long long)res->start);
priv->map = of_iomap(np, 0);
if (!priv->map)
@@ -453,7 +453,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
* contains the offset of the MII registers inside the mapped register
* space.
*/
- if (data->mii_offset > resource_size(&res)) {
+ if (data->mii_offset > resource_size(res)) {
dev_err(dev, "invalid register map\n");
err = -EINVAL;
goto error;
@@ -480,13 +480,12 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
err = -EBUSY;
goto error;
}
- set_tbipa(*prop, pdev,
- data->get_tbipa, priv->map, &res);
+ set_tbipa(*prop, pdev, data->get_tbipa, priv->map, res);
}
}
if (data->ucc_configure)
- data->ucc_configure(res.start, res.end);
+ data->ucc_configure(res->start, res->end);
err = of_mdiobus_register(new_bus, np);
if (err) {
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH net-next 4/5] net: fsl_pq_mdio: use devm for of_iomap
2024-11-15 20:41 [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Rosen Penev
` (2 preceding siblings ...)
2024-11-15 20:41 ` [PATCH net-next 3/5] net: fsl_pq_mdio: use platform_get_resource Rosen Penev
@ 2024-11-15 20:41 ` Rosen Penev
2024-11-15 20:41 ` [PATCH net-next 5/5] net: fsl_pq_mdio: return directly in probe Rosen Penev
2024-11-19 3:45 ` [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Jakub Kicinski
5 siblings, 0 replies; 7+ messages in thread
From: Rosen Penev @ 2024-11-15 20:41 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, open list
Using devm for of_iomap avoids having to manually iounmap in error paths
for this simple driver.
Add a note for why not devm_platform helper.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/freescale/fsl_pq_mdio.c | 24 ++++++++------------
1 file changed, 9 insertions(+), 15 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index f14607555f33..640929a4562d 100644
--- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -443,7 +443,12 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
snprintf(new_bus->id, MII_BUS_ID_SIZE, "%pOFn@%llx", np,
(unsigned long long)res->start);
- priv->map = of_iomap(np, 0);
+ /*
+ * While tempting, this cannot be converted to
+ * devm_platform_get_and_ioremap_resource as some platforms overlap the
+ * memory regions with the ethernet node.
+ */
+ priv->map = devm_of_iomap(dev, np, 0, NULL);
if (!priv->map)
return -ENOMEM;
@@ -455,8 +460,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
*/
if (data->mii_offset > resource_size(res)) {
dev_err(dev, "invalid register map\n");
- err = -EINVAL;
- goto error;
+ return -EINVAL;
}
priv->regs = priv->map + data->mii_offset;
@@ -477,8 +481,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
dev_err(dev,
"missing 'reg' property in node %pOF\n",
tbi);
- err = -EBUSY;
- goto error;
+ return -EBUSY;
}
set_tbipa(*prop, pdev, data->get_tbipa, priv->map, res);
}
@@ -490,16 +493,10 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
err = of_mdiobus_register(new_bus, np);
if (err) {
dev_err(dev, "cannot register %s as MDIO bus\n", new_bus->name);
- goto error;
+ return err;
}
return 0;
-
-error:
- if (priv->map)
- iounmap(priv->map);
-
- return err;
}
@@ -507,11 +504,8 @@ static void fsl_pq_mdio_remove(struct platform_device *pdev)
{
struct device *device = &pdev->dev;
struct mii_bus *bus = dev_get_drvdata(device);
- struct fsl_pq_mdio_priv *priv = bus->priv;
mdiobus_unregister(bus);
-
- iounmap(priv->map);
}
static struct platform_driver fsl_pq_mdio_driver = {
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH net-next 5/5] net: fsl_pq_mdio: return directly in probe
2024-11-15 20:41 [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Rosen Penev
` (3 preceding siblings ...)
2024-11-15 20:41 ` [PATCH net-next 4/5] net: fsl_pq_mdio: use devm for of_iomap Rosen Penev
@ 2024-11-15 20:41 ` Rosen Penev
2024-11-19 3:45 ` [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Jakub Kicinski
5 siblings, 0 replies; 7+ messages in thread
From: Rosen Penev @ 2024-11-15 20:41 UTC (permalink / raw)
To: netdev
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, open list
Instead of generating two errors in probe, just return directly to
generate one.
mdiobus_register was switched away from the of_ variant as no children
are being used.
No more need for a _remove function.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/freescale/fsl_pq_mdio.c | 20 +-------------------
1 file changed, 1 insertion(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index 640929a4562d..12b6c11d9cf9 100644
--- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -415,7 +415,6 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
struct mii_bus *new_bus;
struct device_node *np;
struct resource *res;
- int err;
data = device_get_match_data(dev);
if (!data) {
@@ -465,7 +464,6 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
priv->regs = priv->map + data->mii_offset;
new_bus->parent = dev;
- platform_set_drvdata(pdev, new_bus);
if (data->get_tbipa) {
for_each_child_of_node(np, tbi) {
@@ -490,22 +488,7 @@ static int fsl_pq_mdio_probe(struct platform_device *pdev)
if (data->ucc_configure)
data->ucc_configure(res->start, res->end);
- err = of_mdiobus_register(new_bus, np);
- if (err) {
- dev_err(dev, "cannot register %s as MDIO bus\n", new_bus->name);
- return err;
- }
-
- return 0;
-}
-
-
-static void fsl_pq_mdio_remove(struct platform_device *pdev)
-{
- struct device *device = &pdev->dev;
- struct mii_bus *bus = dev_get_drvdata(device);
-
- mdiobus_unregister(bus);
+ return devm_mdiobus_register(dev, new_bus);
}
static struct platform_driver fsl_pq_mdio_driver = {
@@ -514,7 +497,6 @@ static struct platform_driver fsl_pq_mdio_driver = {
.of_match_table = fsl_pq_mdio_match,
},
.probe = fsl_pq_mdio_probe,
- .remove = fsl_pq_mdio_remove,
};
module_platform_driver(fsl_pq_mdio_driver);
--
2.47.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH net-next 0/5] net: fsl_pq_mdio: use devm
2024-11-15 20:41 [PATCH net-next 0/5] net: fsl_pq_mdio: use devm Rosen Penev
` (4 preceding siblings ...)
2024-11-15 20:41 ` [PATCH net-next 5/5] net: fsl_pq_mdio: return directly in probe Rosen Penev
@ 2024-11-19 3:45 ` Jakub Kicinski
5 siblings, 0 replies; 7+ messages in thread
From: Jakub Kicinski @ 2024-11-19 3:45 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, Andrew Lunn, David S. Miller, Eric Dumazet, Paolo Abeni,
open list
On Fri, 15 Nov 2024 12:41:44 -0800 Rosen Penev wrote:
> Various devm conversions to simplify probe and remove the remove
> function.
>
> Tested on WatchGuard T10, where devm_platform_get_and_ioremap_resource
> was failing. Added a note why.
Hi Rosen, we're wrapping up our 6.13 material. We don't have enough
time to review everything that's already posted so I'll mark all our
outstanding patches as deferred. Please resend in 2 weeks.
^ permalink raw reply [flat|nested] 7+ messages in thread