* [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs
@ 2014-05-24 7:34 Daniel Mack
2014-05-24 7:34 ` [PATCH v2 1/3] net: of_mdio: factor out code to parse a phy's 'reg' property Daniel Mack
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Daniel Mack @ 2014-05-24 7:34 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, davem, mugunthanvnm, ujhelyi.m, Daniel Mack
Hi Florian,
Here's v2.
v1 -> v2:
* Switch to of_property_read_u32() in patch #1
* Check for mdio->dev_of_node in patch #2
* Added Florian's Reviewed-by: tags
Thanks!
Daniel
Daniel Mack (3):
net: of_mdio: factor out code to parse a phy's 'reg' property
net: of_mdio: add of_mdiobus_link_phydev()
net: of_mdio: don't store the length of a property if we don't need to
drivers/net/phy/mdio_bus.c | 6 ++++
drivers/of/of_mdio.c | 72 +++++++++++++++++++++++++++++++++++++---------
include/linux/of_mdio.h | 8 ++++++
3 files changed, 72 insertions(+), 14 deletions(-)
--
1.9.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v2 1/3] net: of_mdio: factor out code to parse a phy's 'reg' property
2014-05-24 7:34 [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs Daniel Mack
@ 2014-05-24 7:34 ` Daniel Mack
2014-05-24 7:34 ` [PATCH v2 2/3] net: of_mdio: add of_mdiobus_link_phydev() Daniel Mack
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Daniel Mack @ 2014-05-24 7:34 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, davem, mugunthanvnm, ujhelyi.m, Daniel Mack
Factor out some logic into of_mdio_parse_addr() so it can be reused
later. While at it, use of_property_read_u32() rather than open-coding
the same logic again.
Signed-off-by: Daniel Mack <zonque@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/of/of_mdio.c | 35 +++++++++++++++++++++++------------
1 file changed, 23 insertions(+), 12 deletions(-)
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 9a95831..4eb335e 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -114,6 +114,27 @@ static int of_mdiobus_register_phy(struct mii_bus *mdio, struct device_node *chi
return 0;
}
+static int of_mdio_parse_addr(struct device *dev, const struct device_node *np)
+{
+ u32 addr;
+ int ret;
+
+ ret = of_property_read_u32(np, "reg", &addr);
+ if (ret < 0) {
+ dev_err(dev, "%s has invalid PHY address\n", np->full_name);
+ return ret;
+ }
+
+ /* A PHY must have a reg property in the range [0-31] */
+ if (addr >= PHY_MAX_ADDR) {
+ dev_err(dev, "%s PHY address %i is too large\n",
+ np->full_name, addr);
+ return -EINVAL;
+ }
+
+ return addr;
+}
+
/**
* of_mdiobus_register - Register mii_bus and create PHYs from the device tree
* @mdio: pointer to mii_bus structure
@@ -148,19 +169,9 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
/* Loop over the child nodes and register a phy_device for each one */
for_each_available_child_of_node(np, child) {
- /* A PHY must have a reg property in the range [0-31] */
- paddr = of_get_property(child, "reg", &len);
- if (!paddr || len < sizeof(*paddr)) {
+ addr = of_mdio_parse_addr(&mdio->dev, child);
+ if (addr < 0) {
scanphys = true;
- dev_err(&mdio->dev, "%s has invalid PHY address\n",
- child->full_name);
- continue;
- }
-
- addr = be32_to_cpup(paddr);
- if (addr >= PHY_MAX_ADDR) {
- dev_err(&mdio->dev, "%s PHY address %i is too large\n",
- child->full_name, addr);
continue;
}
--
1.9.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 2/3] net: of_mdio: add of_mdiobus_link_phydev()
2014-05-24 7:34 [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs Daniel Mack
2014-05-24 7:34 ` [PATCH v2 1/3] net: of_mdio: factor out code to parse a phy's 'reg' property Daniel Mack
@ 2014-05-24 7:34 ` Daniel Mack
2014-05-24 7:34 ` [PATCH v2 3/3] net: of_mdio: don't store the length of a property if we don't need to Daniel Mack
2014-05-29 22:24 ` [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs David Miller
3 siblings, 0 replies; 5+ messages in thread
From: Daniel Mack @ 2014-05-24 7:34 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, davem, mugunthanvnm, ujhelyi.m, Daniel Mack
Add a function to walk the list of subnodes of a mdio bus and look for
a node that matches the phy's address with its 'reg' property. If found,
set the of_node pointer for the phy. This allows auto-probed pyh
devices to be augmented by information passed in via DT.
Signed-off-by: Daniel Mack <zonque@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/phy/mdio_bus.c | 6 ++++++
drivers/of/of_mdio.c | 33 +++++++++++++++++++++++++++++++++
include/linux/of_mdio.h | 8 ++++++++
3 files changed, 47 insertions(+)
diff --git a/drivers/net/phy/mdio_bus.c b/drivers/net/phy/mdio_bus.c
index 76f54b3..e1444b2 100644
--- a/drivers/net/phy/mdio_bus.c
+++ b/drivers/net/phy/mdio_bus.c
@@ -233,6 +233,12 @@ struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr)
if (IS_ERR(phydev) || phydev == NULL)
return phydev;
+ /*
+ * For DT, see if the auto-probed phy has a correspoding child
+ * in the bus node, and set the of_node pointer in this case.
+ */
+ of_mdiobus_link_phydev(bus, phydev);
+
err = phy_device_register(phydev);
if (err) {
phy_device_free(phydev);
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 4eb335e..92e09ac 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -209,6 +209,39 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
}
EXPORT_SYMBOL(of_mdiobus_register);
+/**
+ * of_mdiobus_link_phydev - Find a device node for a phy
+ * @mdio: pointer to mii_bus structure
+ * @phydev: phydev for which the of_node pointer should be set
+ *
+ * Walk the list of subnodes of a mdio bus and look for a node that matches the
+ * phy's address with its 'reg' property. If found, set the of_node pointer for
+ * the phy. This allows auto-probed pyh devices to be supplied with information
+ * passed in via DT.
+ */
+void of_mdiobus_link_phydev(struct mii_bus *mdio,
+ struct phy_device *phydev)
+{
+ struct device *dev = &phydev->dev;
+ struct device_node *child;
+
+ if (dev->of_node || !mdio->dev.of_node)
+ return;
+
+ for_each_available_child_of_node(mdio->dev.of_node, child) {
+ int addr;
+
+ addr = of_mdio_parse_addr(&mdio->dev, child);
+ if (addr < 0)
+ continue;
+
+ if (addr == phydev->addr) {
+ dev->of_node = child;
+ return;
+ }
+ }
+}
+
/* Helper function for of_phy_find_device */
static int of_phy_match(struct device *dev, void *phy_np)
{
diff --git a/include/linux/of_mdio.h b/include/linux/of_mdio.h
index 881a7c3..de72206 100644
--- a/include/linux/of_mdio.h
+++ b/include/linux/of_mdio.h
@@ -28,6 +28,9 @@ extern struct phy_device *of_phy_connect_fixed_link(struct net_device *dev,
extern struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np);
+extern void of_mdiobus_link_phydev(struct mii_bus *mdio,
+ struct phy_device *phydev);
+
#else /* CONFIG_OF */
static inline int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
{
@@ -70,6 +73,11 @@ static inline struct mii_bus *of_mdio_find_bus(struct device_node *mdio_np)
{
return NULL;
}
+
+static inline void of_mdiobus_link_phydev(struct mii_bus *mdio,
+ struct phy_device *phydev)
+{
+}
#endif /* CONFIG_OF */
#endif /* __LINUX_OF_MDIO_H */
--
1.9.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v2 3/3] net: of_mdio: don't store the length of a property if we don't need to
2014-05-24 7:34 [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs Daniel Mack
2014-05-24 7:34 ` [PATCH v2 1/3] net: of_mdio: factor out code to parse a phy's 'reg' property Daniel Mack
2014-05-24 7:34 ` [PATCH v2 2/3] net: of_mdio: add of_mdiobus_link_phydev() Daniel Mack
@ 2014-05-24 7:34 ` Daniel Mack
2014-05-29 22:24 ` [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs David Miller
3 siblings, 0 replies; 5+ messages in thread
From: Daniel Mack @ 2014-05-24 7:34 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, davem, mugunthanvnm, ujhelyi.m, Daniel Mack
of_get_property() can be called with NULL as 2nd argument if the caller
is not interested in the length of a property. Use that here so we can
get rid of a variable.
Signed-off-by: Daniel Mack <zonque@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/of/of_mdio.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/of/of_mdio.c b/drivers/of/of_mdio.c
index 92e09ac..c719601 100644
--- a/drivers/of/of_mdio.c
+++ b/drivers/of/of_mdio.c
@@ -149,7 +149,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
const __be32 *paddr;
u32 addr;
bool scanphys = false;
- int rc, i, len;
+ int rc, i;
/* Mask out all PHYs from auto probing. Instead the PHYs listed in
* the device tree are populated after the bus has been registered */
@@ -186,7 +186,7 @@ int of_mdiobus_register(struct mii_bus *mdio, struct device_node *np)
/* auto scan for PHYs with empty reg property */
for_each_available_child_of_node(np, child) {
/* Skip PHYs with reg property set */
- paddr = of_get_property(child, "reg", &len);
+ paddr = of_get_property(child, "reg", NULL);
if (paddr)
continue;
--
1.9.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs
2014-05-24 7:34 [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs Daniel Mack
` (2 preceding siblings ...)
2014-05-24 7:34 ` [PATCH v2 3/3] net: of_mdio: don't store the length of a property if we don't need to Daniel Mack
@ 2014-05-29 22:24 ` David Miller
3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2014-05-29 22:24 UTC (permalink / raw)
To: zonque; +Cc: f.fainelli, netdev, mugunthanvnm, ujhelyi.m
From: Daniel Mack <zonque@gmail.com>
Date: Sat, 24 May 2014 09:34:24 +0200
> Here's v2.
>
> v1 -> v2:
> * Switch to of_property_read_u32() in patch #1
> * Check for mdio->dev_of_node in patch #2
> * Added Florian's Reviewed-by: tags
Series applied to net-next, thank you.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2014-05-29 22:24 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-24 7:34 [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs Daniel Mack
2014-05-24 7:34 ` [PATCH v2 1/3] net: of_mdio: factor out code to parse a phy's 'reg' property Daniel Mack
2014-05-24 7:34 ` [PATCH v2 2/3] net: of_mdio: add of_mdiobus_link_phydev() Daniel Mack
2014-05-24 7:34 ` [PATCH v2 3/3] net: of_mdio: don't store the length of a property if we don't need to Daniel Mack
2014-05-29 22:24 ` [PATCH v2 0/3] mdio: Parse DT nodes for auto-probed PHYs David Miller
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.