2020-05-26 15:05:40

by Antoine Tenart

[permalink] [raw]
Subject: [PATCH net-next 0/2] net: mscc: allow forwarding ioctl operations to attached PHYs

Hello,

These two patches allow forwarding ioctl to the PHY MII implementation,
and support is added for offloading timestamping operations to
compatible attached PHYs.

Thanks,
Antoine

Antoine Tenart (2):
net: mscc: use the PHY MII ioctl interface when possible
net: mscc: allow offloading timestamping operations to the PHY

drivers/net/ethernet/mscc/ocelot.c | 23 ++++++++++++-----------
drivers/net/ethernet/mscc/ocelot_board.c | 3 ++-
2 files changed, 14 insertions(+), 12 deletions(-)

--
2.26.2


2020-05-26 15:07:03

by Antoine Tenart

[permalink] [raw]
Subject: [PATCH net-next 2/2] net: mscc: allow offloading timestamping operations to the PHY

This patch adds support for offloading timestamping operations not only
to the Ocelot switch (as already supported) but to compatible PHYs.
When both the PHY and the Ocelot switch support timestamping operations,
the PHY implementation is chosen as the timestamp will happen closer to
the medium.

Signed-off-by: Antoine Tenart <[email protected]>
---
drivers/net/ethernet/mscc/ocelot.c | 5 ++++-
drivers/net/ethernet/mscc/ocelot_board.c | 3 ++-
2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c
index 2151c08a57c7..9cfe1fd98c30 100644
--- a/drivers/net/ethernet/mscc/ocelot.c
+++ b/drivers/net/ethernet/mscc/ocelot.c
@@ -1204,7 +1204,10 @@ static int ocelot_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
struct ocelot *ocelot = priv->port.ocelot;
int port = priv->chip_port;

- if (ocelot->ptp) {
+ /* If the attached PHY device isn't capable of timestamping operations,
+ * use our own (when possible).
+ */
+ if (!phy_has_hwtstamp(dev->phydev) && ocelot->ptp) {
switch (cmd) {
case SIOCSHWTSTAMP:
return ocelot_hwstamp_set(ocelot, port, ifr);
diff --git a/drivers/net/ethernet/mscc/ocelot_board.c b/drivers/net/ethernet/mscc/ocelot_board.c
index 67a8d61c926a..4a15d2ff8b70 100644
--- a/drivers/net/ethernet/mscc/ocelot_board.c
+++ b/drivers/net/ethernet/mscc/ocelot_board.c
@@ -189,7 +189,8 @@ static irqreturn_t ocelot_xtr_irq_handler(int irq, void *arg)
skb->offload_fwd_mark = 1;

skb->protocol = eth_type_trans(skb, dev);
- netif_rx(skb);
+ if (!skb_defer_rx_timestamp(skb))
+ netif_rx(skb);
dev->stats.rx_bytes += len;
dev->stats.rx_packets++;
} while (ocelot_read(ocelot, QS_XTR_DATA_PRESENT) & BIT(grp));
--
2.26.2

2020-05-26 15:07:27

by Antoine Tenart

[permalink] [raw]
Subject: [PATCH net-next 1/2] net: mscc: use the PHY MII ioctl interface when possible

Allow ioctl to be implemented by the PHY, when a PHY is attached to the
Ocelot switch. In case the ioctl is a request to set or get the hardware
timestamp, use the Ocelot switch implementation for now.

Signed-off-by: Antoine Tenart <[email protected]>
---
drivers/net/ethernet/mscc/ocelot.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/mscc/ocelot.c b/drivers/net/ethernet/mscc/ocelot.c
index e621c4c3ee86..2151c08a57c7 100644
--- a/drivers/net/ethernet/mscc/ocelot.c
+++ b/drivers/net/ethernet/mscc/ocelot.c
@@ -1204,18 +1204,16 @@ static int ocelot_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
struct ocelot *ocelot = priv->port.ocelot;
int port = priv->chip_port;

- /* The function is only used for PTP operations for now */
- if (!ocelot->ptp)
- return -EOPNOTSUPP;
-
- switch (cmd) {
- case SIOCSHWTSTAMP:
- return ocelot_hwstamp_set(ocelot, port, ifr);
- case SIOCGHWTSTAMP:
- return ocelot_hwstamp_get(ocelot, port, ifr);
- default:
- return -EOPNOTSUPP;
+ if (ocelot->ptp) {
+ switch (cmd) {
+ case SIOCSHWTSTAMP:
+ return ocelot_hwstamp_set(ocelot, port, ifr);
+ case SIOCGHWTSTAMP:
+ return ocelot_hwstamp_get(ocelot, port, ifr);
+ }
}
+
+ return phy_mii_ioctl(dev->phydev, ifr, cmd);
}

static const struct net_device_ops ocelot_port_netdev_ops = {
--
2.26.2

2020-05-27 15:56:47

by Andrew Lunn

[permalink] [raw]
Subject: Re: [PATCH net-next 1/2] net: mscc: use the PHY MII ioctl interface when possible

On Tue, May 26, 2020 at 05:01:48PM +0200, Antoine Tenart wrote:
> Allow ioctl to be implemented by the PHY, when a PHY is attached to the
> Ocelot switch. In case the ioctl is a request to set or get the hardware
> timestamp, use the Ocelot switch implementation for now.
>
> Signed-off-by: Antoine Tenart <[email protected]>

Reviewed-by: Andrew Lunn <[email protected]>

Andrew

2020-05-27 18:02:03

by Andrew Lunn

[permalink] [raw]
Subject: Re: [PATCH net-next 2/2] net: mscc: allow offloading timestamping operations to the PHY

On Tue, May 26, 2020 at 05:01:49PM +0200, Antoine Tenart wrote:
> This patch adds support for offloading timestamping operations not only
> to the Ocelot switch (as already supported) but to compatible PHYs.
> When both the PHY and the Ocelot switch support timestamping operations,
> the PHY implementation is chosen as the timestamp will happen closer to
> the medium.
>
> Signed-off-by: Antoine Tenart <[email protected]>

Reviewed-by: Andrew Lunn <[email protected]>

Andrew

2020-05-27 21:58:41

by David Miller

[permalink] [raw]
Subject: Re: [PATCH net-next 0/2] net: mscc: allow forwarding ioctl operations to attached PHYs

From: Antoine Tenart <[email protected]>
Date: Tue, 26 May 2020 17:01:47 +0200

> These two patches allow forwarding ioctl to the PHY MII implementation,
> and support is added for offloading timestamping operations to
> compatible attached PHYs.

Series applied, thanks.