diff mbox series

[09/14] net: axienet: Add mii-tool support

Message ID 20200110115415.75683-10-andre.przywara@arm.com (mailing list archive)
State New, archived
Headers show
Series net: axienet: Error handling, SGMII and 64-bit DMA fixes | expand

Commit Message

Andre Przywara Jan. 10, 2020, 11:54 a.m. UTC
mii-tool is useful for debugging, and all it requires to work is to wire
up the ioctl ops function pointer.
Add this to the axienet driver to enable mii-tool.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
 drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Radhey Shyam Pandey Jan. 13, 2020, 6:12 a.m. UTC | #1
> -----Original Message-----
> From: Andre Przywara <andre.przywara@arm.com>
> Sent: Friday, January 10, 2020 5:24 PM
> To: David S . Miller <davem@davemloft.net>; Radhey Shyam Pandey
> <radheys@xilinx.com>
> Cc: Michal Simek <michals@xilinx.com>; Robert Hancock
> <hancock@sedsystems.ca>; netdev@vger.kernel.org; linux-arm-
> kernel@lists.infradead.org; linux-kernel@vger.kernel.org
> Subject: [PATCH 09/14] net: axienet: Add mii-tool support
> 
> mii-tool is useful for debugging, and all it requires to work is to wire
> up the ioctl ops function pointer.
> Add this to the axienet driver to enable mii-tool.
> 
> Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> ---
>  drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> index 7a747345e98e..64f799f3d248 100644
> --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> @@ -1152,6 +1152,16 @@ static void axienet_poll_controller(struct net_device
> *ndev)
>  }
>  #endif
> 
> +static int axienet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
> +{
> +	struct axienet_local *lp = netdev_priv(dev);
> +
> +	if (!netif_running(dev))
> +		return -EINVAL;

I think phy ioctl should be allowed even if the device is not up. 
Or is there any specific reason for keeping it?

> +
> +	return phylink_mii_ioctl(lp->phylink, rq, cmd);
> +}
> +
>  static const struct net_device_ops axienet_netdev_ops = {
>  	.ndo_open = axienet_open,
>  	.ndo_stop = axienet_stop,
> @@ -1159,6 +1169,7 @@ static const struct net_device_ops
> axienet_netdev_ops = {
>  	.ndo_change_mtu	= axienet_change_mtu,
>  	.ndo_set_mac_address = netdev_set_mac_address,
>  	.ndo_validate_addr = eth_validate_addr,
> +	.ndo_do_ioctl = axienet_ioctl,
>  	.ndo_set_rx_mode = axienet_set_multicast_list,
>  #ifdef CONFIG_NET_POLL_CONTROLLER
>  	.ndo_poll_controller = axienet_poll_controller,
> --
> 2.17.1
Andre Przywara March 12, 2020, 11:41 a.m. UTC | #2
On Mon, 13 Jan 2020 06:12:10 +0000
Radhey Shyam Pandey <radheys@xilinx.com> wrote:

Hi,

(sorry, forgot to send this out before posting v2)

> > -----Original Message-----
> > From: Andre Przywara <andre.przywara@arm.com>
> > Sent: Friday, January 10, 2020 5:24 PM
> > To: David S . Miller <davem@davemloft.net>; Radhey Shyam Pandey
> > <radheys@xilinx.com>
> > Cc: Michal Simek <michals@xilinx.com>; Robert Hancock
> > <hancock@sedsystems.ca>; netdev@vger.kernel.org; linux-arm-
> > kernel@lists.infradead.org; linux-kernel@vger.kernel.org
> > Subject: [PATCH 09/14] net: axienet: Add mii-tool support
> > 
> > mii-tool is useful for debugging, and all it requires to work is to wire
> > up the ioctl ops function pointer.
> > Add this to the axienet driver to enable mii-tool.
> > 
> > Signed-off-by: Andre Przywara <andre.przywara@arm.com>
> > ---
> >  drivers/net/ethernet/xilinx/xilinx_axienet_main.c | 11 +++++++++++
> >  1 file changed, 11 insertions(+)
> > 
> > diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > index 7a747345e98e..64f799f3d248 100644
> > --- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > +++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
> > @@ -1152,6 +1152,16 @@ static void axienet_poll_controller(struct net_device
> > *ndev)
> >  }
> >  #endif
> > 
> > +static int axienet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
> > +{
> > +	struct axienet_local *lp = netdev_priv(dev);
> > +
> > +	if (!netif_running(dev))
> > +		return -EINVAL;  
> 
> I think phy ioctl should be allowed even if the device is not up. 
> Or is there any specific reason for keeping it?

I found that some of the drivers check this (macb, stmmac), while others (dpaa2, mvneta, mvpp2, mtk_eth) don't. I don't know the reasons for that, so I play safe here.
Happy to change this if someone provides some rationale.

Cheers,
Andre.

> 
> > +
> > +	return phylink_mii_ioctl(lp->phylink, rq, cmd);
> > +}
> > +
> >  static const struct net_device_ops axienet_netdev_ops = {
> >  	.ndo_open = axienet_open,
> >  	.ndo_stop = axienet_stop,
> > @@ -1159,6 +1169,7 @@ static const struct net_device_ops
> > axienet_netdev_ops = {
> >  	.ndo_change_mtu	= axienet_change_mtu,
> >  	.ndo_set_mac_address = netdev_set_mac_address,
> >  	.ndo_validate_addr = eth_validate_addr,
> > +	.ndo_do_ioctl = axienet_ioctl,
> >  	.ndo_set_rx_mode = axienet_set_multicast_list,
> >  #ifdef CONFIG_NET_POLL_CONTROLLER
> >  	.ndo_poll_controller = axienet_poll_controller,
> > --
> > 2.17.1  
>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
index 7a747345e98e..64f799f3d248 100644
--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
+++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
@@ -1152,6 +1152,16 @@  static void axienet_poll_controller(struct net_device *ndev)
 }
 #endif
 
+static int axienet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+{
+	struct axienet_local *lp = netdev_priv(dev);
+
+	if (!netif_running(dev))
+		return -EINVAL;
+
+	return phylink_mii_ioctl(lp->phylink, rq, cmd);
+}
+
 static const struct net_device_ops axienet_netdev_ops = {
 	.ndo_open = axienet_open,
 	.ndo_stop = axienet_stop,
@@ -1159,6 +1169,7 @@  static const struct net_device_ops axienet_netdev_ops = {
 	.ndo_change_mtu	= axienet_change_mtu,
 	.ndo_set_mac_address = netdev_set_mac_address,
 	.ndo_validate_addr = eth_validate_addr,
+	.ndo_do_ioctl = axienet_ioctl,
 	.ndo_set_rx_mode = axienet_set_multicast_list,
 #ifdef CONFIG_NET_POLL_CONTROLLER
 	.ndo_poll_controller = axienet_poll_controller,