[PATCH 1/2] net: dpaa2: move DPAA2 PTP driver out of staging/

2018-09-27 Thread Yangbo Lu
This patch is to move DPAA2 PTP driver out of staging/
since the dpaa2-eth had been moved out.

Signed-off-by: Yangbo Lu 
---
 drivers/net/ethernet/freescale/Kconfig |9 +
 drivers/net/ethernet/freescale/dpaa2/Kconfig   |   15 +++
 drivers/net/ethernet/freescale/dpaa2/Makefile  |6 --
 .../ethernet/freescale/dpaa2}/dprtc-cmd.h  |0
 .../rtc => net/ethernet/freescale/dpaa2}/dprtc.c   |0
 .../rtc => net/ethernet/freescale/dpaa2}/dprtc.h   |0
 .../rtc => net/ethernet/freescale/dpaa2}/rtc.c |0
 .../rtc => net/ethernet/freescale/dpaa2}/rtc.h |0
 drivers/staging/fsl-dpaa2/Kconfig  |8 
 drivers/staging/fsl-dpaa2/Makefile |1 -
 drivers/staging/fsl-dpaa2/rtc/Makefile |7 ---
 11 files changed, 20 insertions(+), 26 deletions(-)
 create mode 100644 drivers/net/ethernet/freescale/dpaa2/Kconfig
 rename drivers/{staging/fsl-dpaa2/rtc => 
net/ethernet/freescale/dpaa2}/dprtc-cmd.h (100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/dprtc.c 
(100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/dprtc.h 
(100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/rtc.c 
(100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/rtc.h 
(100%)
 delete mode 100644 drivers/staging/fsl-dpaa2/rtc/Makefile

diff --git a/drivers/net/ethernet/freescale/Kconfig 
b/drivers/net/ethernet/freescale/Kconfig
index 7a30276..d3a62bc 100644
--- a/drivers/net/ethernet/freescale/Kconfig
+++ b/drivers/net/ethernet/freescale/Kconfig
@@ -96,13 +96,6 @@ config GIANFAR
  on the 8540.
 
 source "drivers/net/ethernet/freescale/dpaa/Kconfig"
-
-config FSL_DPAA2_ETH
-   tristate "Freescale DPAA2 Ethernet"
-   depends on FSL_MC_BUS && FSL_MC_DPIO
-   depends on NETDEVICES && ETHERNET
-   ---help---
- Ethernet driver for Freescale DPAA2 SoCs, using the
- Freescale MC bus driver
+source "drivers/net/ethernet/freescale/dpaa2/Kconfig"
 
 endif # NET_VENDOR_FREESCALE
diff --git a/drivers/net/ethernet/freescale/dpaa2/Kconfig 
b/drivers/net/ethernet/freescale/dpaa2/Kconfig
new file mode 100644
index 000..44c5c3a
--- /dev/null
+++ b/drivers/net/ethernet/freescale/dpaa2/Kconfig
@@ -0,0 +1,15 @@
+config FSL_DPAA2_ETH
+   tristate "Freescale DPAA2 Ethernet"
+   depends on FSL_MC_BUS && FSL_MC_DPIO
+   depends on NETDEVICES && ETHERNET
+   help
+ Ethernet driver for Freescale DPAA2 SoCs, using the
+ Freescale MC bus driver
+
+config FSL_DPAA2_PTP_CLOCK
+   tristate "Freescale DPAA2 PTP Clock"
+   depends on FSL_DPAA2_ETH && POSIX_TIMERS
+   select PTP_1588_CLOCK
+   help
+ This driver adds support for using the DPAA2 1588 timer module
+ as a PTP clock.
diff --git a/drivers/net/ethernet/freescale/dpaa2/Makefile 
b/drivers/net/ethernet/freescale/dpaa2/Makefile
index 9315ecd..312e37f 100644
--- a/drivers/net/ethernet/freescale/dpaa2/Makefile
+++ b/drivers/net/ethernet/freescale/dpaa2/Makefile
@@ -3,9 +3,11 @@
 # Makefile for the Freescale DPAA2 Ethernet controller
 #
 
-obj-$(CONFIG_FSL_DPAA2_ETH) += fsl-dpaa2-eth.o
+obj-$(CONFIG_FSL_DPAA2_ETH)+= fsl-dpaa2-eth.o
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK)  += fsl-dpaa2-rtc.o
 
-fsl-dpaa2-eth-objs:= dpaa2-eth.o dpaa2-ethtool.o dpni.o
+fsl-dpaa2-eth-objs := dpaa2-eth.o dpaa2-ethtool.o dpni.o
+fsl-dpaa2-rtc-objs := rtc.o dprtc.o
 
 # Needed by the tracing framework
 CFLAGS_dpaa2-eth.o := -I$(src)
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h 
b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
rename to drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc.c 
b/drivers/net/ethernet/freescale/dpaa2/dprtc.c
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/dprtc.c
rename to drivers/net/ethernet/freescale/dpaa2/dprtc.c
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc.h 
b/drivers/net/ethernet/freescale/dpaa2/dprtc.h
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/dprtc.h
rename to drivers/net/ethernet/freescale/dpaa2/dprtc.h
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.c 
b/drivers/net/ethernet/freescale/dpaa2/rtc.c
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/rtc.c
rename to drivers/net/ethernet/freescale/dpaa2/rtc.c
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.h 
b/drivers/net/ethernet/freescale/dpaa2/rtc.h
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/rtc.h
rename to drivers/net/ethernet/freescale/dpaa2/rtc.h
diff --git a/drivers/staging/fsl-dpaa2/Kconfig 
b/drivers/staging/fsl-dpaa2/Kconfig
index 59aaae7..991e154 100644
--- a/drivers/stagin

[PATCH 2/2] MAINTAINERS: update files maintained under DPAA2 PTP/ETHERNET

2018-09-27 Thread Yangbo Lu
The files maintained under DPAA2 PTP/ETHERNET needs to
be updated since dpaa2 ptp driver had been moved into
drivers/net/ethernet/freescale/dpaa2/.

Signed-off-by: Yangbo Lu 
---
 MAINTAINERS |   11 ---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 15565de..ba6f441 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4530,7 +4530,11 @@ DPAA2 ETHERNET DRIVER
 M: Ioana Radulescu 
 L: net...@vger.kernel.org
 S: Maintained
-F: drivers/net/ethernet/freescale/dpaa2
+F: drivers/net/ethernet/freescale/dpaa2/dpaa2-eth*
+F: drivers/net/ethernet/freescale/dpaa2/dpni*
+F: drivers/net/ethernet/freescale/dpaa2/dpkg.h
+F: drivers/net/ethernet/freescale/dpaa2/Makefile
+F: drivers/net/ethernet/freescale/dpaa2/Kconfig
 
 DPAA2 ETHERNET SWITCH DRIVER
 M: Ioana Radulescu 
@@ -4541,9 +4545,10 @@ F:   drivers/staging/fsl-dpaa2/ethsw
 
 DPAA2 PTP CLOCK DRIVER
 M: Yangbo Lu 
-L: linux-ker...@vger.kernel.org
+L: net...@vger.kernel.org
 S: Maintained
-F: drivers/staging/fsl-dpaa2/rtc
+F: drivers/net/ethernet/freescale/dpaa2/rtc*
+F: drivers/net/ethernet/freescale/dpaa2/dprtc*
 
 DPT_I2O SCSI RAID DRIVER
 M: Adaptec OEM Raid Solutions 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v2, 2/5] MAINTAINERS: update files maintained under DPAA2 PTP/ETHERNET

2018-09-29 Thread Yangbo Lu
The files maintained under DPAA2 PTP/ETHERNET needs to
be updated since dpaa2 ptp driver had been moved into
drivers/net/ethernet/freescale/dpaa2/.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Updated files rtc* as dpaa2-ptp*.
---
 MAINTAINERS |   11 ---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 15565de..de33537 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4530,7 +4530,11 @@ DPAA2 ETHERNET DRIVER
 M: Ioana Radulescu 
 L: net...@vger.kernel.org
 S: Maintained
-F: drivers/net/ethernet/freescale/dpaa2
+F: drivers/net/ethernet/freescale/dpaa2/dpaa2-eth*
+F: drivers/net/ethernet/freescale/dpaa2/dpni*
+F: drivers/net/ethernet/freescale/dpaa2/dpkg.h
+F: drivers/net/ethernet/freescale/dpaa2/Makefile
+F: drivers/net/ethernet/freescale/dpaa2/Kconfig
 
 DPAA2 ETHERNET SWITCH DRIVER
 M: Ioana Radulescu 
@@ -4541,9 +4545,10 @@ F:   drivers/staging/fsl-dpaa2/ethsw
 
 DPAA2 PTP CLOCK DRIVER
 M: Yangbo Lu 
-L: linux-ker...@vger.kernel.org
+L: net...@vger.kernel.org
 S: Maintained
-F: drivers/staging/fsl-dpaa2/rtc
+F: drivers/net/ethernet/freescale/dpaa2/dpaa-ptp*
+F: drivers/net/ethernet/freescale/dpaa2/dprtc*
 
 DPT_I2O SCSI RAID DRIVER
 M: Adaptec OEM Raid Solutions 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v2, 5/5] net: dpaa2: fix and improve dpaa2-ptp driver

2018-09-29 Thread Yangbo Lu
This patch is to fix and improve dpaa2-ptp driver
in some places.

- Fixed the return for some functions.
- Replaced kzalloc with devm_kzalloc.
- Removed dev_set_drvdata(dev, NULL).
- Made ptp_dpaa2_caps const.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
---
 drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c |   25 --
 1 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
index c73eef2..84b942b 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
@@ -46,7 +46,7 @@ static int ptp_dpaa2_adjfreq(struct ptp_clock_info *ptp, s32 
ppb)
  mc_dev->mc_handle, tmr_add);
if (err)
dev_err(dev, "dprtc_set_freq_compensation err %d\n", err);
-   return 0;
+   return err;
 }
 
 static int ptp_dpaa2_adjtime(struct ptp_clock_info *ptp, s64 delta)
@@ -61,17 +61,15 @@ static int ptp_dpaa2_adjtime(struct ptp_clock_info *ptp, 
s64 delta)
err = dprtc_get_time(mc_dev->mc_io, 0, mc_dev->mc_handle, &now);
if (err) {
dev_err(dev, "dprtc_get_time err %d\n", err);
-   return 0;
+   return err;
}
 
now += delta;
 
err = dprtc_set_time(mc_dev->mc_io, 0, mc_dev->mc_handle, now);
-   if (err) {
+   if (err)
dev_err(dev, "dprtc_set_time err %d\n", err);
-   return 0;
-   }
-   return 0;
+   return err;
 }
 
 static int ptp_dpaa2_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
@@ -87,12 +85,12 @@ static int ptp_dpaa2_gettime(struct ptp_clock_info *ptp, 
struct timespec64 *ts)
err = dprtc_get_time(mc_dev->mc_io, 0, mc_dev->mc_handle, &ns);
if (err) {
dev_err(dev, "dprtc_get_time err %d\n", err);
-   return 0;
+   return err;
}
 
ts->tv_sec = div_u64_rem(ns, 10, &remainder);
ts->tv_nsec = remainder;
-   return 0;
+   return err;
 }
 
 static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
