summaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c
diff options
context:
space:
mode:
authorShengzhou Liu <Shengzhou.Liu@freescale.com>2013-04-09 09:05:31 (GMT)
committerFleming Andrew-AFLEMING <AFLEMING@freescale.com>2013-04-16 15:39:24 (GMT)
commitcf620d252d9e85e6012dcd35ce7a38f73d903661 (patch)
treed5cec3947372a6b44ab1b6b976b0085f16dd5f3e /drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c
parentba3826a63a89a9efd73c984cc633bca4bdc2434c (diff)
downloadlinux-fsl-qoriq-cf620d252d9e85e6012dcd35ce7a38f73d903661.tar.xz
powerpc/dpaa_1588: add sysfs support for ptp 1588
The dpaa 1588 can be disabled/enabled via sysfs in runtime. By default, the dpaa 1588 is disabled, that means no 1588 action activated during the processing of ethernet frames. To enable 1588: echo 1 > /sys/devices/<DIR>/fmx-gby/ptp_1588 To disable 1588: echo 0 > /sys/devices/<DIR>/fmx-gby/ptp_1588 Signed-off-by: Shengzhou Liu <Shengzhou.Liu@freescale.com> Change-Id: I9f21f47c1f5eeb7b5f05e43e2ec6fe41fa3e697f Reviewed-on: http://git.am.freescale.net:8181/1150 Reviewed-by: Hamciuc Bogdan-BHAMCIU1 <bogdan.hamciuc@freescale.com> Reviewed-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com> Tested-by: Fleming Andrew-AFLEMING <AFLEMING@freescale.com>
Diffstat (limited to 'drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c')
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c49
1 files changed, 48 insertions, 1 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c
index 1aed378..24d64db 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_sysfs.c
@@ -37,6 +37,9 @@
#include <linux/io.h>
#include <linux/of_net.h>
#include "dpaa_eth.h"
+#ifdef CONFIG_FSL_DPA_1588
+#include "dpaa_1588.h"
+#endif
static ssize_t dpaa_eth_show_addr(struct device *dev,
struct device_attribute *attr, char *buf)
@@ -156,11 +159,55 @@ static ssize_t dpaa_eth_show_mac_regs(struct device *dev,
return 0;
}
+
+#ifdef CONFIG_FSL_DPA_1588
+static ssize_t dpaa_eth_show_ptp_1588(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct dpa_priv_s *priv = netdev_priv(to_net_dev(dev));
+
+ if (priv->tsu && priv->tsu->valid)
+ return sprintf(buf, "1\n");
+ else
+ return sprintf(buf, "0\n");
+}
+
+static ssize_t dpaa_eth_set_ptp_1588(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct dpa_priv_s *priv = netdev_priv(to_net_dev(dev));
+ unsigned int num;
+ unsigned long flags;
+
+ if (kstrtouint(buf, 0, &num) < 0)
+ return -EINVAL;
+
+ local_irq_save(flags);
+
+ if (num) {
+ if (priv->tsu)
+ priv->tsu->valid = TRUE;
+ } else {
+ if (priv->tsu)
+ priv->tsu->valid = FALSE;
+ }
+
+ local_irq_restore(flags);
+
+ return count;
+}
+#endif
+
static struct device_attribute dpaa_eth_attrs[] = {
__ATTR(device_addr, S_IRUGO, dpaa_eth_show_addr, NULL),
__ATTR(fqids, S_IRUGO, dpaa_eth_show_fqids, NULL),
__ATTR(dflt_bpid, S_IRUGO, dpaa_eth_show_dflt_bpid, NULL),
- __ATTR(mac_regs, S_IRUGO, dpaa_eth_show_mac_regs, NULL)
+ __ATTR(mac_regs, S_IRUGO, dpaa_eth_show_mac_regs, NULL),
+#ifdef CONFIG_FSL_DPA_1588
+ __ATTR(ptp_1588, S_IRUGO | S_IWUSR, dpaa_eth_show_ptp_1588,
+ dpaa_eth_set_ptp_1588),
+#endif
};
void dpaa_eth_sysfs_init(struct device *dev)