* [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA
@ 2017-12-13 0:00 Florian Fainelli
2017-12-13 0:00 ` [PATCH net-next v2 1/5] net: phy: phylink: Allow specifying PHY device flags Florian Fainelli
` (5 more replies)
0 siblings, 6 replies; 11+ messages in thread
From: Florian Fainelli @ 2017-12-13 0:00 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, rmk+kernel, davem, andrew, vivien.didelot
Hi all,
In preparation for having DSA migrate to PHYLINK, I had to come up with a
number of preparatory patches:
- we need to be able to pass phy_flags from an external component calling
phylink_of_phy_connect()
- DSA tries to connect through OF first, then fallsback using its own internal
MDIO bus, in that case we would both show an error, but also not know what
the correct phy_interface_t would be, instead use the PHY device/driver provided
one
- Finally bcm_sf2 makes use of all possible PHYs out there: internal, external,
fixed, and MoCA, the latter requires a bit of help to signal link notifications
through a MMIO interrupt, as well a report a correct PORT type
Changes in v2:
- rebased against latest net-next/master
- added kernel doc documentation
- dropped error message in phylink_of_phy_connect() as suggested by Russell
Florian Fainelli (5):
net: phy: phylink: Allow specifying PHY device flags
net: phy: phylink: Use PHY device interface if N/A
net: phy: phylink: Remove error message
net: phy: phylink: Allow setting a custom link state callback
net: phy: phylink: Report MoCA as PORT_BNC
drivers/net/phy/phylink.c | 56 ++++++++++++++++++++++++++++++++++++++++-------
include/linux/phylink.h | 5 ++++-
2 files changed, 52 insertions(+), 9 deletions(-)
--
2.14.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH net-next v2 1/5] net: phy: phylink: Allow specifying PHY device flags
2017-12-13 0:00 [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA Florian Fainelli
@ 2017-12-13 0:00 ` Florian Fainelli
2017-12-13 16:54 ` Andrew Lunn
2017-12-13 0:00 ` [PATCH net-next v2 2/5] net: phy: phylink: Use PHY device interface if N/A Florian Fainelli
` (4 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Florian Fainelli @ 2017-12-13 0:00 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, rmk+kernel, davem, andrew, vivien.didelot
In order to let subsystems like DSA fully utilize PHYLINK, we need to be able
to communicate phy_device::flags from of_phy_{connect,attach} even when using
PHYLINK APIs.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/phy/phylink.c | 7 +++++--
include/linux/phylink.h | 2 +-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 2bfb548d3dff..94b43c5237fa 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -731,6 +731,7 @@ EXPORT_SYMBOL_GPL(phylink_connect_phy);
* phylink_of_phy_connect() - connect the PHY specified in the DT mode.
* @pl: a pointer to a &struct phylink returned from phylink_create()
* @dn: a pointer to a &struct device_node.
+ * @flags: PHY-specific flags to communicate to the PHY device driver
*
* Connect the phy specified in the device node @dn to the phylink instance
* specified by @pl. Actions specified in phylink_connect_phy() will be
@@ -738,7 +739,8 @@ EXPORT_SYMBOL_GPL(phylink_connect_phy);
*
* Returns 0 on success or a negative errno.
*/
-int phylink_of_phy_connect(struct phylink *pl, struct device_node *dn)
+int phylink_of_phy_connect(struct phylink *pl, struct device_node *dn,
+ u32 flags)
{
struct device_node *phy_node;
struct phy_device *phy_dev;
@@ -764,7 +766,8 @@ int phylink_of_phy_connect(struct phylink *pl, struct device_node *dn)
return 0;
}
- phy_dev = of_phy_attach(pl->netdev, phy_node, 0, pl->link_interface);
+ phy_dev = of_phy_attach(pl->netdev, phy_node, flags,
+ pl->link_interface);
/* We're done with the phy_node handle */
of_node_put(phy_node);
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index 4f0f452ff38d..36e342b450c7 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -188,7 +188,7 @@ struct phylink *phylink_create(struct net_device *, struct fwnode_handle *,
void phylink_destroy(struct phylink *);
int phylink_connect_phy(struct phylink *, struct phy_device *);
-int phylink_of_phy_connect(struct phylink *, struct device_node *);
+int phylink_of_phy_connect(struct phylink *, struct device_node *, u32 flags);
void phylink_disconnect_phy(struct phylink *);
void phylink_mac_change(struct phylink *, bool up);
--
2.14.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 2/5] net: phy: phylink: Use PHY device interface if N/A
2017-12-13 0:00 [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA Florian Fainelli
2017-12-13 0:00 ` [PATCH net-next v2 1/5] net: phy: phylink: Allow specifying PHY device flags Florian Fainelli
@ 2017-12-13 0:00 ` Florian Fainelli
2017-12-13 0:00 ` [PATCH net-next v2 3/5] net: phy: phylink: Remove error message Florian Fainelli
` (3 subsequent siblings)
5 siblings, 0 replies; 11+ messages in thread
From: Florian Fainelli @ 2017-12-13 0:00 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, rmk+kernel, davem, andrew, vivien.didelot
We may not always be able to resolve a correct phy_interface_t value before
actually connecting to the PHY device, when that happens, just have
phylink_connect_phy() utilize what the PHY device/driver provided.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/phy/phylink.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 94b43c5237fa..60c1b7e5490e 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -715,6 +715,12 @@ int phylink_connect_phy(struct phylink *pl, struct phy_device *phy)
phy_interface_mode_is_8023z(pl->link_interface))))
return -EINVAL;
+ /* Use PHY device/driver interface */
+ if (pl->link_interface == PHY_INTERFACE_MODE_NA) {
+ pl->link_interface = phy->interface;
+ pl->link_config.interface = pl->link_interface;
+ }
+
ret = phy_attach_direct(pl->netdev, phy, 0, pl->link_interface);
if (ret)
return ret;
--
2.14.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 3/5] net: phy: phylink: Remove error message
2017-12-13 0:00 [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA Florian Fainelli
2017-12-13 0:00 ` [PATCH net-next v2 1/5] net: phy: phylink: Allow specifying PHY device flags Florian Fainelli
2017-12-13 0:00 ` [PATCH net-next v2 2/5] net: phy: phylink: Use PHY device interface if N/A Florian Fainelli
@ 2017-12-13 0:00 ` Florian Fainelli
2017-12-13 16:56 ` Andrew Lunn
2017-12-13 0:00 ` [PATCH net-next v2 4/5] net: phy: phylink: Allow setting a custom link state callback Florian Fainelli
` (2 subsequent siblings)
5 siblings, 1 reply; 11+ messages in thread
From: Florian Fainelli @ 2017-12-13 0:00 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, rmk+kernel, davem, andrew, vivien.didelot
Some subsystems like DSA may be trying to connect to a PHY through OF first,
and then attempt a connect using a local MDIO bus, remove the error message:
"unable to find PHY node" so we can let MAC drivers whether to print it or not.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/phy/phylink.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 60c1b7e5490e..64e3eb73a237 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -765,10 +765,8 @@ int phylink_of_phy_connect(struct phylink *pl, struct device_node *dn,
phy_node = of_parse_phandle(dn, "phy-device", 0);
if (!phy_node) {
- if (pl->link_an_mode == MLO_AN_PHY) {
- netdev_err(pl->netdev, "unable to find PHY node\n");
+ if (pl->link_an_mode == MLO_AN_PHY)
return -ENODEV;
- }
return 0;
}
--
2.14.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 4/5] net: phy: phylink: Allow setting a custom link state callback
2017-12-13 0:00 [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA Florian Fainelli
` (2 preceding siblings ...)
2017-12-13 0:00 ` [PATCH net-next v2 3/5] net: phy: phylink: Remove error message Florian Fainelli
@ 2017-12-13 0:00 ` Florian Fainelli
2017-12-13 16:58 ` Andrew Lunn
2017-12-13 0:00 ` [PATCH net-next v2 5/5] net: phy: phylink: Report MoCA as PORT_BNC Florian Fainelli
2017-12-13 20:55 ` [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA David Miller
5 siblings, 1 reply; 11+ messages in thread
From: Florian Fainelli @ 2017-12-13 0:00 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, rmk+kernel, davem, andrew, vivien.didelot
phylink_get_fixed_state() currently consults an optional "link_gpio"
GPIO descriptor, expand this mechanism to allow specifying a custom
callback. This is necessary to support out of band link notifcation
(e.g: from an interrupt within a MMIO register).
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/phy/phylink.c | 34 ++++++++++++++++++++++++++++++++--
include/linux/phylink.h | 3 +++
2 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 64e3eb73a237..1acdda69b3c6 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -54,6 +54,8 @@ struct phylink {
/* The link configuration settings */
struct phylink_link_state link_config;
struct gpio_desc *link_gpio;
+ void (*get_fixed_state)(struct net_device *dev,
+ struct phylink_link_state *s);
struct mutex state_mutex;
struct phylink_link_state phy_state;
@@ -350,12 +352,14 @@ static int phylink_get_mac_state(struct phylink *pl, struct phylink_link_state *
}
/* The fixed state is... fixed except for the link state,
- * which may be determined by a GPIO.
+ * which may be determined by a GPIO or a callback.
*/
static void phylink_get_fixed_state(struct phylink *pl, struct phylink_link_state *state)
{
*state = pl->link_config;
- if (pl->link_gpio)
+ if (pl->get_fixed_state)
+ pl->get_fixed_state(pl->netdev, state);
+ else if (pl->link_gpio)
state->link = !!gpiod_get_value(pl->link_gpio);
}
@@ -814,6 +818,32 @@ void phylink_disconnect_phy(struct phylink *pl)
}
EXPORT_SYMBOL_GPL(phylink_disconnect_phy);
+/**
+ * phylink_fixed_state_cb() - allow setting a fixed link callback
+ * @pl: a pointer to a &struct phylink returned from phylink_create()
+ * @cb: callback to execute to determine the fixed link state.
+ *
+ * The MAC driver should call this driver when the state of its link
+ * can be determined through e.g: an out of band MMIO register.
+ */
+int phylink_fixed_state_cb(struct phylink *pl,
+ void (*cb)(struct net_device *dev,
+ struct phylink_link_state *state))
+{
+ /* It does not make sense to let the link be overriden unless we use
+ * MLO_AN_FIXED
+ */
+ if (pl->link_an_mode != MLO_AN_FIXED)
+ return -EINVAL;
+
+ mutex_lock(&pl->state_mutex);
+ pl->get_fixed_state = cb;
+ mutex_unlock(&pl->state_mutex);
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(phylink_fixed_state_cb);
+
/**
* phylink_mac_change() - notify phylink of a change in MAC state
* @pl: a pointer to a &struct phylink returned from phylink_create()
diff --git a/include/linux/phylink.h b/include/linux/phylink.h
index 36e342b450c7..bd137c273d38 100644
--- a/include/linux/phylink.h
+++ b/include/linux/phylink.h
@@ -190,6 +190,9 @@ void phylink_destroy(struct phylink *);
int phylink_connect_phy(struct phylink *, struct phy_device *);
int phylink_of_phy_connect(struct phylink *, struct device_node *, u32 flags);
void phylink_disconnect_phy(struct phylink *);
+int phylink_fixed_state_cb(struct phylink *,
+ void (*cb)(struct net_device *dev,
+ struct phylink_link_state *));
void phylink_mac_change(struct phylink *, bool up);
--
2.14.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH net-next v2 5/5] net: phy: phylink: Report MoCA as PORT_BNC
2017-12-13 0:00 [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA Florian Fainelli
` (3 preceding siblings ...)
2017-12-13 0:00 ` [PATCH net-next v2 4/5] net: phy: phylink: Allow setting a custom link state callback Florian Fainelli
@ 2017-12-13 0:00 ` Florian Fainelli
2017-12-13 16:59 ` Andrew Lunn
2017-12-13 20:55 ` [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA David Miller
5 siblings, 1 reply; 11+ messages in thread
From: Florian Fainelli @ 2017-12-13 0:00 UTC (permalink / raw)
To: netdev; +Cc: Florian Fainelli, rmk+kernel, davem, andrew, vivien.didelot
Similarly to what PHYLIB already does, make sure that
PHY_INTERFACE_MODE_MOCA is reported as PORT_BNC.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/net/phy/phylink.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c
index 1acdda69b3c6..c89b8c63f16a 100644
--- a/drivers/net/phy/phylink.c
+++ b/drivers/net/phy/phylink.c
@@ -556,7 +556,10 @@ struct phylink *phylink_create(struct net_device *ndev,
pl->netdev = ndev;
pl->phy_state.interface = iface;
pl->link_interface = iface;
- pl->link_port = PORT_MII;
+ if (iface == PHY_INTERFACE_MODE_MOCA)
+ pl->link_port = PORT_BNC;
+ else
+ pl->link_port = PORT_MII;
pl->link_config.interface = iface;
pl->link_config.pause = MLO_PAUSE_AN;
pl->link_config.speed = SPEED_UNKNOWN;
--
2.14.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 1/5] net: phy: phylink: Allow specifying PHY device flags
2017-12-13 0:00 ` [PATCH net-next v2 1/5] net: phy: phylink: Allow specifying PHY device flags Florian Fainelli
@ 2017-12-13 16:54 ` Andrew Lunn
0 siblings, 0 replies; 11+ messages in thread
From: Andrew Lunn @ 2017-12-13 16:54 UTC (permalink / raw)
To: Florian Fainelli; +Cc: netdev, rmk+kernel, davem, vivien.didelot
On Tue, Dec 12, 2017 at 04:00:25PM -0800, Florian Fainelli wrote:
> In order to let subsystems like DSA fully utilize PHYLINK, we need to be able
> to communicate phy_device::flags from of_phy_{connect,attach} even when using
> PHYLINK APIs.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 3/5] net: phy: phylink: Remove error message
2017-12-13 0:00 ` [PATCH net-next v2 3/5] net: phy: phylink: Remove error message Florian Fainelli
@ 2017-12-13 16:56 ` Andrew Lunn
0 siblings, 0 replies; 11+ messages in thread
From: Andrew Lunn @ 2017-12-13 16:56 UTC (permalink / raw)
To: Florian Fainelli; +Cc: netdev, rmk+kernel, davem, vivien.didelot
On Tue, Dec 12, 2017 at 04:00:27PM -0800, Florian Fainelli wrote:
> Some subsystems like DSA may be trying to connect to a PHY through OF first,
> and then attempt a connect using a local MDIO bus, remove the error message:
> "unable to find PHY node" so we can let MAC drivers whether to print it or not.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 4/5] net: phy: phylink: Allow setting a custom link state callback
2017-12-13 0:00 ` [PATCH net-next v2 4/5] net: phy: phylink: Allow setting a custom link state callback Florian Fainelli
@ 2017-12-13 16:58 ` Andrew Lunn
0 siblings, 0 replies; 11+ messages in thread
From: Andrew Lunn @ 2017-12-13 16:58 UTC (permalink / raw)
To: Florian Fainelli; +Cc: netdev, rmk+kernel, davem, vivien.didelot
On Tue, Dec 12, 2017 at 04:00:28PM -0800, Florian Fainelli wrote:
> phylink_get_fixed_state() currently consults an optional "link_gpio"
> GPIO descriptor, expand this mechanism to allow specifying a custom
> callback. This is necessary to support out of band link notifcation
> (e.g: from an interrupt within a MMIO register).
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 5/5] net: phy: phylink: Report MoCA as PORT_BNC
2017-12-13 0:00 ` [PATCH net-next v2 5/5] net: phy: phylink: Report MoCA as PORT_BNC Florian Fainelli
@ 2017-12-13 16:59 ` Andrew Lunn
0 siblings, 0 replies; 11+ messages in thread
From: Andrew Lunn @ 2017-12-13 16:59 UTC (permalink / raw)
To: Florian Fainelli; +Cc: netdev, rmk+kernel, davem, vivien.didelot
On Tue, Dec 12, 2017 at 04:00:29PM -0800, Florian Fainelli wrote:
> Similarly to what PHYLIB already does, make sure that
> PHY_INTERFACE_MODE_MOCA is reported as PORT_BNC.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA
2017-12-13 0:00 [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA Florian Fainelli
` (4 preceding siblings ...)
2017-12-13 0:00 ` [PATCH net-next v2 5/5] net: phy: phylink: Report MoCA as PORT_BNC Florian Fainelli
@ 2017-12-13 20:55 ` David Miller
5 siblings, 0 replies; 11+ messages in thread
From: David Miller @ 2017-12-13 20:55 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, rmk+kernel, andrew, vivien.didelot
From: Florian Fainelli <f.fainelli@gmail.com>
Date: Tue, 12 Dec 2017 16:00:24 -0800
> In preparation for having DSA migrate to PHYLINK, I had to come up with a
> number of preparatory patches:
>
> - we need to be able to pass phy_flags from an external component calling
> phylink_of_phy_connect()
> - DSA tries to connect through OF first, then fallsback using its own internal
> MDIO bus, in that case we would both show an error, but also not know what
> the correct phy_interface_t would be, instead use the PHY device/driver provided
> one
> - Finally bcm_sf2 makes use of all possible PHYs out there: internal, external,
> fixed, and MoCA, the latter requires a bit of help to signal link notifications
> through a MMIO interrupt, as well a report a correct PORT type
>
> Changes in v2:
>
> - rebased against latest net-next/master
> - added kernel doc documentation
> - dropped error message in phylink_of_phy_connect() as suggested by Russell
Series applied, thanks Florian.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-12-13 20:55 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-13 0:00 [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA Florian Fainelli
2017-12-13 0:00 ` [PATCH net-next v2 1/5] net: phy: phylink: Allow specifying PHY device flags Florian Fainelli
2017-12-13 16:54 ` Andrew Lunn
2017-12-13 0:00 ` [PATCH net-next v2 2/5] net: phy: phylink: Use PHY device interface if N/A Florian Fainelli
2017-12-13 0:00 ` [PATCH net-next v2 3/5] net: phy: phylink: Remove error message Florian Fainelli
2017-12-13 16:56 ` Andrew Lunn
2017-12-13 0:00 ` [PATCH net-next v2 4/5] net: phy: phylink: Allow setting a custom link state callback Florian Fainelli
2017-12-13 16:58 ` Andrew Lunn
2017-12-13 0:00 ` [PATCH net-next v2 5/5] net: phy: phylink: Report MoCA as PORT_BNC Florian Fainelli
2017-12-13 16:59 ` Andrew Lunn
2017-12-13 20:55 ` [PATCH net-next v2 0/5] PHYLINK preparatory patches for DSA David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).