@@ -111,10 +109,10 @@ static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
err = dprtc_set_time(mc_dev->mc_io, 0, mc_dev->mc_handle, ns);
if (err)
dev_err(dev, "dprtc_set_time err %d\n", err);
-   return 0;
+   return err;
 }
 
-static struct ptp_clock_info ptp_dpaa2_caps = {
+static const struct ptp_clock_info ptp_dpaa2_caps = {
.owner  = THIS_MODULE,
.name   = "DPAA2 PTP Clock",
.max_adj= 512000,
@@ -136,7 +134,7 @@ static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
u32 tmr_add = 0;
int err;
 
-   ptp_dpaa2 = kzalloc(sizeof(*ptp_dpaa2), GFP_KERNEL);
+   ptp_dpaa2 = devm_kzalloc(dev, sizeof(*ptp_dpaa2), GFP_KERNEL);
if (!ptp_dpaa2)
return -ENOMEM;
 
@@ -182,8 +180,6 @@ static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
 err_free_mcp:
fsl_mc_portal_free(mc_dev->mc_io);
 err_exit:
-   kfree(ptp_dpaa2);
-   dev_set_drvdata(dev, NULL);
return err;
 }
 
@@ -198,9 +194,6 @@ static int dpaa2_ptp_remove(struct fsl_mc_device *mc_dev)
dprtc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
fsl_mc_portal_free(mc_dev->mc_io);
 
-   kfree(ptp_dpaa2);
-   dev_set_drvdata(dev, NULL);
-
return 0;
 }
 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v2, 3/5] net: dpaa2: rename rtc as ptp in dpaa2-ptp driver

2018-09-29 Thread Yangbo Lu
In dpaa2-ptp driver, it's odd to use rtc in names of
some functions and structures except for these dprtc
APIs. This patch is to use ptp instead of rtc in names.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
---
 drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c |   30 +++---
 1 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
index 2e90d5a..c73eef2 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
@@ -12,7 +12,7 @@
 #include "dpaa2-ptp.h"
 
 struct ptp_dpaa2_priv {
-   struct fsl_mc_device *rtc_mc_dev;
+   struct fsl_mc_device *ptp_mc_dev;
struct ptp_clock *clock;
struct ptp_clock_info caps;
u32 freq_comp;
@@ -23,7 +23,7 @@ static int ptp_dpaa2_adjfreq(struct ptp_clock_info *ptp, s32 
ppb)
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
u64 adj;
u32 diff, tmr_add;
@@ -53,7 +53,7 @@ static int ptp_dpaa2_adjtime(struct ptp_clock_info *ptp, s64 
delta)
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
s64 now;
int err = 0;
@@ -78,7 +78,7 @@ static int ptp_dpaa2_gettime(struct ptp_clock_info *ptp, 
struct timespec64 *ts)
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
u64 ns;
u32 remainder;
@@ -100,7 +100,7 @@ static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
u64 ns;
int err = 0;
@@ -129,7 +129,7 @@ static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
.settime64  = ptp_dpaa2_settime,
 };
 
-static int rtc_probe(struct fsl_mc_device *mc_dev)
+static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
 {
struct device *dev = &mc_dev->dev;
struct ptp_dpaa2_priv *ptp_dpaa2;
@@ -153,7 +153,7 @@ static int rtc_probe(struct fsl_mc_device *mc_dev)
goto err_free_mcp;
}
 
-   ptp_dpaa2->rtc_mc_dev = mc_dev;
+   ptp_dpaa2->ptp_mc_dev = mc_dev;
 
err = dprtc_get_freq_compensation(mc_dev->mc_io, 0,
  mc_dev->mc_handle, &tmr_add);
@@ -187,7 +187,7 @@ static int rtc_probe(struct fsl_mc_device *mc_dev)
return err;
 }
 
-static int rtc_remove(struct fsl_mc_device *mc_dev)
+static int dpaa2_ptp_remove(struct fsl_mc_device *mc_dev)
 {
struct ptp_dpaa2_priv *ptp_dpaa2;
struct device *dev = &mc_dev->dev;
@@ -204,26 +204,26 @@ static int rtc_remove(struct fsl_mc_device *mc_dev)
return 0;
 }
 
