summaryrefslogtreecommitdiff
path: root/drivers/emac-dwc-eqos
diff options
context:
space:
mode:
authorLakshit Tyagi <ltyagi@codeaurora.org>2019-06-27 22:19:49 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2019-07-24 03:45:36 -0700
commitf4d187ecd06de82cf0e66f6da5ead179d1d0db63 (patch)
treef0a64a5a23f1e4753d779c39588481eadd00288f /drivers/emac-dwc-eqos
parent41dfdf84f5e2108784fd4e217c190a1c612c30e0 (diff)
downloaddata-kernel-f4d187ecd06de82cf0e66f6da5ead179d1d0db63.tar.gz
data-kernel: EMAC: Resolve PPS ioctl call issue
- Resolve the unsupported ioctl error issue seen for AVB algorithm Change-Id: I158ea7cd6dd2da75b50d76396e760ff7811cb48d Signed-off-by: Lakshit Tyagi <ltyagi@codeaurora.org>
Diffstat (limited to 'drivers/emac-dwc-eqos')
-rw-r--r--drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c28
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c b/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c
index d6a2986..769017c 100644
--- a/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c
+++ b/drivers/emac-dwc-eqos/DWC_ETH_QOS_drv.c
@@ -5406,6 +5406,9 @@ static int DWC_ETH_QOS_handle_prv_ioctl(struct DWC_ETH_QOS_prv_data *pdata,
struct hw_if_struct *hw_if = &pdata->hw_if;
struct net_device *dev = pdata->dev;
int ret = 0;
+#ifdef CONFIG_PPS_OUTPUT
+ struct ETH_PPS_Config eth_pps_cfg;
+#endif
DBGPR("-->DWC_ETH_QOS_handle_prv_ioctl\n");
@@ -5779,6 +5782,13 @@ static int DWC_ETH_QOS_handle_prv_ioctl(struct DWC_ETH_QOS_prv_data *pdata,
#ifdef CONFIG_PPS_OUTPUT
case DWC_ETH_QOS_CONFIG_PTPCLK_CMD:
+
+ if (copy_from_user(&eth_pps_cfg, req->ptr,
+ sizeof(struct ETH_PPS_Config))) {
+ return -EFAULT;
+ }
+ req->ptr = &eth_pps_cfg;
+
if(pdata->hw_feat.pps_out_num == 0)
ret = -EOPNOTSUPP;
else
@@ -5786,6 +5796,13 @@ static int DWC_ETH_QOS_handle_prv_ioctl(struct DWC_ETH_QOS_prv_data *pdata,
break;
case DWC_ETH_QOS_CONFIG_PPSOUT_CMD:
+
+ if (copy_from_user(&eth_pps_cfg, req->ptr,
+ sizeof(struct ETH_PPS_Config))) {
+ return -EFAULT;
+ }
+ req->ptr = &eth_pps_cfg;
+
if(pdata->hw_feat.pps_out_num == 0)
ret = -EOPNOTSUPP;
else
@@ -6147,9 +6164,7 @@ static int DWC_ETH_QOS_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
{
struct DWC_ETH_QOS_prv_data *pdata = netdev_priv(dev);
struct ifr_data_struct req;
-#ifdef CONFIG_PPS_OUTPUT
- struct ETH_PPS_Config eth_pps_cfg;
-#endif
+
struct mii_ioctl_data *data = if_mii(ifr);
unsigned int reg_val = 0;
int ret = 0;
@@ -6191,13 +6206,6 @@ static int DWC_ETH_QOS_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
if (copy_from_user(&req, ifr->ifr_ifru.ifru_data,
sizeof(struct ifr_data_struct)))
return -EFAULT;
-#ifdef CONFIG_PPS_OUTPUT
- if (copy_from_user(&eth_pps_cfg, req.ptr,
- sizeof(struct ETH_PPS_Config))) {
- return -EFAULT;
- }
- req.ptr = &eth_pps_cfg;
-#endif
ret = DWC_ETH_QOS_handle_prv_ioctl(pdata, &req);
req.command_error = ret;