* [PATCH net-next v2 01/11] net: dpaa2-mac: allow lynx PCS to manage mdiodev lifetime
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 02/11] net: fman_memac: allow lynx PCS to handle " Russell King (Oracle)
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Put the mdiodev after lynx_pcs_create() so that the Lynx PCS driver
can manage the lifetime of the mdiodev its using.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
index cb70855e2b9a..c0f7dd3b4ac1 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -271,9 +271,9 @@ static int dpaa2_pcs_create(struct dpaa2_mac *mac,
}
mac->pcs = lynx_pcs_create(mdiodev);
+ mdio_device_put(mdiodev);
if (!mac->pcs) {
netdev_err(mac->net_dev, "lynx_pcs_create() failed\n");
- mdio_device_free(mdiodev);
return -ENOMEM;
}
@@ -285,10 +285,7 @@ static void dpaa2_pcs_destroy(struct dpaa2_mac *mac)
struct phylink_pcs *phylink_pcs = mac->pcs;
if (phylink_pcs) {
- struct mdio_device *mdio = lynx_get_mdio_device(phylink_pcs);
-
lynx_pcs_destroy(phylink_pcs);
- mdio_device_free(mdio);
mac->pcs = NULL;
}
}
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 02/11] net: fman_memac: allow lynx PCS to handle mdiodev lifetime
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 01/11] net: dpaa2-mac: allow lynx PCS to manage mdiodev lifetime Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 03/11] net: pcs: lynx: remove lynx_get_mdio_device() Russell King (Oracle)
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Put the mdiodev after lynx_pcs_create() so that the Lynx PCS driver
can manage the lifetime of the mdiodev its using.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/ethernet/freescale/fman/fman_memac.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
index 625c79d5636f..8f45caf4af12 100644
--- a/drivers/net/ethernet/freescale/fman/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
@@ -976,14 +976,10 @@ static int memac_init(struct fman_mac *memac)
static void pcs_put(struct phylink_pcs *pcs)
{
- struct mdio_device *mdiodev;
-
if (IS_ERR_OR_NULL(pcs))
return;
- mdiodev = lynx_get_mdio_device(pcs);
lynx_pcs_destroy(pcs);
- mdio_device_free(mdiodev);
}
static int memac_free(struct fman_mac *memac)
@@ -1055,8 +1051,7 @@ static struct phylink_pcs *memac_pcs_create(struct device_node *mac_node,
return ERR_PTR(-EPROBE_DEFER);
pcs = lynx_pcs_create(mdiodev);
- if (!pcs)
- mdio_device_free(mdiodev);
+ mdio_device_put(mdiodev);
return pcs;
}
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 03/11] net: pcs: lynx: remove lynx_get_mdio_device()
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 01/11] net: dpaa2-mac: allow lynx PCS to manage mdiodev lifetime Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 02/11] net: fman_memac: allow lynx PCS to handle " Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 04/11] net: pcs: lynx: add lynx_pcs_create_fwnode() Russell King (Oracle)
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
lynx_get_mdio_device() is no longer necessary, let's remove it so the
lynx PCS code is always managing the lifetime of the mdiodev.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-lynx.c | 8 --------
include/linux/pcs-lynx.h | 2 --
2 files changed, 10 deletions(-)
diff --git a/drivers/net/pcs/pcs-lynx.c b/drivers/net/pcs/pcs-lynx.c
index f04dc580ffb8..a90f74172f49 100644
--- a/drivers/net/pcs/pcs-lynx.c
+++ b/drivers/net/pcs/pcs-lynx.c
@@ -34,14 +34,6 @@ enum sgmii_speed {
#define phylink_pcs_to_lynx(pl_pcs) container_of((pl_pcs), struct lynx_pcs, pcs)
#define lynx_to_phylink_pcs(lynx) (&(lynx)->pcs)
-struct mdio_device *lynx_get_mdio_device(struct phylink_pcs *pcs)
-{
- struct lynx_pcs *lynx = phylink_pcs_to_lynx(pcs);
-
- return lynx->mdio;
-}
-EXPORT_SYMBOL(lynx_get_mdio_device);
-
static void lynx_pcs_get_state_usxgmii(struct mdio_device *pcs,
struct phylink_link_state *state)
{
diff --git a/include/linux/pcs-lynx.h b/include/linux/pcs-lynx.h
index 885b59d10581..25f68a096bfe 100644
--- a/include/linux/pcs-lynx.h
+++ b/include/linux/pcs-lynx.h
@@ -9,8 +9,6 @@
#include <linux/mdio.h>
#include <linux/phylink.h>
-struct mdio_device *lynx_get_mdio_device(struct phylink_pcs *pcs);
-
struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio);
struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr);
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 04/11] net: pcs: lynx: add lynx_pcs_create_fwnode()
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (2 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 03/11] net: pcs: lynx: remove lynx_get_mdio_device() Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 05/11] net: dpaa2-mac: use lynx_pcs_create_fwnode() Russell King (Oracle)
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Add a helper to create a lynx PCS from a fwnode handle.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-lynx.c | 29 +++++++++++++++++++++++++++++
include/linux/pcs-lynx.h | 1 +
2 files changed, 30 insertions(+)
diff --git a/drivers/net/pcs/pcs-lynx.c b/drivers/net/pcs/pcs-lynx.c
index a90f74172f49..b0907c67d469 100644
--- a/drivers/net/pcs/pcs-lynx.c
+++ b/drivers/net/pcs/pcs-lynx.c
@@ -353,6 +353,35 @@ struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr)
}
EXPORT_SYMBOL(lynx_pcs_create_mdiodev);
+struct phylink_pcs *lynx_pcs_create_fwnode(struct fwnode_handle *node)
+{
+ struct mdio_device *mdio;
+ struct phylink_pcs *pcs;
+
+ mdio = fwnode_mdio_find_device(node);
+ if (!mdio)
+ return ERR_PTR(-EPROBE_DEFER);
+
+ pcs = lynx_pcs_create(mdio);
+
+ /* Convert failure to create the PCS to an error pointer, so this
+ * function has a consistent return value strategy.
+ */
+ if (!pcs)
+ pcs = ERR_PTR(-ENOMEM);
+
+ /* lynx_create() has taken a refcount on the mdiodev if it was
+ * successful. If lynx_create() fails, this will free the mdio
+ * device here. In any case, we don't need to hold our reference
+ * anymore, and putting it here will allow mdio_device_put() in
+ * lynx_destroy() to automatically free the mdio device.
+ */
+ mdio_device_put(mdio);
+
+ return pcs;
+}
+EXPORT_SYMBOL_GPL(lynx_pcs_create_fwnode);
+
void lynx_pcs_destroy(struct phylink_pcs *pcs)
{
struct lynx_pcs *lynx = phylink_pcs_to_lynx(pcs);
diff --git a/include/linux/pcs-lynx.h b/include/linux/pcs-lynx.h
index 25f68a096bfe..123e813df771 100644
--- a/include/linux/pcs-lynx.h
+++ b/include/linux/pcs-lynx.h
@@ -11,6 +11,7 @@
struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio);
struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr);
+struct phylink_pcs *lynx_pcs_create_fwnode(struct fwnode_handle *node);
void lynx_pcs_destroy(struct phylink_pcs *pcs);
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 05/11] net: dpaa2-mac: use lynx_pcs_create_fwnode()
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (3 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 04/11] net: pcs: lynx: add lynx_pcs_create_fwnode() Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 06/11] net: fman_memac: " Russell King (Oracle)
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Use lynx_pcs_create_fwnode() to create a lynx PCS from a fwnode handle.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
.../net/ethernet/freescale/dpaa2/dpaa2-mac.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
index c0f7dd3b4ac1..38e6208f9e1a 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -247,8 +247,8 @@ static int dpaa2_pcs_create(struct dpaa2_mac *mac,
struct fwnode_handle *dpmac_node,
int id)
{
- struct mdio_device *mdiodev;
struct fwnode_handle *node;
+ struct phylink_pcs *pcs;
node = fwnode_find_reference(dpmac_node, "pcs-handle", 0);
if (IS_ERR(node)) {
@@ -263,20 +263,22 @@ static int dpaa2_pcs_create(struct dpaa2_mac *mac,
return -ENODEV;
}
- mdiodev = fwnode_mdio_find_device(node);
+ pcs = lynx_pcs_create_fwnode(node);
fwnode_handle_put(node);
- if (!mdiodev) {
+
+ if (pcs == ERR_PTR(-EPROBE_DEFER)) {
netdev_dbg(mac->net_dev, "missing PCS device\n");
return -EPROBE_DEFER;
}
- mac->pcs = lynx_pcs_create(mdiodev);
- mdio_device_put(mdiodev);
- if (!mac->pcs) {
- netdev_err(mac->net_dev, "lynx_pcs_create() failed\n");
- return -ENOMEM;
+ if (IS_ERR(pcs)) {
+ netdev_err(mac->net_dev,
+ "lynx_pcs_create_fwnode() failed: %pe\n", pcs);
+ return PTR_ERR(pcs);
}
+ mac->pcs = pcs;
+
return 0;
}
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 06/11] net: fman_memac: use lynx_pcs_create_fwnode()
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (4 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 05/11] net: dpaa2-mac: use lynx_pcs_create_fwnode() Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 07/11] net: pcs: lynx: make lynx_pcs_create() static Russell King (Oracle)
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Use lynx_pcs_create_fwnode() to create a lynx PCS from a fwnode handle.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/ethernet/freescale/fman/fman_memac.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
index 8f45caf4af12..4fbdae996d05 100644
--- a/drivers/net/ethernet/freescale/fman/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
@@ -1039,19 +1039,14 @@ static struct phylink_pcs *memac_pcs_create(struct device_node *mac_node,
int index)
{
struct device_node *node;
- struct mdio_device *mdiodev = NULL;
struct phylink_pcs *pcs;
node = of_parse_phandle(mac_node, "pcsphy-handle", index);
- if (node && of_device_is_available(node))
- mdiodev = of_mdio_find_device(node);
- of_node_put(node);
-
- if (!mdiodev)
- return ERR_PTR(-EPROBE_DEFER);
+ if (!node || !of_device_is_available(node))
+ return ERR_PTR(-ENODEV);
- pcs = lynx_pcs_create(mdiodev);
- mdio_device_put(mdiodev);
+ pcs = lynx_pcs_create_fwnode(of_fwnode_handle(node));
+ of_node_put(node);
return pcs;
}
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 07/11] net: pcs: lynx: make lynx_pcs_create() static
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (5 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 06/11] net: fman_memac: " Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 08/11] net: pcs: lynx: change lynx_pcs_create() to return error-pointers Russell King (Oracle)
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
We no longer need to export lynx_pcs_create() for drivers to use as we
now have all the functionality we need in the two new creation helpers.
Remove the export and prototype, and make it static.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-lynx.c | 3 +--
include/linux/pcs-lynx.h | 1 -
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/net/pcs/pcs-lynx.c b/drivers/net/pcs/pcs-lynx.c
index b0907c67d469..b8c66137e28d 100644
--- a/drivers/net/pcs/pcs-lynx.c
+++ b/drivers/net/pcs/pcs-lynx.c
@@ -307,7 +307,7 @@ static const struct phylink_pcs_ops lynx_pcs_phylink_ops = {
.pcs_link_up = lynx_pcs_link_up,
};
-struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio)
+static struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio)
{
struct lynx_pcs *lynx;
@@ -322,7 +322,6 @@ struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio)
return lynx_to_phylink_pcs(lynx);
}
-EXPORT_SYMBOL(lynx_pcs_create);
struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr)
{
diff --git a/include/linux/pcs-lynx.h b/include/linux/pcs-lynx.h
index 123e813df771..7958cccd16f2 100644
--- a/include/linux/pcs-lynx.h
+++ b/include/linux/pcs-lynx.h
@@ -9,7 +9,6 @@
#include <linux/mdio.h>
#include <linux/phylink.h>
-struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio);
struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr);
struct phylink_pcs *lynx_pcs_create_fwnode(struct fwnode_handle *node);
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 08/11] net: pcs: lynx: change lynx_pcs_create() to return error-pointers
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (6 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 07/11] net: pcs: lynx: make lynx_pcs_create() static Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 09/11] net: pcs: lynx: check that the fwnode is available prior to use Russell King (Oracle)
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Change lynx_pcs_create() to return an error-pointer on failure to
allocate memory, rather than returning NULL. This allows the removal
of the conversion in lynx_pcs_create_fwnode() and
lynx_pcs_create_mdiodev().
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-lynx.c | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/drivers/net/pcs/pcs-lynx.c b/drivers/net/pcs/pcs-lynx.c
index b8c66137e28d..c2d01da40430 100644
--- a/drivers/net/pcs/pcs-lynx.c
+++ b/drivers/net/pcs/pcs-lynx.c
@@ -313,7 +313,7 @@ static struct phylink_pcs *lynx_pcs_create(struct mdio_device *mdio)
lynx = kzalloc(sizeof(*lynx), GFP_KERNEL);
if (!lynx)
- return NULL;
+ return ERR_PTR(-ENOMEM);
mdio_device_get(mdio);
lynx->mdio = mdio;
@@ -334,12 +334,6 @@ struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr)
pcs = lynx_pcs_create(mdio);
- /* Convert failure to create the PCS to an error pointer, so this
- * function has a consistent return value strategy.
- */
- if (!pcs)
- pcs = ERR_PTR(-ENOMEM);
-
/* lynx_create() has taken a refcount on the mdiodev if it was
* successful. If lynx_create() fails, this will free the mdio
* device here. In any case, we don't need to hold our reference
@@ -363,12 +357,6 @@ struct phylink_pcs *lynx_pcs_create_fwnode(struct fwnode_handle *node)
pcs = lynx_pcs_create(mdio);
- /* Convert failure to create the PCS to an error pointer, so this
- * function has a consistent return value strategy.
- */
- if (!pcs)
- pcs = ERR_PTR(-ENOMEM);
-
/* lynx_create() has taken a refcount on the mdiodev if it was
* successful. If lynx_create() fails, this will free the mdio
* device here. In any case, we don't need to hold our reference
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 09/11] net: pcs: lynx: check that the fwnode is available prior to use
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (7 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 08/11] net: pcs: lynx: change lynx_pcs_create() to return error-pointers Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:58 ` [PATCH net-next v2 10/11] net: dpaa2: use pcs-lynx's check for fwnode availability Russell King (Oracle)
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Check that the fwnode is marked as available prior to trying to lookup
the PCS device, and return -ENODEV if unavailable. Document the return
codes from lynx_pcs_create_fwnode().
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-lynx.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/drivers/net/pcs/pcs-lynx.c b/drivers/net/pcs/pcs-lynx.c
index c2d01da40430..fca48ebf0b81 100644
--- a/drivers/net/pcs/pcs-lynx.c
+++ b/drivers/net/pcs/pcs-lynx.c
@@ -6,6 +6,7 @@
#include <linux/mdio.h>
#include <linux/phylink.h>
#include <linux/pcs-lynx.h>
+#include <linux/property.h>
#define SGMII_CLOCK_PERIOD_NS 8 /* PCS is clocked at 125 MHz */
#define LINK_TIMER_VAL(ns) ((u32)((ns) / SGMII_CLOCK_PERIOD_NS))
@@ -346,11 +347,24 @@ struct phylink_pcs *lynx_pcs_create_mdiodev(struct mii_bus *bus, int addr)
}
EXPORT_SYMBOL(lynx_pcs_create_mdiodev);
+/*
+ * lynx_pcs_create_fwnode() creates a lynx PCS instance from the fwnode
+ * device indicated by node.
+ *
+ * Returns:
+ * -ENODEV if the fwnode is marked unavailable
+ * -EPROBE_DEFER if we fail to find the device
+ * -ENOMEM if we fail to allocate memory
+ * pointer to a phylink_pcs on success
+ */
struct phylink_pcs *lynx_pcs_create_fwnode(struct fwnode_handle *node)
{
struct mdio_device *mdio;
struct phylink_pcs *pcs;
+ if (!fwnode_device_is_available(node))
+ return ERR_PTR(-ENODEV);
+
mdio = fwnode_mdio_find_device(node);
if (!mdio)
return ERR_PTR(-EPROBE_DEFER);
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 10/11] net: dpaa2: use pcs-lynx's check for fwnode availability
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (8 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 09/11] net: pcs: lynx: check that the fwnode is available prior to use Russell King (Oracle)
@ 2023-06-07 11:58 ` Russell King (Oracle)
2023-06-07 11:59 ` [PATCH net-next v2 11/11] net: fman_memac: " Russell King (Oracle)
2023-06-09 2:30 ` [PATCH net-next v2 00/11] complete Lynx mdio device handling patchwork-bot+netdevbpf
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:58 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Use pcs-lynx's check rather than our own when determining if the device
is available.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
index 38e6208f9e1a..d860d9fe73af 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-mac.c
@@ -257,12 +257,6 @@ static int dpaa2_pcs_create(struct dpaa2_mac *mac,
return 0;
}
- if (!fwnode_device_is_available(node)) {
- netdev_err(mac->net_dev, "pcs-handle node not available\n");
- fwnode_handle_put(node);
- return -ENODEV;
- }
-
pcs = lynx_pcs_create_fwnode(node);
fwnode_handle_put(node);
@@ -271,6 +265,11 @@ static int dpaa2_pcs_create(struct dpaa2_mac *mac,
return -EPROBE_DEFER;
}
+ if (pcs == ERR_PTR(-ENODEV)) {
+ netdev_err(mac->net_dev, "pcs-handle node not available\n");
+ return PTR_ERR(pcs);
+ }
+
if (IS_ERR(pcs)) {
netdev_err(mac->net_dev,
"lynx_pcs_create_fwnode() failed: %pe\n", pcs);
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH net-next v2 11/11] net: fman_memac: use pcs-lynx's check for fwnode availability
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (9 preceding siblings ...)
2023-06-07 11:58 ` [PATCH net-next v2 10/11] net: dpaa2: use pcs-lynx's check for fwnode availability Russell King (Oracle)
@ 2023-06-07 11:59 ` Russell King (Oracle)
2023-06-09 2:30 ` [PATCH net-next v2 00/11] complete Lynx mdio device handling patchwork-bot+netdevbpf
11 siblings, 0 replies; 13+ messages in thread
From: Russell King (Oracle) @ 2023-06-07 11:59 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: David S. Miller, Eric Dumazet, Ioana Ciornei, Jakub Kicinski,
Madalin Bucur, netdev, Paolo Abeni, Sean Anderson
Use pcs-lynx's check rather than our own when determining if the device
is available. This fixes a bug where the reference gained by
of_parse_phandle() is not dropped if the device is not available.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/ethernet/freescale/fman/fman_memac.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/freescale/fman/fman_memac.c b/drivers/net/ethernet/freescale/fman/fman_memac.c
index 4fbdae996d05..3b75cc543be9 100644
--- a/drivers/net/ethernet/freescale/fman/fman_memac.c
+++ b/drivers/net/ethernet/freescale/fman/fman_memac.c
@@ -1042,7 +1042,7 @@ static struct phylink_pcs *memac_pcs_create(struct device_node *mac_node,
struct phylink_pcs *pcs;
node = of_parse_phandle(mac_node, "pcsphy-handle", index);
- if (!node || !of_device_is_available(node))
+ if (!node)
return ERR_PTR(-ENODEV);
pcs = lynx_pcs_create_fwnode(of_fwnode_handle(node));
--
2.30.2
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH net-next v2 00/11] complete Lynx mdio device handling
2023-06-07 11:57 [PATCH net-next v2 00/11] complete Lynx mdio device handling Russell King (Oracle)
` (10 preceding siblings ...)
2023-06-07 11:59 ` [PATCH net-next v2 11/11] net: fman_memac: " Russell King (Oracle)
@ 2023-06-09 2:30 ` patchwork-bot+netdevbpf
11 siblings, 0 replies; 13+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-06-09 2:30 UTC (permalink / raw)
To: Russell King
Cc: andrew, hkallweit1, davem, edumazet, ioana.ciornei, kuba,
madalin.bucur, netdev, pabeni, sean.anderson
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 7 Jun 2023 12:57:47 +0100 you wrote:
> Hi,
>
> This series completes the mdio device lifetime handling for Lynx PCS
> users which do not create their own mdio device, but instead fetch
> it using a firmware description - namely the DPAA2 and FMAN_MEMAC
> drivers.
>
> [...]
Here is the summary with links:
- [net-next,v2,01/11] net: dpaa2-mac: allow lynx PCS to manage mdiodev lifetime
https://git.kernel.org/netdev/net-next/c/6c79a9c8b1f3
- [net-next,v2,02/11] net: fman_memac: allow lynx PCS to handle mdiodev lifetime
https://git.kernel.org/netdev/net-next/c/d7b6ea1a14e4
- [net-next,v2,03/11] net: pcs: lynx: remove lynx_get_mdio_device()
https://git.kernel.org/netdev/net-next/c/b3b984dc0ba6
- [net-next,v2,04/11] net: pcs: lynx: add lynx_pcs_create_fwnode()
https://git.kernel.org/netdev/net-next/c/6e1a12821d34
- [net-next,v2,05/11] net: dpaa2-mac: use lynx_pcs_create_fwnode()
https://git.kernel.org/netdev/net-next/c/595fa7634d71
- [net-next,v2,06/11] net: fman_memac: use lynx_pcs_create_fwnode()
https://git.kernel.org/netdev/net-next/c/929a629c211f
- [net-next,v2,07/11] net: pcs: lynx: make lynx_pcs_create() static
https://git.kernel.org/netdev/net-next/c/84e476b876d9
- [net-next,v2,08/11] net: pcs: lynx: change lynx_pcs_create() to return error-pointers
https://git.kernel.org/netdev/net-next/c/05b606b88452
- [net-next,v2,09/11] net: pcs: lynx: check that the fwnode is available prior to use
https://git.kernel.org/netdev/net-next/c/d143898c6d7b
- [net-next,v2,10/11] net: dpaa2: use pcs-lynx's check for fwnode availability
https://git.kernel.org/netdev/net-next/c/8c1d0b339d67
- [net-next,v2,11/11] net: fman_memac: use pcs-lynx's check for fwnode availability
https://git.kernel.org/netdev/net-next/c/32fc30353f7c
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] 13+ messages in thread