-static const struct fsl_mc_device_id rtc_match_id_table[] = {
+static const struct fsl_mc_device_id dpaa2_ptp_match_id_table[] = {
{
.vendor = FSL_MC_VENDOR_FREESCALE,
.obj_type = "dprtc",
},
{}
 };
-MODULE_DEVICE_TABLE(fslmc, rtc_match_id_table);
+MODULE_DEVICE_TABLE(fslmc, dpaa2_ptp_match_id_table);
 
-static struct fsl_mc_driver rtc_drv = {
+static struct fsl_mc_driver dpaa2_ptp_drv = {
.driver = {
.name = KBUILD_MODNAME,
.owner = THIS_MODULE,
},
-   .probe = rtc_probe,
-   .remove = rtc_remove,
-   .match_id_table = rtc_match_id_table,
+   .probe = dpaa2_ptp_probe,
+   .remove = dpaa2_ptp_remove,
+   .match_id_table = dpaa2_ptp_match_id_table,
 };
 
-module_fsl_mc_driver(rtc_drv);
+module_fsl_mc_driver(dpaa2_ptp_drv);
 
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("DPAA2 PTP Clock Driver");
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v2, 1/5] net: dpaa2: move DPAA2 PTP driver out of staging/

2018-09-29 Thread Yangbo Lu
This patch is to move DPAA2 PTP driver out of staging/
since the dpaa2-eth had been moved out.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Renamed files rtc.* as dpaa2-ptp.*.
---
 drivers/net/ethernet/freescale/Kconfig |9 +
 drivers/net/ethernet/freescale/dpaa2/Kconfig   |   15 +++
 drivers/net/ethernet/freescale/dpaa2/Makefile  |6 --
 .../ethernet/freescale/dpaa2/dpaa2-ptp.c}  |2 +-
 .../ethernet/freescale/dpaa2/dpaa2-ptp.h}  |0
 .../ethernet/freescale/dpaa2}/dprtc-cmd.h  |0
 .../rtc => net/ethernet/freescale/dpaa2}/dprtc.c   |0
 .../rtc => net/ethernet/freescale/dpaa2}/dprtc.h   |0
 drivers/staging/fsl-dpaa2/Kconfig  |8 
 drivers/staging/fsl-dpaa2/Makefile |1 -
 drivers/staging/fsl-dpaa2/rtc/Makefile |7 ---
 11 files changed, 21 insertions(+), 27 deletions(-)
 create mode 100644 drivers/net/ethernet/freescale/dpaa2/Kconfig
 rename drivers/{staging/fsl-dpaa2/rtc/rtc.c => 
net/ethernet/freescale/dpaa2/dpaa2-ptp.c} (99%)
 rename drivers/{staging/fsl-dpaa2/rtc/rtc.h => 
net/ethernet/freescale/dpaa2/dpaa2-ptp.h} (100%)
 rename drivers/{staging/fsl-dpaa2/rtc => 
net/ethernet/freescale/dpaa2}/dprtc-cmd.h (100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/dprtc.c 
(100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/dprtc.h 
(100%)
 delete mode 100644 drivers/staging/fsl-dpaa2/rtc/Makefile

diff --git a/drivers/net/ethernet/freescale/Kconfig 
b/drivers/net/ethernet/freescale/Kconfig
index 7a30276..d3a62bc 100644
--- a/drivers/net/ethernet/freescale/Kconfig
+++ b/drivers/net/ethernet/freescale/Kconfig
@@ -96,13 +96,6 @@ config GIANFAR
  on the 8540.
 
 source "drivers/net/ethernet/freescale/dpaa/Kconfig"
-
-config FSL_DPAA2_ETH
-   tristate "Freescale DPAA2 Ethernet"
-   depends on FSL_MC_BUS && FSL_MC_DPIO
-   depends on NETDEVICES && ETHERNET
-   ---help---
- Ethernet driver for Freescale DPAA2 SoCs, using the
- Freescale MC bus driver
+source "drivers/net/ethernet/freescale/dpaa2/Kconfig"
 
 endif # NET_VENDOR_FREESCALE
diff --git a/drivers/net/ethernet/freescale/dpaa2/Kconfig 
b/drivers/net/ethernet/freescale/dpaa2/Kconfig
new file mode 100644
index 000..44c5c3a
--- /dev/null
+++ b/drivers/net/ethernet/freescale/dpaa2/Kconfig
@@ -0,0 +1,15 @@
+config FSL_DPAA2_ETH
+   tristate "Freescale DPAA2 Ethernet"
+   depends on FSL_MC_BUS && FSL_MC_DPIO
+   depends on NETDEVICES && ETHERNET
+   help
+ Ethernet driver for Freescale DPAA2 SoCs, using the
+ Freescale MC bus driver
+
+config FSL_DPAA2_PTP_CLOCK
+   tristate "Freescale DPAA2 PTP Clock"
+   depends on FSL_DPAA2_ETH && POSIX_TIMERS
+   select PTP_1588_CLOCK
+   help
+ This driver adds support for using the DPAA2 1588 timer module
+ as a PTP clock.
diff --git a/drivers/net/ethernet/freescale/dpaa2/Makefile 
b/drivers/net/ethernet/freescale/dpaa2/Makefile
index 9315ecd..2f424e0 100644
--- a/drivers/net/ethernet/freescale/dpaa2/Makefile
+++ b/drivers/net/ethernet/freescale/dpaa2/Makefile
@@ -3,9 +3,11 @@
 # Makefile for the Freescale DPAA2 Ethernet controller
 #
 
-obj-$(CONFIG_FSL_DPAA2_ETH) += fsl-dpaa2-eth.o
+obj-$(CONFIG_FSL_DPAA2_ETH)+= fsl-dpaa2-eth.o
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK)  += fsl-dpaa2-ptp.o
 
-fsl-dpaa2-eth-objs:= dpaa2-eth.o dpaa2-ethtool.o dpni.o
+fsl-dpaa2-eth-objs := dpaa2-eth.o dpaa2-ethtool.o dpni.o
+fsl-dpaa2-ptp-objs := dpaa2-ptp.o dprtc.o
 
 # Needed by the tracing framework
 CFLAGS_dpaa2-eth.o := -I$(src)
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.c 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
similarity index 99%
rename from drivers/staging/fsl-dpaa2/rtc/rtc.c
rename to drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
index 0d52cb8..2e90d5a 100644
--- a/drivers/staging/fsl-dpaa2/rtc/rtc.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
@@ -9,7 +9,7 @@
 #include 
 #include 
 
-#include "rtc.h"
+#include "dpaa2-ptp.h"
 
 struct ptp_dpaa2_priv {
struct fsl_mc_device *rtc_mc_dev;
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.h 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.h
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/rtc.h
rename to drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.h
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h 
b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
rename to drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc.c 
b/drivers/net/ethernet/freescale/dpaa2/dprtc.c
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/dprtc.c
rename t

[v2, 4/5] net: dpaa2: remove unused code for dprtc

2018-09-29 Thread Yangbo Lu
This patch is to removed unused code for dprtc.
This code will be re-added along with more features
of dpaa2-ptp added.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
---
 drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h |   97 
 drivers/net/ethernet/freescale/dpaa2/dprtc.c |  507 --
 drivers/net/ethernet/freescale/dpaa2/dprtc.h |  119 -
 3 files changed, 0 insertions(+), 723 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h 
b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
index db6a473..9af4ac7 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
@@ -7,10 +7,6 @@
 #ifndef _FSL_DPRTC_CMD_H
 #define _FSL_DPRTC_CMD_H
 
-/* DPRTC Version */
-#define DPRTC_VER_MAJOR2
-#define DPRTC_VER_MINOR0
-
 /* Command versioning */
 #define DPRTC_CMD_BASE_VERSION 1
 #define DPRTC_CMD_ID_OFFSET4
@@ -20,105 +16,17 @@
 /* Command IDs */
 #define DPRTC_CMDID_CLOSE  DPRTC_CMD(0x800)
 #define DPRTC_CMDID_OPEN   DPRTC_CMD(0x810)
-#define DPRTC_CMDID_CREATE DPRTC_CMD(0x910)
-#define DPRTC_CMDID_DESTROYDPRTC_CMD(0x990)
-#define DPRTC_CMDID_GET_API_VERSIONDPRTC_CMD(0xa10)
-
-#define DPRTC_CMDID_ENABLE DPRTC_CMD(0x002)
-#define DPRTC_CMDID_DISABLEDPRTC_CMD(0x003)
-#define DPRTC_CMDID_GET_ATTR   DPRTC_CMD(0x004)
-#define DPRTC_CMDID_RESET  DPRTC_CMD(0x005)
-#define DPRTC_CMDID_IS_ENABLED DPRTC_CMD(0x006)
 
-#define DPRTC_CMDID_SET_IRQ_ENABLE DPRTC_CMD(0x012)
-#define DPRTC_CMDID_GET_IRQ_ENABLE DPRTC_CMD(0x013)
-#define DPRTC_CMDID_SET_IRQ_MASK   DPRTC_CMD(0x014)
-#define DPRTC_CMDID_GET_IRQ_MASK   DPRTC_CMD(0x015)
-#define DPRTC_CMDID_GET_IRQ_STATUS DPRTC_CMD(0x016)
-#define DPRTC_CMDID_CLEAR_IRQ_STATUS   DPRTC_CMD(0x017)
-
-#define DPRTC_CMDID_SET_CLOCK_OFFSET   DPRTC_CMD(0x1d0)
 #define DPRTC_CMDID_SET_FREQ_COMPENSATION  DPRTC_CMD(0x1d1)
 #define DPRTC_CMDID_GET_FREQ_COMPENSATION  DPRTC_CMD(0x1d2)
 #define DPRTC_CMDID_GET_TIME   DPRTC_CMD(0x1d3)
 #define DPRTC_CMDID_SET_TIME   DPRTC_CMD(0x1d4)
-#define DPRTC_CMDID_SET_ALARM  DPRTC_CMD(0x1d5)
-#define DPRTC_CMDID_SET_PERIODIC_PULSE DPRTC_CMD(0x1d6)
-#define DPRTC_CMDID_CLEAR_PERIODIC_PULSE   DPRTC_CMD(0x1d7)
-#define DPRTC_CMDID_SET_EXT_TRIGGERDPRTC_CMD(0x1d8)
-#define DPRTC_CMDID_CLEAR_EXT_TRIGGER  DPRTC_CMD(0x1d9)
-#define DPRTC_CMDID_GET_EXT_TRIGGER_TIMESTAMP  DPRTC_CMD(0x1dA)
-
-/* Macros for accessing command fields smaller than 1byte */
-#define DPRTC_MASK(field)\
-   GENMASK(DPRTC_##field##_SHIFT + DPRTC_##field##_SIZE - 1, \
-   DPRTC_##field##_SHIFT)
-#define dprtc_get_field(var, field)  \
-   (((var) & DPRTC_MASK(field)) >> DPRTC_##field##_SHIFT)
 
 #pragma pack(push, 1)
 struct dprtc_cmd_open {
__le32 dprtc_id;
 };
 
-struct dprtc_cmd_destroy {
-   __le32 object_id;
-};
-
-#define DPRTC_ENABLE_SHIFT 0
-#define DPRTC_ENABLE_SIZE  1
-
-struct dprtc_rsp_is_enabled {
-   u8 en;
-};
-
-struct dprtc_cmd_get_irq {
-   __le32 pad;
-   u8 irq_index;
-};
-
-struct dprtc_cmd_set_irq_enable {
-   u8 en;
-   u8 pad[3];
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_irq_enable {
-   u8 en;
-};
-
-struct dprtc_cmd_set_irq_mask {
-   __le32 mask;
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_irq_mask {
-   __le32 mask;
-};
-
-struct dprtc_cmd_get_irq_status {
-   __le32 status;
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_irq_status {
-   __le32 status;
-};
-
-struct dprtc_cmd_clear_irq_status {
-   __le32 status;
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_attributes {
-   __le32 pad;
-   __le32 id;
-};
-
-struct dprtc_cmd_set_clock_offset {
-   __le64 offset;
-};
-
 struct dprtc_get_freq_compensation {
__le32 freq_compensation;
 };
@@ -127,11 +35,6 @@ struct dprtc_time {
__le64 time;
 };
 
-struct dprtc_rsp_get_api_version {
-   __le16 major;
-   __le16 minor;
-};
-
 #pragma pack(pop)
 
 #endif /* _FSL_DPRTC_CMD_H */
diff --git a/drivers/net/ethernet/freescale/dpaa2/dprtc.c 
b/drivers/net/ethernet/freescale/dpaa2/dprtc.c
index 68ae6ff..c13e09b 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dprtc.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dprtc.c
@@ -74,452 +74,6 @@ int dprtc_close(struct fsl_mc_io *mc_io,
 }
 
 /**
- * dprtc_create() - Create the DPRTC object.
- * @mc_io: Pointer to MC portal's I/O object
- * @dprc_token:Parent container token; '0' for default container
- * @cmd_flags: Command flags; one or more of 'MC_CMD_FLAG_&

[v3, 1/6] net: dpaa2: move DPAA2 PTP driver out of staging/

2018-10-08 Thread Yangbo Lu
This patch is to move DPAA2 PTP driver out of staging/
since the dpaa2-eth had been moved out.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Renamed files rtc.* as dpaa2-ptp.*.
Changes for v3:
- Added more help info for config FSL_DPAA2_ETH.
---
 drivers/net/ethernet/freescale/Kconfig |9 +
 drivers/net/ethernet/freescale/dpaa2/Kconfig   |   17 +
 drivers/net/ethernet/freescale/dpaa2/Makefile  |6 --
 .../ethernet/freescale/dpaa2/dpaa2-ptp.c}  |2 +-
 .../ethernet/freescale/dpaa2/dpaa2-ptp.h}  |0
 .../ethernet/freescale/dpaa2}/dprtc-cmd.h  |0
 .../rtc => net/ethernet/freescale/dpaa2}/dprtc.c   |0
 .../rtc => net/ethernet/freescale/dpaa2}/dprtc.h   |0
 drivers/staging/fsl-dpaa2/Kconfig  |8 
 drivers/staging/fsl-dpaa2/Makefile |1 -
 drivers/staging/fsl-dpaa2/rtc/Makefile |7 ---
 11 files changed, 23 insertions(+), 27 deletions(-)
 create mode 100644 drivers/net/ethernet/freescale/dpaa2/Kconfig
 rename drivers/{staging/fsl-dpaa2/rtc/rtc.c => 
net/ethernet/freescale/dpaa2/dpaa2-ptp.c} (99%)
 rename drivers/{staging/fsl-dpaa2/rtc/rtc.h => 
net/ethernet/freescale/dpaa2/dpaa2-ptp.h} (100%)
 rename drivers/{staging/fsl-dpaa2/rtc => 
net/ethernet/freescale/dpaa2}/dprtc-cmd.h (100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/dprtc.c 
(100%)
 rename drivers/{staging/fsl-dpaa2/rtc => net/ethernet/freescale/dpaa2}/dprtc.h 
(100%)
 delete mode 100644 drivers/staging/fsl-dpaa2/rtc/Makefile

diff --git a/drivers/net/ethernet/freescale/Kconfig 
b/drivers/net/ethernet/freescale/Kconfig
index 7a30276..d3a62bc 100644
--- a/drivers/net/ethernet/freescale/Kconfig
+++ b/drivers/net/ethernet/freescale/Kconfig
@@ -96,13 +96,6 @@ config GIANFAR
  on the 8540.
 
 source "drivers/net/ethernet/freescale/dpaa/Kconfig"
-
-config FSL_DPAA2_ETH
-   tristate "Freescale DPAA2 Ethernet"
-   depends on FSL_MC_BUS && FSL_MC_DPIO
-   depends on NETDEVICES && ETHERNET
-   ---help---
- Ethernet driver for Freescale DPAA2 SoCs, using the
- Freescale MC bus driver
+source "drivers/net/ethernet/freescale/dpaa2/Kconfig"
 
 endif # NET_VENDOR_FREESCALE
diff --git a/drivers/net/ethernet/freescale/dpaa2/Kconfig 
b/drivers/net/ethernet/freescale/dpaa2/Kconfig
new file mode 100644
index 000..67e6461
--- /dev/null
+++ b/drivers/net/ethernet/freescale/dpaa2/Kconfig
@@ -0,0 +1,17 @@
+config FSL_DPAA2_ETH
+   tristate "Freescale DPAA2 Ethernet"
+   depends on FSL_MC_BUS && FSL_MC_DPIO
+   depends on NETDEVICES && ETHERNET
+   help
+ This is the DPAA2 Ethernet driver supporting Freescale SoCs
+ with DPAA2 (DataPath Acceleration Architecture v2).
+ The driver manages network objects discovered on the Freescale
+ MC bus.
+
+config FSL_DPAA2_PTP_CLOCK
+   tristate "Freescale DPAA2 PTP Clock"
+   depends on FSL_DPAA2_ETH && POSIX_TIMERS
+   select PTP_1588_CLOCK
+   help
+ This driver adds support for using the DPAA2 1588 timer module
+ as a PTP clock.
diff --git a/drivers/net/ethernet/freescale/dpaa2/Makefile 
b/drivers/net/ethernet/freescale/dpaa2/Makefile
index 9315ecd..2f424e0 100644
--- a/drivers/net/ethernet/freescale/dpaa2/Makefile
+++ b/drivers/net/ethernet/freescale/dpaa2/Makefile
@@ -3,9 +3,11 @@
 # Makefile for the Freescale DPAA2 Ethernet controller
 #
 
-obj-$(CONFIG_FSL_DPAA2_ETH) += fsl-dpaa2-eth.o
+obj-$(CONFIG_FSL_DPAA2_ETH)+= fsl-dpaa2-eth.o
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK)  += fsl-dpaa2-ptp.o
 
-fsl-dpaa2-eth-objs:= dpaa2-eth.o dpaa2-ethtool.o dpni.o
+fsl-dpaa2-eth-objs := dpaa2-eth.o dpaa2-ethtool.o dpni.o
+fsl-dpaa2-ptp-objs := dpaa2-ptp.o dprtc.o
 
 # Needed by the tracing framework
 CFLAGS_dpaa2-eth.o := -I$(src)
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.c 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
similarity index 99%
rename from drivers/staging/fsl-dpaa2/rtc/rtc.c
rename to drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
index 0d52cb8..2e90d5a 100644
--- a/drivers/staging/fsl-dpaa2/rtc/rtc.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
@@ -9,7 +9,7 @@
 #include 
 #include 
 
-#include "rtc.h"
+#include "dpaa2-ptp.h"
 
 struct ptp_dpaa2_priv {
struct fsl_mc_device *rtc_mc_dev;
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.h 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.h
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/rtc.h
rename to drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.h
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h 
b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
similarity index 100%
rename from drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
rename to drivers/net/ethernet/freesc

[v3, 5/6] net: dpaa2: remove unused code for dprtc

2018-10-08 Thread Yangbo Lu
This patch is to removed unused code for dprtc.
This code will be re-added along with more features
of dpaa2-ptp added.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
Changes for v3:
- None.
---
 drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h |   97 
 drivers/net/ethernet/freescale/dpaa2/dprtc.c |  507 --
 drivers/net/ethernet/freescale/dpaa2/dprtc.h |  119 -
 3 files changed, 0 insertions(+), 723 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h 
b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
index db6a473..9af4ac7 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
@@ -7,10 +7,6 @@
 #ifndef _FSL_DPRTC_CMD_H
 #define _FSL_DPRTC_CMD_H
 
-/* DPRTC Version */
-#define DPRTC_VER_MAJOR2
-#define DPRTC_VER_MINOR0
-
 /* Command versioning */
 #define DPRTC_CMD_BASE_VERSION 1
 #define DPRTC_CMD_ID_OFFSET4
@@ -20,105 +16,17 @@
 /* Command IDs */
 #define DPRTC_CMDID_CLOSE  DPRTC_CMD(0x800)
 #define DPRTC_CMDID_OPEN   DPRTC_CMD(0x810)
-#define DPRTC_CMDID_CREATE DPRTC_CMD(0x910)
-#define DPRTC_CMDID_DESTROYDPRTC_CMD(0x990)
-#define DPRTC_CMDID_GET_API_VERSIONDPRTC_CMD(0xa10)
-
-#define DPRTC_CMDID_ENABLE DPRTC_CMD(0x002)
-#define DPRTC_CMDID_DISABLEDPRTC_CMD(0x003)
-#define DPRTC_CMDID_GET_ATTR   DPRTC_CMD(0x004)
-#define DPRTC_CMDID_RESET  DPRTC_CMD(0x005)
-#define DPRTC_CMDID_IS_ENABLED DPRTC_CMD(0x006)
 
-#define DPRTC_CMDID_SET_IRQ_ENABLE DPRTC_CMD(0x012)
-#define DPRTC_CMDID_GET_IRQ_ENABLE DPRTC_CMD(0x013)
-#define DPRTC_CMDID_SET_IRQ_MASK   DPRTC_CMD(0x014)
-#define DPRTC_CMDID_GET_IRQ_MASK   DPRTC_CMD(0x015)
-#define DPRTC_CMDID_GET_IRQ_STATUS DPRTC_CMD(0x016)
-#define DPRTC_CMDID_CLEAR_IRQ_STATUS   DPRTC_CMD(0x017)
-
-#define DPRTC_CMDID_SET_CLOCK_OFFSET   DPRTC_CMD(0x1d0)
 #define DPRTC_CMDID_SET_FREQ_COMPENSATION  DPRTC_CMD(0x1d1)
 #define DPRTC_CMDID_GET_FREQ_COMPENSATION  DPRTC_CMD(0x1d2)
 #define DPRTC_CMDID_GET_TIME   DPRTC_CMD(0x1d3)
 #define DPRTC_CMDID_SET_TIME   DPRTC_CMD(0x1d4)
-#define DPRTC_CMDID_SET_ALARM  DPRTC_CMD(0x1d5)
-#define DPRTC_CMDID_SET_PERIODIC_PULSE DPRTC_CMD(0x1d6)
-#define DPRTC_CMDID_CLEAR_PERIODIC_PULSE   DPRTC_CMD(0x1d7)
-#define DPRTC_CMDID_SET_EXT_TRIGGERDPRTC_CMD(0x1d8)
-#define DPRTC_CMDID_CLEAR_EXT_TRIGGER  DPRTC_CMD(0x1d9)
-#define DPRTC_CMDID_GET_EXT_TRIGGER_TIMESTAMP  DPRTC_CMD(0x1dA)
-
-/* Macros for accessing command fields smaller than 1byte */
-#define DPRTC_MASK(field)\
-   GENMASK(DPRTC_##field##_SHIFT + DPRTC_##field##_SIZE - 1, \
-   DPRTC_##field##_SHIFT)
-#define dprtc_get_field(var, field)  \
-   (((var) & DPRTC_MASK(field)) >> DPRTC_##field##_SHIFT)
 
 #pragma pack(push, 1)
 struct dprtc_cmd_open {
__le32 dprtc_id;
 };
 
-struct dprtc_cmd_destroy {
-   __le32 object_id;
-};
-
-#define DPRTC_ENABLE_SHIFT 0
-#define DPRTC_ENABLE_SIZE  1
-
-struct dprtc_rsp_is_enabled {
-   u8 en;
-};
-
-struct dprtc_cmd_get_irq {
-   __le32 pad;
-   u8 irq_index;
-};
-
-struct dprtc_cmd_set_irq_enable {
-   u8 en;
-   u8 pad[3];
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_irq_enable {
-   u8 en;
-};
-
-struct dprtc_cmd_set_irq_mask {
-   __le32 mask;
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_irq_mask {
-   __le32 mask;
-};
-
-struct dprtc_cmd_get_irq_status {
-   __le32 status;
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_irq_status {
-   __le32 status;
-};
-
-struct dprtc_cmd_clear_irq_status {
-   __le32 status;
-   u8 irq_index;
-};
-
-struct dprtc_rsp_get_attributes {
-   __le32 pad;
-   __le32 id;
-};
-
-struct dprtc_cmd_set_clock_offset {
-   __le64 offset;
-};
-
 struct dprtc_get_freq_compensation {
__le32 freq_compensation;
 };
@@ -127,11 +35,6 @@ struct dprtc_time {
__le64 time;
 };
 
-struct dprtc_rsp_get_api_version {
-   __le16 major;
-   __le16 minor;
-};
-
 #pragma pack(pop)
 
 #endif /* _FSL_DPRTC_CMD_H */
diff --git a/drivers/net/ethernet/freescale/dpaa2/dprtc.c 
b/drivers/net/ethernet/freescale/dpaa2/dprtc.c
index 68ae6ff..c13e09b 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dprtc.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dprtc.c
@@ -74,452 +74,6 @@ int dprtc_close(struct fsl_mc_io *mc_io,
 }
 
 /**
- * dprtc_create() - Create the DPRTC object.
- * @mc_io: Pointer to MC portal's I/O object
- * @dprc_token:Parent container token; '0' for default container
- * @cmd_flags: Comm

[v3, 6/6] net: dpaa2: fix and improve dpaa2-ptp driver

2018-10-08 Thread Yangbo Lu
This patch is to fix and improve dpaa2-ptp driver
in some places.

- Fixed the return for some functions.
- Replaced kzalloc with devm_kzalloc.
- Removed dev_set_drvdata(dev, NULL).
- Made ptp_dpaa2_caps const.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
Changes for v3:
- None.
---
 drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c |   25 --
 1 files changed, 9 insertions(+), 16 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
index c73eef2..84b942b 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
@@ -46,7 +46,7 @@ static int ptp_dpaa2_adjfreq(struct ptp_clock_info *ptp, s32 
ppb)
  mc_dev->mc_handle, tmr_add);
if (err)
dev_err(dev, "dprtc_set_freq_compensation err %d\n", err);
-   return 0;
+   return err;
 }
 
 static int ptp_dpaa2_adjtime(struct ptp_clock_info *ptp, s64 delta)
@@ -61,17 +61,15 @@ static int ptp_dpaa2_adjtime(struct ptp_clock_info *ptp, 
s64 delta)
err = dprtc_get_time(mc_dev->mc_io, 0, mc_dev->mc_handle, &now);
if (err) {
dev_err(dev, "dprtc_get_time err %d\n", err);
-   return 0;
+   return err;
}
 
now += delta;
 
err = dprtc_set_time(mc_dev->mc_io, 0, mc_dev->mc_handle, now);
-   if (err) {
+   if (err)
dev_err(dev, "dprtc_set_time err %d\n", err);
-   return 0;
-   }
-   return 0;
+   return err;
 }
 
 static int ptp_dpaa2_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts)
@@ -87,12 +85,12 @@ static int ptp_dpaa2_gettime(struct ptp_clock_info *ptp, 
struct timespec64 *ts)
err = dprtc_get_time(mc_dev->mc_io, 0, mc_dev->mc_handle, &ns);
if (err) {
dev_err(dev, "dprtc_get_time err %d\n", err);
-   return 0;
+   return err;
}
 
ts->tv_sec = div_u64_rem(ns, 10, &remainder);
ts->tv_nsec = remainder;
-   return 0;
+   return err;
 }
 
 static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
@@ -111,10 +109,10 @@ static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
err = dprtc_set_time(mc_dev->mc_io, 0, mc_dev->mc_handle, ns);
if (err)
dev_err(dev, "dprtc_set_time err %d\n", err);
-   return 0;
+   return err;
 }
 
-static struct ptp_clock_info ptp_dpaa2_caps = {
+static const struct ptp_clock_info ptp_dpaa2_caps = {
.owner  = THIS_MODULE,
.name   = "DPAA2 PTP Clock",
.max_adj= 512000,
@@ -136,7 +134,7 @@ static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
u32 tmr_add = 0;
int err;
 
-   ptp_dpaa2 = kzalloc(sizeof(*ptp_dpaa2), GFP_KERNEL);
+   ptp_dpaa2 = devm_kzalloc(dev, sizeof(*ptp_dpaa2), GFP_KERNEL);
if (!ptp_dpaa2)
return -ENOMEM;
 
@@ -182,8 +180,6 @@ static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
 err_free_mcp:
fsl_mc_portal_free(mc_dev->mc_io);
 err_exit:
-   kfree(ptp_dpaa2);
-   dev_set_drvdata(dev, NULL);
return err;
 }
 
@@ -198,9 +194,6 @@ static int dpaa2_ptp_remove(struct fsl_mc_device *mc_dev)
dprtc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
fsl_mc_portal_free(mc_dev->mc_io);
 
-   kfree(ptp_dpaa2);
-   dev_set_drvdata(dev, NULL);
-
return 0;
 }
 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v3, 4/6] net: dpaa2: rename rtc as ptp in dpaa2-ptp driver

2018-10-08 Thread Yangbo Lu
In dpaa2-ptp driver, it's odd to use rtc in names of
some functions and structures except these dprtc APIs.
This patch is to use ptp instead of rtc in names.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
Changes for v3:
- Modified commit message.
---
 drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c |   30 +++---
 1 files changed, 15 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c 
b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
index 2e90d5a..c73eef2 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
@@ -12,7 +12,7 @@
 #include "dpaa2-ptp.h"
 
 struct ptp_dpaa2_priv {
-   struct fsl_mc_device *rtc_mc_dev;
+   struct fsl_mc_device *ptp_mc_dev;
struct ptp_clock *clock;
struct ptp_clock_info caps;
u32 freq_comp;
@@ -23,7 +23,7 @@ static int ptp_dpaa2_adjfreq(struct ptp_clock_info *ptp, s32 
ppb)
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
u64 adj;
u32 diff, tmr_add;
@@ -53,7 +53,7 @@ static int ptp_dpaa2_adjtime(struct ptp_clock_info *ptp, s64 
delta)
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
s64 now;
int err = 0;
@@ -78,7 +78,7 @@ static int ptp_dpaa2_gettime(struct ptp_clock_info *ptp, 
struct timespec64 *ts)
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
u64 ns;
u32 remainder;
@@ -100,7 +100,7 @@ static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
 {
struct ptp_dpaa2_priv *ptp_dpaa2 =
container_of(ptp, struct ptp_dpaa2_priv, caps);
-   struct fsl_mc_device *mc_dev = ptp_dpaa2->rtc_mc_dev;
+   struct fsl_mc_device *mc_dev = ptp_dpaa2->ptp_mc_dev;
struct device *dev = &mc_dev->dev;
u64 ns;
int err = 0;
@@ -129,7 +129,7 @@ static int ptp_dpaa2_settime(struct ptp_clock_info *ptp,
.settime64  = ptp_dpaa2_settime,
 };
 
-static int rtc_probe(struct fsl_mc_device *mc_dev)
+static int dpaa2_ptp_probe(struct fsl_mc_device *mc_dev)
 {
struct device *dev = &mc_dev->dev;
struct ptp_dpaa2_priv *ptp_dpaa2;
@@ -153,7 +153,7 @@ static int rtc_probe(struct fsl_mc_device *mc_dev)
goto err_free_mcp;
}
 
-   ptp_dpaa2->rtc_mc_dev = mc_dev;
+   ptp_dpaa2->ptp_mc_dev = mc_dev;
 
err = dprtc_get_freq_compensation(mc_dev->mc_io, 0,
  mc_dev->mc_handle, &tmr_add);
@@ -187,7 +187,7 @@ static int rtc_probe(struct fsl_mc_device *mc_dev)
return err;
 }
 
-static int rtc_remove(struct fsl_mc_device *mc_dev)
+static int dpaa2_ptp_remove(struct fsl_mc_device *mc_dev)
 {
struct ptp_dpaa2_priv *ptp_dpaa2;
struct device *dev = &mc_dev->dev;
@@ -204,26 +204,26 @@ static int rtc_remove(struct fsl_mc_device *mc_dev)
return 0;
 }
 
-static const struct fsl_mc_device_id rtc_match_id_table[] = {
+static const struct fsl_mc_device_id dpaa2_ptp_match_id_table[] = {
{
.vendor = FSL_MC_VENDOR_FREESCALE,
.obj_type = "dprtc",
},
{}
 };
-MODULE_DEVICE_TABLE(fslmc, rtc_match_id_table);
+MODULE_DEVICE_TABLE(fslmc, dpaa2_ptp_match_id_table);
 
-static struct fsl_mc_driver rtc_drv = {
+static struct fsl_mc_driver dpaa2_ptp_drv = {
.driver = {
.name = KBUILD_MODNAME,
.owner = THIS_MODULE,
},
-   .probe = rtc_probe,
-   .remove = rtc_remove,
-   .match_id_table = rtc_match_id_table,
+   .probe = dpaa2_ptp_probe,
+   .remove = dpaa2_ptp_remove,
+   .match_id_table = dpaa2_ptp_match_id_table,
 };
 
-module_fsl_mc_driver(rtc_drv);
+module_fsl_mc_driver(dpaa2_ptp_drv);
 
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("DPAA2 PTP Clock Driver");
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v3, 3/6] net: dpaa2: fix dependency of config FSL_DPAA2_ETH

2018-10-08 Thread Yangbo Lu
The NETDEVICES dependency and ETHERNET dependency hadn't
been required since dpaa2-eth was moved out of staging.
Also allowed COMPILE_TEST for dpaa2-eth.

Signed-off-by: Yangbo Lu 
---
Changes for v3:
- Added this patch.
---
 drivers/net/ethernet/freescale/dpaa2/Kconfig |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/Kconfig 
b/drivers/net/ethernet/freescale/dpaa2/Kconfig
index 67e6461..a7f365d 100644
--- a/drivers/net/ethernet/freescale/dpaa2/Kconfig
+++ b/drivers/net/ethernet/freescale/dpaa2/Kconfig
@@ -1,7 +1,7 @@
 config FSL_DPAA2_ETH
tristate "Freescale DPAA2 Ethernet"
depends on FSL_MC_BUS && FSL_MC_DPIO
-   depends on NETDEVICES && ETHERNET
+   depends on ARCH_LAYERSCAPE || COMPILE_TEST
help
  This is the DPAA2 Ethernet driver supporting Freescale SoCs
  with DPAA2 (DataPath Acceleration Architecture v2).
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v3, 2/6] MAINTAINERS: update files maintained under DPAA2 PTP/ETHERNET

2018-10-08 Thread Yangbo Lu
The files maintained under DPAA2 PTP/ETHERNET needs to
be updated since dpaa2 ptp driver had been moved into
drivers/net/ethernet/freescale/dpaa2/.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Updated files rtc* as dpaa2-ptp*.
Changes for v3:
- Fixed typo dpaa-ptp*. Should be dpaa2-ptp*.
---
 MAINTAINERS |   11 ---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 86e83ea..54e719d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4529,7 +4529,11 @@ DPAA2 ETHERNET DRIVER
 M: Ioana Radulescu 
 L: net...@vger.kernel.org
 S: Maintained
-F: drivers/net/ethernet/freescale/dpaa2
+F: drivers/net/ethernet/freescale/dpaa2/dpaa2-eth*
+F: drivers/net/ethernet/freescale/dpaa2/dpni*
+F: drivers/net/ethernet/freescale/dpaa2/dpkg.h
+F: drivers/net/ethernet/freescale/dpaa2/Makefile
+F: drivers/net/ethernet/freescale/dpaa2/Kconfig
 
 DPAA2 ETHERNET SWITCH DRIVER
 M: Ioana Radulescu 
@@ -4540,9 +4544,10 @@ F:   drivers/staging/fsl-dpaa2/ethsw
 
 DPAA2 PTP CLOCK DRIVER
 M: Yangbo Lu 
-L: linux-ker...@vger.kernel.org
+L: net...@vger.kernel.org
 S: Maintained
-F: drivers/staging/fsl-dpaa2/rtc
+F: drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp*
+F: drivers/net/ethernet/freescale/dpaa2/dprtc*
 
 DPT_I2O SCSI RAID DRIVER
 M: Adaptec OEM Raid Solutions 
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 2/2] MAINTAINERS: add maintainer for the DPAA2 PTP clock driver

2018-04-19 Thread Yangbo Lu
This patch is to add maintainer for the DPAA2 PTP clock driver.

Signed-off-by: Yangbo Lu 
---
 MAINTAINERS |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 0a1410d..7733efa 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4395,6 +4395,12 @@ L:   linux-ker...@vger.kernel.org
 S: Maintained
 F: drivers/staging/fsl-dpaa2/ethsw
 
+DPAA2 PTP CLOCK DRIVER
+M: Yangbo Lu 
+L: linux-ker...@vger.kernel.org
+S: Maintained
+F: drivers/staging/fsl-dpaa2/rtc
+
 DPT_I2O SCSI RAID DRIVER
 M: Adaptec OEM Raid Solutions 
 L: linux-s...@vger.kernel.org
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 1/2] staging: fsl-dpaa2/rtc: add rtc driver

2018-04-19 Thread Yangbo Lu
This patch is to add driver for the DPAA2 1588 timer module (RTC)
which interfaces to up to an unlimited number of 10/100/1000 or
10G ethernet MACs, providing current time, alarm, and fiper support.
The 1588 IP control block includes these distinctive features.

- External GPIO trigger for time-stamping
- 2 Time-stamp alarms
- 3 FIPER pulse generators
- Phase adjusted output timer clock

Currently this driver only supports basic functions like
settime/gettime/adjtime/adjfreq.

Signed-off-by: Yangbo Lu 
---
 drivers/staging/fsl-dpaa2/Kconfig |8 +
 drivers/staging/fsl-dpaa2/Makefile|5 +-
 drivers/staging/fsl-dpaa2/rtc/Makefile|7 +
 drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h |  137 ++
 drivers/staging/fsl-dpaa2/rtc/dprtc.c |  754 +
 drivers/staging/fsl-dpaa2/rtc/dprtc.h |  164 +++
 drivers/staging/fsl-dpaa2/rtc/rtc.c   |  231 +
 7 files changed, 1304 insertions(+), 2 deletions(-)
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/Makefile
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.c
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.h
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/rtc.c

diff --git a/drivers/staging/fsl-dpaa2/Kconfig 
b/drivers/staging/fsl-dpaa2/Kconfig
index bbb7af5..ea2d4aa 100644
--- a/drivers/staging/fsl-dpaa2/Kconfig
+++ b/drivers/staging/fsl-dpaa2/Kconfig
@@ -24,3 +24,11 @@ config FSL_DPAA2_ETHSW
---help---
Driver for Freescale DPAA2 Ethernet Switch. Select
BRIDGE to have support for bridge tools.
+
+config FSL_DPAA2_PTP_CLOCK
+   tristate "Freescale DPAA2 PTP Clock"
+   depends on FSL_DPAA2
+   select PTP_1588_CLOCK
+   help
+ This driver adds support for using the DPAA2 1588 timer module
+ as a PTP clock.
diff --git a/drivers/staging/fsl-dpaa2/Makefile 
b/drivers/staging/fsl-dpaa2/Makefile
index 6cfd76b..9c70629 100644
--- a/drivers/staging/fsl-dpaa2/Makefile
+++ b/drivers/staging/fsl-dpaa2/Makefile
@@ -2,5 +2,6 @@
 # Freescale DataPath Acceleration Architecture Gen2 (DPAA2) drivers
 #
 
-obj-$(CONFIG_FSL_DPAA2_ETH)+= ethernet/
-obj-$(CONFIG_FSL_DPAA2_ETHSW)  += ethsw/
+obj-$(CONFIG_FSL_DPAA2_ETH)+= ethernet/
+obj-$(CONFIG_FSL_DPAA2_ETHSW)  += ethsw/
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK)  += rtc/
diff --git a/drivers/staging/fsl-dpaa2/rtc/Makefile 
b/drivers/staging/fsl-dpaa2/rtc/Makefile
new file mode 100644
index 000..5468da0
--- /dev/null
+++ b/drivers/staging/fsl-dpaa2/rtc/Makefile
@@ -0,0 +1,7 @@
+#
+# Makefile for the Freescale DPAA2 PTP clock
+#
+
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK) += dpaa2-rtc.o
+
+dpaa2-rtc-objs := rtc.o dprtc.o
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h 
b/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
new file mode 100644
index 000..ba7d5a5
--- /dev/null
+++ b/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
@@ -0,0 +1,137 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2016-2018 NXP
+ */
+
+#ifndef _FSL_DPRTC_CMD_H
+#define _FSL_DPRTC_CMD_H
+
+/* DPRTC Version */
+#define DPRTC_VER_MAJOR2
+#define DPRTC_VER_MINOR0
+
+/* Command versioning */
+#define DPRTC_CMD_BASE_VERSION 1
+#define DPRTC_CMD_ID_OFFSET4
+
+#define DPRTC_CMD(id)  (((id) << DPRTC_CMD_ID_OFFSET) | DPRTC_CMD_BASE_VERSION)
+
+/* Command IDs */
+#define DPRTC_CMDID_CLOSE  DPRTC_CMD(0x800)
+#define DPRTC_CMDID_OPEN   DPRTC_CMD(0x810)
+#define DPRTC_CMDID_CREATE DPRTC_CMD(0x910)
+#define DPRTC_CMDID_DESTROYDPRTC_CMD(0x990)
+#define DPRTC_CMDID_GET_API_VERSIONDPRTC_CMD(0xa10)
+
+#define DPRTC_CMDID_ENABLE DPRTC_CMD(0x002)
+#define DPRTC_CMDID_DISABLEDPRTC_CMD(0x003)
+#define DPRTC_CMDID_GET_ATTR   DPRTC_CMD(0x004)
+#define DPRTC_CMDID_RESET  DPRTC_CMD(0x005)
+#define DPRTC_CMDID_IS_ENABLED DPRTC_CMD(0x006)
+
+#define DPRTC_CMDID_SET_IRQ_ENABLE DPRTC_CMD(0x012)
+#define DPRTC_CMDID_GET_IRQ_ENABLE DPRTC_CMD(0x013)
+#define DPRTC_CMDID_SET_IRQ_MASK   DPRTC_CMD(0x014)
+#define DPRTC_CMDID_GET_IRQ_MASK   DPRTC_CMD(0x015)
+#define DPRTC_CMDID_GET_IRQ_STATUS DPRTC_CMD(0x016)
+#define DPRTC_CMDID_CLEAR_IRQ_STATUS   DPRTC_CMD(0x017)
+
+#define DPRTC_CMDID_SET_CLOCK_OFFSET   DPRTC_CMD(0x1d0)
+#define DPRTC_CMDID_SET_FREQ_COMPENSATION  DPRTC_CMD(0x1d1)
+#define DPRTC_CMDID_GET_FREQ_COMPENSATION  DPRTC_CMD(0x1d2)
+#define DPRTC_CMDID_GET_TIME   DPRTC_CMD(0x1d3)
+#define DPRTC_CMDID_SET_TIME   DPRTC_CMD(0x1d4)
+#define DPRTC_CMDID_SET_ALARM  DPRTC_CMD(0x1d5)
+#define DPRTC_CMDID_SET_PERIODIC_PULSE  

[v2, 1/2] staging: fsl-dpaa2/rtc: add rtc driver

2018-04-19 Thread Yangbo Lu
This patch is to add driver for the DPAA2 1588 timer module (RTC)
which interfaces to up to an unlimited number of 10/100/1000 or
10G ethernet MACs, providing current time, alarm, and fiper support.
The 1588 IP control block includes these distinctive features.

- External GPIO trigger for time-stamping
- 2 Time-stamp alarms
- 3 FIPER pulse generators
- Phase adjusted output timer clock

Currently this driver only supports basic functions like
settime/gettime/adjtime/adjfreq.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Removed some comments.
- Fixed a return value.
---
 drivers/staging/fsl-dpaa2/Kconfig |8 +
 drivers/staging/fsl-dpaa2/Makefile|5 +-
 drivers/staging/fsl-dpaa2/rtc/Makefile|7 +
 drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h |  137 ++
 drivers/staging/fsl-dpaa2/rtc/dprtc.c |  701 +
 drivers/staging/fsl-dpaa2/rtc/dprtc.h |  164 +++
 drivers/staging/fsl-dpaa2/rtc/rtc.c   |  231 ++
 7 files changed, 1251 insertions(+), 2 deletions(-)
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/Makefile
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.c
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.h
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/rtc.c

diff --git a/drivers/staging/fsl-dpaa2/Kconfig 
b/drivers/staging/fsl-dpaa2/Kconfig
index bbb7af5..ea2d4aa 100644
--- a/drivers/staging/fsl-dpaa2/Kconfig
+++ b/drivers/staging/fsl-dpaa2/Kconfig
@@ -24,3 +24,11 @@ config FSL_DPAA2_ETHSW
---help---
Driver for Freescale DPAA2 Ethernet Switch. Select
BRIDGE to have support for bridge tools.
+
+config FSL_DPAA2_PTP_CLOCK
+   tristate "Freescale DPAA2 PTP Clock"
+   depends on FSL_DPAA2
+   select PTP_1588_CLOCK
+   help
+ This driver adds support for using the DPAA2 1588 timer module
+ as a PTP clock.
diff --git a/drivers/staging/fsl-dpaa2/Makefile 
b/drivers/staging/fsl-dpaa2/Makefile
index 6cfd76b..9c70629 100644
--- a/drivers/staging/fsl-dpaa2/Makefile
+++ b/drivers/staging/fsl-dpaa2/Makefile
@@ -2,5 +2,6 @@
 # Freescale DataPath Acceleration Architecture Gen2 (DPAA2) drivers
 #
 
-obj-$(CONFIG_FSL_DPAA2_ETH)+= ethernet/
-obj-$(CONFIG_FSL_DPAA2_ETHSW)  += ethsw/
+obj-$(CONFIG_FSL_DPAA2_ETH)+= ethernet/
+obj-$(CONFIG_FSL_DPAA2_ETHSW)  += ethsw/
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK)  += rtc/
diff --git a/drivers/staging/fsl-dpaa2/rtc/Makefile 
b/drivers/staging/fsl-dpaa2/rtc/Makefile
new file mode 100644
index 000..5468da0
--- /dev/null
+++ b/drivers/staging/fsl-dpaa2/rtc/Makefile
@@ -0,0 +1,7 @@
+#
+# Makefile for the Freescale DPAA2 PTP clock
+#
+
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK) += dpaa2-rtc.o
+
+dpaa2-rtc-objs := rtc.o dprtc.o
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h 
b/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
new file mode 100644
index 000..ba7d5a5
--- /dev/null
+++ b/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
@@ -0,0 +1,137 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2016-2018 NXP
+ */
+
+#ifndef _FSL_DPRTC_CMD_H
+#define _FSL_DPRTC_CMD_H
+
+/* DPRTC Version */
+#define DPRTC_VER_MAJOR2
+#define DPRTC_VER_MINOR0
+
+/* Command versioning */
+#define DPRTC_CMD_BASE_VERSION 1
+#define DPRTC_CMD_ID_OFFSET4
+
+#define DPRTC_CMD(id)  (((id) << DPRTC_CMD_ID_OFFSET) | DPRTC_CMD_BASE_VERSION)
+
+/* Command IDs */
+#define DPRTC_CMDID_CLOSE  DPRTC_CMD(0x800)
+#define DPRTC_CMDID_OPEN   DPRTC_CMD(0x810)
+#define DPRTC_CMDID_CREATE DPRTC_CMD(0x910)
+#define DPRTC_CMDID_DESTROYDPRTC_CMD(0x990)
+#define DPRTC_CMDID_GET_API_VERSIONDPRTC_CMD(0xa10)
+
+#define DPRTC_CMDID_ENABLE DPRTC_CMD(0x002)
+#define DPRTC_CMDID_DISABLEDPRTC_CMD(0x003)
+#define DPRTC_CMDID_GET_ATTR   DPRTC_CMD(0x004)
+#define DPRTC_CMDID_RESET  DPRTC_CMD(0x005)
+#define DPRTC_CMDID_IS_ENABLED DPRTC_CMD(0x006)
+
+#define DPRTC_CMDID_SET_IRQ_ENABLE DPRTC_CMD(0x012)
+#define DPRTC_CMDID_GET_IRQ_ENABLE DPRTC_CMD(0x013)
+#define DPRTC_CMDID_SET_IRQ_MASK   DPRTC_CMD(0x014)
+#define DPRTC_CMDID_GET_IRQ_MASK   DPRTC_CMD(0x015)
+#define DPRTC_CMDID_GET_IRQ_STATUS DPRTC_CMD(0x016)
+#define DPRTC_CMDID_CLEAR_IRQ_STATUS   DPRTC_CMD(0x017)
+
+#define DPRTC_CMDID_SET_CLOCK_OFFSET   DPRTC_CMD(0x1d0)
+#define DPRTC_CMDID_SET_FREQ_COMPENSATION  DPRTC_CMD(0x1d1)
+#define DPRTC_CMDID_GET_FREQ_COMPENSATION  DPRTC_CMD(0x1d2)
+#define DPRTC_CMDID_GET_TIME   DPRTC_CMD(0x1d3)
+#define DPRTC_CMDID_SET_TIME   DPRTC_CMD(0x1d4)
+#define DPRTC

[v2, 2/2] MAINTAINERS: add maintainer for the DPAA2 PTP clock driver

2018-04-19 Thread Yangbo Lu
This patch is to add maintainer for the DPAA2 PTP clock driver.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- None.
---
 MAINTAINERS |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 0a1410d..7733efa 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4395,6 +4395,12 @@ L:   linux-ker...@vger.kernel.org
 S: Maintained
 F: drivers/staging/fsl-dpaa2/ethsw
 
+DPAA2 PTP CLOCK DRIVER
+M: Yangbo Lu 
+L: linux-ker...@vger.kernel.org
+S: Maintained
+F: drivers/staging/fsl-dpaa2/rtc
+
 DPT_I2O SCSI RAID DRIVER
 M: Adaptec OEM Raid Solutions 
 L: linux-s...@vger.kernel.org
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v3, 1/2] staging: fsl-dpaa2/rtc: add rtc driver

2018-04-22 Thread Yangbo Lu
This patch is to add driver for the DPAA2 1588 timer module (RTC)
which interfaces to up to an unlimited number of 10/100/1000 or
10G ethernet MACs, providing current time, alarm, and fiper support.
The 1588 IP control block includes these distinctive features.

- External GPIO trigger for time-stamping
- 2 Time-stamp alarms
- 3 FIPER pulse generators
- Phase adjusted output timer clock

Currently this driver only supports basic functions like
settime/gettime/adjtime/adjfreq.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Removed some comments.
- Fixed a return value.
Changes for v3:
- Fixed auto build warning/error.
---
 drivers/staging/fsl-dpaa2/Kconfig |8 +
 drivers/staging/fsl-dpaa2/Makefile|5 +-
 drivers/staging/fsl-dpaa2/rtc/Makefile|7 +
 drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h |  137 ++
 drivers/staging/fsl-dpaa2/rtc/dprtc.c |  701 +
 drivers/staging/fsl-dpaa2/rtc/dprtc.h |  164 +++
 drivers/staging/fsl-dpaa2/rtc/rtc.c   |  231 ++
 7 files changed, 1251 insertions(+), 2 deletions(-)
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/Makefile
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.c
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/dprtc.h
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/rtc.c

diff --git a/drivers/staging/fsl-dpaa2/Kconfig 
b/drivers/staging/fsl-dpaa2/Kconfig
index bbb7af5..ea2d4aa 100644
--- a/drivers/staging/fsl-dpaa2/Kconfig
+++ b/drivers/staging/fsl-dpaa2/Kconfig
@@ -24,3 +24,11 @@ config FSL_DPAA2_ETHSW
---help---
Driver for Freescale DPAA2 Ethernet Switch. Select
BRIDGE to have support for bridge tools.
+
+config FSL_DPAA2_PTP_CLOCK
+   tristate "Freescale DPAA2 PTP Clock"
+   depends on FSL_DPAA2
+   select PTP_1588_CLOCK
+   help
+ This driver adds support for using the DPAA2 1588 timer module
+ as a PTP clock.
diff --git a/drivers/staging/fsl-dpaa2/Makefile 
b/drivers/staging/fsl-dpaa2/Makefile
index 6cfd76b..9c70629 100644
--- a/drivers/staging/fsl-dpaa2/Makefile
+++ b/drivers/staging/fsl-dpaa2/Makefile
@@ -2,5 +2,6 @@
 # Freescale DataPath Acceleration Architecture Gen2 (DPAA2) drivers
 #
 
-obj-$(CONFIG_FSL_DPAA2_ETH)+= ethernet/
-obj-$(CONFIG_FSL_DPAA2_ETHSW)  += ethsw/
+obj-$(CONFIG_FSL_DPAA2_ETH)+= ethernet/
+obj-$(CONFIG_FSL_DPAA2_ETHSW)  += ethsw/
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK)  += rtc/
diff --git a/drivers/staging/fsl-dpaa2/rtc/Makefile 
b/drivers/staging/fsl-dpaa2/rtc/Makefile
new file mode 100644
index 000..5468da0
--- /dev/null
+++ b/drivers/staging/fsl-dpaa2/rtc/Makefile
@@ -0,0 +1,7 @@
+#
+# Makefile for the Freescale DPAA2 PTP clock
+#
+
+obj-$(CONFIG_FSL_DPAA2_PTP_CLOCK) += dpaa2-rtc.o
+
+dpaa2-rtc-objs := rtc.o dprtc.o
diff --git a/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h 
b/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
new file mode 100644
index 000..db6a473
--- /dev/null
+++ b/drivers/staging/fsl-dpaa2/rtc/dprtc-cmd.h
@@ -0,0 +1,137 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2013-2016 Freescale Semiconductor Inc.
+ * Copyright 2016-2018 NXP
+ */
+
+#ifndef _FSL_DPRTC_CMD_H
+#define _FSL_DPRTC_CMD_H
+
+/* DPRTC Version */
+#define DPRTC_VER_MAJOR2
+#define DPRTC_VER_MINOR0
+
+/* Command versioning */
+#define DPRTC_CMD_BASE_VERSION 1
+#define DPRTC_CMD_ID_OFFSET4
+
+#define DPRTC_CMD(id)  (((id) << DPRTC_CMD_ID_OFFSET) | DPRTC_CMD_BASE_VERSION)
+
+/* Command IDs */
+#define DPRTC_CMDID_CLOSE  DPRTC_CMD(0x800)
+#define DPRTC_CMDID_OPEN   DPRTC_CMD(0x810)
+#define DPRTC_CMDID_CREATE DPRTC_CMD(0x910)
+#define DPRTC_CMDID_DESTROYDPRTC_CMD(0x990)
+#define DPRTC_CMDID_GET_API_VERSIONDPRTC_CMD(0xa10)
+
+#define DPRTC_CMDID_ENABLE DPRTC_CMD(0x002)
+#define DPRTC_CMDID_DISABLEDPRTC_CMD(0x003)
+#define DPRTC_CMDID_GET_ATTR   DPRTC_CMD(0x004)
+#define DPRTC_CMDID_RESET  DPRTC_CMD(0x005)
+#define DPRTC_CMDID_IS_ENABLED DPRTC_CMD(0x006)
+
+#define DPRTC_CMDID_SET_IRQ_ENABLE DPRTC_CMD(0x012)
+#define DPRTC_CMDID_GET_IRQ_ENABLE DPRTC_CMD(0x013)
+#define DPRTC_CMDID_SET_IRQ_MASK   DPRTC_CMD(0x014)
+#define DPRTC_CMDID_GET_IRQ_MASK   DPRTC_CMD(0x015)
+#define DPRTC_CMDID_GET_IRQ_STATUS DPRTC_CMD(0x016)
+#define DPRTC_CMDID_CLEAR_IRQ_STATUS   DPRTC_CMD(0x017)
+
+#define DPRTC_CMDID_SET_CLOCK_OFFSET   DPRTC_CMD(0x1d0)
+#define DPRTC_CMDID_SET_FREQ_COMPENSATION  DPRTC_CMD(0x1d1)
+#define DPRTC_CMDID_GET_FREQ_COMPENSATION  DPRTC_CMD(0x1d2)
+#define DPRTC_CMDID_GET_TIME   DPRTC_CMD(0x1d3)
+#define DPRT

[v3, 2/2] MAINTAINERS: add maintainer for the DPAA2 PTP clock driver

2018-04-22 Thread Yangbo Lu
This patch is to add maintainer for the DPAA2 PTP clock driver.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- None.
Changes for v3:
- None.
---
 MAINTAINERS |6 ++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 0a1410d..7733efa 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4395,6 +4395,12 @@ L:   linux-ker...@vger.kernel.org
 S: Maintained
 F: drivers/staging/fsl-dpaa2/ethsw
 
+DPAA2 PTP CLOCK DRIVER
+M: Yangbo Lu 
+L: linux-ker...@vger.kernel.org
+S: Maintained
+F: drivers/staging/fsl-dpaa2/rtc
+
 DPT_I2O SCSI RAID DRIVER
 M: Adaptec OEM Raid Solutions 
 L: linux-s...@vger.kernel.org
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: fsl-dpaa2/eth: Add support for hardware timestamping

2018-04-25 Thread Yangbo Lu
From: Ioana Radulescu 

Hardware timestamping is supported both on Rx and Tx paths.
On Rx, timestamping is enabled for all frames. On Tx, we
only instruct the hardware to timestamp the frames marked
accordingly by the stack.

Signed-off-by: Ioana Radulescu 
Signed-off-by: Yangbo Lu 
---
 drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c |  109 +++-
 drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h |   48 ++-
 2 files changed, 151 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c 
b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
index 553678d..d9febba 100644
--- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
+++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
@@ -38,8 +38,11 @@
 #include 
 #include 
 #include 
-
+#include 
 #include 
+
+#include 
+
 #include "dpaa2-eth.h"
 
 /* CREATE_TRACE_POINTS only needs to be defined once. Other dpa files
@@ -275,6 +278,16 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,
 
prefetch(skb->data);
 
+   /* Get the timestamp value */
+   if (priv->ts_rx_en) {
+   struct skb_shared_hwtstamps *shhwtstamps = skb_hwtstamps(skb);
+   u64 *ns = dpaa2_get_ts(vaddr, false);
+
+   *ns = DPAA2_PTP_NOMINAL_FREQ_PERIOD_NS * le64_to_cpup(ns);
+   memset(shhwtstamps, 0, sizeof(*shhwtstamps));
+   shhwtstamps->hwtstamp = ns_to_ktime(*ns);
+   }
+
/* Check if we need to validate the L4 csum */
if (likely(dpaa2_fd_get_frc(fd) & DPAA2_FD_FRC_FASV)) {
status = le32_to_cpu(fas->status);
@@ -334,6 +347,28 @@ static int consume_frames(struct dpaa2_eth_channel *ch)
return cleaned;
 }
 
+/* Configure the egress frame annotation for timestamp update */
+static void enable_tx_tstamp(struct dpaa2_fd *fd, void *buf_start)
+{
+   struct dpaa2_faead *faead;
+   u32 ctrl, frc;
+
+   /* Mark the egress frame annotation area as valid */
+   frc = dpaa2_fd_get_frc(fd);
+   dpaa2_fd_set_frc(fd, frc | DPAA2_FD_FRC_FAEADV);
+
+   /* Set hardware annotation size */
+   ctrl = dpaa2_fd_get_ctrl(fd);
+   dpaa2_fd_set_ctrl(fd, ctrl | DPAA2_FD_CTRL_ASAL);
+
+   /* enable UPD (update prepanded data) bit in FAEAD field of
+* hardware frame annotation area
+*/
+   ctrl = DPAA2_FAEAD_A2V | DPAA2_FAEAD_UPDV | DPAA2_FAEAD_UPD;
+   faead = dpaa2_get_faead(buf_start, true);
+   faead->ctrl = cpu_to_le32(ctrl);
+}
+
 /* Create a frame descriptor based on a fragmented skb */
 static int build_sg_fd(struct dpaa2_eth_priv *priv,
   struct sk_buff *skb,
@@ -420,6 +455,9 @@ static int build_sg_fd(struct dpaa2_eth_priv *priv,
dpaa2_fd_set_len(fd, skb->len);
dpaa2_fd_set_ctrl(fd, DPAA2_FD_CTRL_PTA | DPAA2_FD_CTRL_PTV1);
 
+   if (priv->ts_tx_en && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)
+   enable_tx_tstamp(fd, sgt_buf);
+
return 0;
 
 dma_map_single_failed:
@@ -470,6 +508,9 @@ static int build_single_fd(struct dpaa2_eth_priv *priv,
dpaa2_fd_set_format(fd, dpaa2_fd_single);
dpaa2_fd_set_ctrl(fd, DPAA2_FD_CTRL_PTA | DPAA2_FD_CTRL_PTV1);
 
+   if (priv->ts_tx_en && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)
+   enable_tx_tstamp(fd, buffer_start);
+
return 0;
 }
 
@@ -520,6 +561,19 @@ static void free_tx_fd(const struct dpaa2_eth_priv *priv,
return;
}
 
+   /* Get the timestamp value */
+   if (priv->ts_tx_en && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) {
+   struct skb_shared_hwtstamps shhwtstamps;
+   u64 *ns;
+
+   memset(&shhwtstamps, 0, sizeof(shhwtstamps));
+
+   ns = dpaa2_get_ts(skbh, true);
+   *ns = DPAA2_PTP_NOMINAL_FREQ_PERIOD_NS * le64_to_cpup(ns);
+   shhwtstamps.hwtstamp = ns_to_ktime(*ns);
+   skb_tstamp_tx(skb, &shhwtstamps);
+   }
+
/* Free SGT buffer allocated on tx */
if (fd_format != dpaa2_fd_single)
skb_free_frag(skbh);
@@ -552,6 +606,10 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, 
struct net_device *net_dev)
goto err_alloc_headroom;
}
percpu_extras->tx_reallocs++;
+
+   if (skb->sk)
+   skb_set_owner_w(ns, skb->sk);
+
dev_kfree_skb(skb);
skb = ns;
}
@@ -1365,6 +1423,45 @@ static int dpaa2_eth_set_features(struct net_device 
*net_dev,
return 0;
 }
 
+static int dpaa2_eth_ts_ioctl(struct net_device *dev, struct ifreq *rq, int 
cmd)
+{
+   struct dpaa2_eth_priv *priv = netdev_priv(dev);
+   struct hwtstamp_config config;
+
+   if (copy_from_user(&config, rq->ifr_data, sizeof(config)))
+   return -EFAULT;
+
+   switch 

[v2, 3/3] staging: fsl-dpaa2/rtc: support phc_index of ethtool_ts_info

2018-04-26 Thread Yangbo Lu
This patch is to support phc_index of ethtool_ts_info.
Also make the rtc drvier depend on FSL_DPAA2_ETH because
this driver is only useful when PTP programs are getting
hardware time stamps on the PTP Ethernet packets using the
SO_TIMESTAMPING API.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
---
 drivers/staging/fsl-dpaa2/Kconfig   |2 +-
 drivers/staging/fsl-dpaa2/rtc/rtc.c |6 ++
 drivers/staging/fsl-dpaa2/rtc/rtc.h |   14 ++
 3 files changed, 17 insertions(+), 5 deletions(-)
 create mode 100644 drivers/staging/fsl-dpaa2/rtc/rtc.h

diff --git a/drivers/staging/fsl-dpaa2/Kconfig 
b/drivers/staging/fsl-dpaa2/Kconfig
index ea2d4aa..cad016a 100644
--- a/drivers/staging/fsl-dpaa2/Kconfig
+++ b/drivers/staging/fsl-dpaa2/Kconfig
@@ -27,7 +27,7 @@ config FSL_DPAA2_ETHSW
 
 config FSL_DPAA2_PTP_CLOCK
tristate "Freescale DPAA2 PTP Clock"
-   depends on FSL_DPAA2
+   depends on FSL_DPAA2_ETH
select PTP_1588_CLOCK
help
  This driver adds support for using the DPAA2 1588 timer module
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.c 
b/drivers/staging/fsl-dpaa2/rtc/rtc.c
index 1d6405b..0d52cb8 100644
--- a/drivers/staging/fsl-dpaa2/rtc/rtc.c
+++ b/drivers/staging/fsl-dpaa2/rtc/rtc.c
@@ -9,14 +9,12 @@
 #include 
 #include 
 
-#include "dprtc.h"
-#include "dprtc-cmd.h"
+#include "rtc.h"
 
 struct ptp_dpaa2_priv {
struct fsl_mc_device *rtc_mc_dev;
struct ptp_clock *clock;
struct ptp_clock_info caps;
-   int phc_index;
u32 freq_comp;
 };
 
@@ -173,7 +171,7 @@ static int rtc_probe(struct fsl_mc_device *mc_dev)
goto err_close;
}
 
-   ptp_dpaa2->phc_index = ptp_clock_index(ptp_dpaa2->clock);
+   dpaa2_phc_index = ptp_clock_index(ptp_dpaa2->clock);
 
dev_set_drvdata(dev, ptp_dpaa2);
 
diff --git a/drivers/staging/fsl-dpaa2/rtc/rtc.h 
b/drivers/staging/fsl-dpaa2/rtc/rtc.h
new file mode 100644
index 000..ff2e177
--- /dev/null
+++ b/drivers/staging/fsl-dpaa2/rtc/rtc.h
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 NXP
+ */
+
+#ifndef __RTC_H
+#define __RTC_H
+
+#include "dprtc.h"
+#include "dprtc-cmd.h"
+
+extern int dpaa2_phc_index;
+
+#endif
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v2, 2/3] staging: fsl-dpaa2/eth: add the get_ts_info interface for ethtool

2018-04-26 Thread Yangbo Lu
Since hardware timestmaping has been supported in driver, this
patch is to add the get_ts_info interface for ethtool to show
timestamping capability.

Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Added this patch.
---
 drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h |1 +
 drivers/staging/fsl-dpaa2/ethernet/dpaa2-ethtool.c |   23 
 2 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h 
b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h
index ff204c2..905a4e6 100644
--- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h
+++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h
@@ -390,6 +390,7 @@ struct dpaa2_eth_priv {
 
 extern const struct ethtool_ops dpaa2_ethtool_ops;
 extern const char dpaa2_eth_drv_version[];
+extern int dpaa2_phc_index;
 
 static inline int dpaa2_eth_cmp_dpni_ver(struct dpaa2_eth_priv *priv,
 u16 ver_major, u16 ver_minor)
diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-ethtool.c 
b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-ethtool.c
index bfc8b64..1ae779a 100644
--- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-ethtool.c
+++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-ethtool.c
@@ -30,6 +30,8 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include 
+
 #include "dpni.h"  /* DPNI_LINK_OPT_* */
 #include "dpaa2-eth.h"
 
@@ -274,6 +276,26 @@ static int dpaa2_eth_get_rxnfc(struct net_device *net_dev,
return 0;
 }
 
+int dpaa2_phc_index = -1;
+EXPORT_SYMBOL(dpaa2_phc_index);
+
+static int dpaa2_eth_get_ts_info(struct net_device *dev,
+struct ethtool_ts_info *info)
+{
+   info->so_timestamping = SOF_TIMESTAMPING_TX_HARDWARE |
+   SOF_TIMESTAMPING_RX_HARDWARE |
+   SOF_TIMESTAMPING_RAW_HARDWARE;
+
+   info->phc_index = dpaa2_phc_index;
+
+   info->tx_types = (1 << HWTSTAMP_TX_OFF) |
+(1 << HWTSTAMP_TX_ON);
+
+   info->rx_filters = (1 << HWTSTAMP_FILTER_NONE) |
+  (1 << HWTSTAMP_FILTER_ALL);
+   return 0;
+}
+
 const struct ethtool_ops dpaa2_ethtool_ops = {
.get_drvinfo = dpaa2_eth_get_drvinfo,
.get_link = ethtool_op_get_link,
@@ -283,4 +305,5 @@ static int dpaa2_eth_get_rxnfc(struct net_device *net_dev,
.get_ethtool_stats = dpaa2_eth_get_ethtool_stats,
.get_strings = dpaa2_eth_get_strings,
.get_rxnfc = dpaa2_eth_get_rxnfc,
+   .get_ts_info = dpaa2_eth_get_ts_info,
 };
-- 
1.7.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[v2, 1/3] staging: fsl-dpaa2/eth: Add support for hardware timestamping

2018-04-26 Thread Yangbo Lu
From: Ioana Radulescu 

Hardware timestamping is supported both on Rx and Tx paths.
On Rx, timestamping is enabled for all frames. On Tx, we
only instruct the hardware to timestamp the frames marked
accordingly by the stack.

Signed-off-by: Ioana Radulescu 
Signed-off-by: Yangbo Lu 
---
Changes for v2:
- Addressed sparse issues.
- Used tx_tstamp/rx_tstamp instead of ts_tx_en/ts_rx_en.
- Used DPAA2_PTP_CLK_PERIOD_NS instead.
---
 drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c |  111 +++-
 drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.h |   48 ++-
 2 files changed, 153 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c 
b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
index 553678d..3963717 100644
--- a/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
+++ b/drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c
@@ -38,8 +38,11 @@
 #include 
 #include 
 #include 
-
+#include 
 #include 
+
+#include 
+
 #include "dpaa2-eth.h"
 
 /* CREATE_TRACE_POINTS only needs to be defined once. Other dpa files
@@ -275,6 +278,18 @@ static void dpaa2_eth_rx(struct dpaa2_eth_priv *priv,
 
prefetch(skb->data);
 
+   /* Get the timestamp value */
+   if (priv->rx_tstamp) {
+   struct skb_shared_hwtstamps *shhwtstamps = skb_hwtstamps(skb);
+   __le64 *ts = dpaa2_get_ts(vaddr, false);
+   u64 ns;
+
+   memset(shhwtstamps, 0, sizeof(*shhwtstamps));
+
+   ns = DPAA2_PTP_CLK_PERIOD_NS * le64_to_cpup(ts);
+   shhwtstamps->hwtstamp = ns_to_ktime(ns);
+   }
+
/* Check if we need to validate the L4 csum */
if (likely(dpaa2_fd_get_frc(fd) & DPAA2_FD_FRC_FASV)) {
status = le32_to_cpu(fas->status);
@@ -334,6 +349,28 @@ static int consume_frames(struct dpaa2_eth_channel *ch)
return cleaned;
 }
 
+/* Configure the egress frame annotation for timestamp update */
+static void enable_tx_tstamp(struct dpaa2_fd *fd, void *buf_start)
+{
+   struct dpaa2_faead *faead;
+   u32 ctrl, frc;
+
+   /* Mark the egress frame annotation area as valid */
+   frc = dpaa2_fd_get_frc(fd);
+   dpaa2_fd_set_frc(fd, frc | DPAA2_FD_FRC_FAEADV);
+
+   /* Set hardware annotation size */
+   ctrl = dpaa2_fd_get_ctrl(fd);
+   dpaa2_fd_set_ctrl(fd, ctrl | DPAA2_FD_CTRL_ASAL);
+
+   /* enable UPD (update prepanded data) bit in FAEAD field of
+* hardware frame annotation area
+*/
+   ctrl = DPAA2_FAEAD_A2V | DPAA2_FAEAD_UPDV | DPAA2_FAEAD_UPD;
+   faead = dpaa2_get_faead(buf_start, true);
+   faead->ctrl = cpu_to_le32(ctrl);
+}
+
 /* Create a frame descriptor based on a fragmented skb */
 static int build_sg_fd(struct dpaa2_eth_priv *priv,
   struct sk_buff *skb,
@@ -420,6 +457,9 @@ static int build_sg_fd(struct dpaa2_eth_priv *priv,
dpaa2_fd_set_len(fd, skb->len);
dpaa2_fd_set_ctrl(fd, DPAA2_FD_CTRL_PTA | DPAA2_FD_CTRL_PTV1);
 
+   if (priv->tx_tstamp && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)
+   enable_tx_tstamp(fd, sgt_buf);
+
return 0;
 
 dma_map_single_failed:
@@ -470,6 +510,9 @@ static int build_single_fd(struct dpaa2_eth_priv *priv,
dpaa2_fd_set_format(fd, dpaa2_fd_single);
dpaa2_fd_set_ctrl(fd, DPAA2_FD_CTRL_PTA | DPAA2_FD_CTRL_PTV1);
 
+   if (priv->tx_tstamp && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)
+   enable_tx_tstamp(fd, buffer_start);
+
return 0;
 }
 
@@ -520,6 +563,19 @@ static void free_tx_fd(const struct dpaa2_eth_priv *priv,
return;
}
 
+   /* Get the timestamp value */
+   if (priv->tx_tstamp && skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) {
+   struct skb_shared_hwtstamps shhwtstamps;
+   __le64 *ts = dpaa2_get_ts(skbh, true);
+   u64 ns;
+
+   memset(&shhwtstamps, 0, sizeof(shhwtstamps));
+
+   ns = DPAA2_PTP_CLK_PERIOD_NS * le64_to_cpup(ts);
+   shhwtstamps.hwtstamp = ns_to_ktime(ns);
+   skb_tstamp_tx(skb, &shhwtstamps);
+   }
+
/* Free SGT buffer allocated on tx */
if (fd_format != dpaa2_fd_single)
skb_free_frag(skbh);
@@ -552,6 +608,10 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, 
struct net_device *net_dev)
goto err_alloc_headroom;
}
percpu_extras->tx_reallocs++;
+
+   if (skb->sk)
+   skb_set_owner_w(ns, skb->sk);
+
dev_kfree_skb(skb);
skb = ns;
}
@@ -1365,6 +1425,45 @@ static int dpaa2_eth_set_features(struct net_device 
*net_dev,
return 0;
 }
 
+static int dpaa2_eth_ts_ioctl(struct net_device *dev, struct ifreq *rq, int 
cmd)
+{
+   struct dpaa2_eth_priv *p