diff mbox series

net: xilinx: emaclite: add minimal ndo_do_ioctl hook

Message ID 20190408090157.10879-1-alexandru.ardelean@analog.com
State Accepted
Delegated to: David Miller
Headers show
Series net: xilinx: emaclite: add minimal ndo_do_ioctl hook | expand

Commit Message

Alexandru Ardelean April 8, 2019, 9:01 a.m. UTC
This hook only implements a minimal set of ioctl hooks to be able to access
MII regs by using phytool.
When using this simple MAC controller, it's pretty difficult to do
debugging of the PHY chip without checking MII regs.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
---
 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Comments

David Miller April 8, 2019, 5 p.m. UTC | #1
From: Alexandru Ardelean <alexandru.ardelean@analog.com>
Date: Mon, 8 Apr 2019 12:01:57 +0300

> This hook only implements a minimal set of ioctl hooks to be able to access
> MII regs by using phytool.
> When using this simple MAC controller, it's pretty difficult to do
> debugging of the PHY chip without checking MII regs.
> 
> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
> Reviewed-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>

Applied to net-next.
diff mbox series

Patch

diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
index b03a417d0073..0aea05ac6dcc 100644
--- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
+++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
@@ -1229,12 +1229,29 @@  xemaclite_poll_controller(struct net_device *ndev)
 }
 #endif
 
+/* Ioctl MII Interface */
+static int xemaclite_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
+{
+	if (!dev->phydev || !netif_running(dev))
+		return -EINVAL;
+
+	switch (cmd) {
+	case SIOCGMIIPHY:
+	case SIOCGMIIREG:
+	case SIOCSMIIREG:
+		return phy_mii_ioctl(dev->phydev, rq, cmd);
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
 static const struct net_device_ops xemaclite_netdev_ops = {
 	.ndo_open		= xemaclite_open,
 	.ndo_stop		= xemaclite_close,
 	.ndo_start_xmit		= xemaclite_send,
 	.ndo_set_mac_address	= xemaclite_set_mac_address,
 	.ndo_tx_timeout		= xemaclite_tx_timeout,
+	.ndo_do_ioctl		= xemaclite_ioctl,
 #ifdef CONFIG_NET_POLL_CONTROLLER
 	.ndo_poll_controller = xemaclite_poll_controller,
 #endif