diff options
author | Lakshit Tyagi <ltyagi@codeaurora.org> | 2019-06-27 22:19:49 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-07-24 03:45:36 -0700 |
commit | f4d187ecd06de82cf0e66f6da5ead179d1d0db63 (patch) | |
tree | f0a64a5a23f1e4753d779c39588481eadd00288f /drivers/emac-dwc-eqos | |
parent | 41dfdf84f5e2108784fd4e217c190a1c612c30e0 (diff) | |
download | data-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.c | 28 |
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(ð_pps_cfg, req->ptr, + sizeof(struct ETH_PPS_Config))) { + return -EFAULT; + } + req->ptr = ð_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(ð_pps_cfg, req->ptr, + sizeof(struct ETH_PPS_Config))) { + return -EFAULT; + } + req->ptr = ð_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(ð_pps_cfg, req.ptr, - sizeof(struct ETH_PPS_Config))) { - return -EFAULT; - } - req.ptr = ð_pps_cfg; -#endif ret = DWC_ETH_QOS_handle_prv_ioctl(pdata, &req); req.command_error = ret; |