netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] dpaa2-ptp: support external trigger event
@ 2019-12-12 10:08 Yangbo Lu
  2019-12-12 10:08 ` [PATCH 1/3] ptp_qoriq: check valid status before reading extts fifo Yangbo Lu
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Yangbo Lu @ 2019-12-12 10:08 UTC (permalink / raw)
  To: netdev, David S . Miller, Richard Cochran; +Cc: Yangbo Lu

This patch-set is to add external trigger event support for
dpaa2-ptp driver since MC firmware has supported external
trigger interrupt with a new v2 dprtc_set_irq_mask() API.
And extts_clean_up() function in ptp_qoriq driver needs to be
exported with minor fixes for dpaa2-ptp reusing.

Yangbo Lu (3):
  ptp_qoriq: check valid status before reading extts fifo
  ptp_qoriq: export extts_clean_up() function
  dpaa2-ptp: add external trigger event support

 drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c | 20 ++++++++++++++++++++
 drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h |  4 +++-
 drivers/net/ethernet/freescale/dpaa2/dprtc.h     |  2 ++
 drivers/ptp/ptp_qoriq.c                          | 15 ++++++++++-----
 include/linux/fsl/ptp_qoriq.h                    |  1 +
 5 files changed, 36 insertions(+), 6 deletions(-)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] ptp_qoriq: check valid status before reading extts fifo
  2019-12-12 10:08 [PATCH 0/3] dpaa2-ptp: support external trigger event Yangbo Lu
@ 2019-12-12 10:08 ` Yangbo Lu
  2019-12-12 10:08 ` [PATCH 2/3] ptp_qoriq: export extts_clean_up() function Yangbo Lu
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Yangbo Lu @ 2019-12-12 10:08 UTC (permalink / raw)
  To: netdev, David S . Miller, Richard Cochran; +Cc: Yangbo Lu

For PTP timer supporting external trigger timestamp FIFO,
there is a valid bit in TMR_STAT register indicating the
timestamp is available. For PTP timer without FIFO, there
is not TMR_STAT register.
This patch is to check the valid bit for the FIFO before
reading timestamp, and to avoid operating TMR_STAT register
for PTP timer without the FIFO.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
---
 drivers/ptp/ptp_qoriq.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/ptp/ptp_qoriq.c b/drivers/ptp/ptp_qoriq.c
index a577218..a3062cd 100644
--- a/drivers/ptp/ptp_qoriq.c
+++ b/drivers/ptp/ptp_qoriq.c
@@ -81,7 +81,7 @@ static int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index,
 	struct ptp_clock_event event;
 	void __iomem *reg_etts_l;
 	void __iomem *reg_etts_h;
-	u32 valid, stat, lo, hi;
+	u32 valid, lo, hi;
 
 	switch (index) {
 	case 0:
@@ -101,6 +101,10 @@ static int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index,
 	event.type = PTP_CLOCK_EXTTS;
 	event.index = index;
 
+	if (ptp_qoriq->extts_fifo_support)
+		if (!(ptp_qoriq->read(&regs->ctrl_regs->tmr_stat) & valid))
+			return 0;
+
 	do {
 		lo = ptp_qoriq->read(reg_etts_l);
 		hi = ptp_qoriq->read(reg_etts_h);
@@ -111,8 +115,9 @@ static int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index,
 			ptp_clock_event(ptp_qoriq->clock, &event);
 		}
 
-		stat = ptp_qoriq->read(&regs->ctrl_regs->tmr_stat);
-	} while (ptp_qoriq->extts_fifo_support && (stat & valid));
+		if (!ptp_qoriq->extts_fifo_support)
+			break;
+	} while (ptp_qoriq->read(&regs->ctrl_regs->tmr_stat) & valid);
 
 	return 0;
 }
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] ptp_qoriq: export extts_clean_up() function
  2019-12-12 10:08 [PATCH 0/3] dpaa2-ptp: support external trigger event Yangbo Lu
  2019-12-12 10:08 ` [PATCH 1/3] ptp_qoriq: check valid status before reading extts fifo Yangbo Lu
@ 2019-12-12 10:08 ` Yangbo Lu
  2019-12-12 10:08 ` [PATCH 3/3] dpaa2-ptp: add external trigger event support Yangbo Lu
  2019-12-16 23:56 ` [PATCH 0/3] dpaa2-ptp: support external trigger event David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Yangbo Lu @ 2019-12-12 10:08 UTC (permalink / raw)
  To: netdev, David S . Miller, Richard Cochran; +Cc: Yangbo Lu

Export extts_clean_up() function so that dpaa2-ptp
driver is able to reuse it.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
---
 drivers/ptp/ptp_qoriq.c       | 4 ++--
 include/linux/fsl/ptp_qoriq.h | 1 +
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/ptp/ptp_qoriq.c b/drivers/ptp/ptp_qoriq.c
index a3062cd..b27c46e 100644
--- a/drivers/ptp/ptp_qoriq.c
+++ b/drivers/ptp/ptp_qoriq.c
@@ -74,8 +74,7 @@ static void set_fipers(struct ptp_qoriq *ptp_qoriq)
 	ptp_qoriq->write(&regs->fiper_regs->tmr_fiper2, ptp_qoriq->tmr_fiper2);
 }
 
-static int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index,
-			  bool update_event)
+int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index, bool update_event)
 {
 	struct ptp_qoriq_registers *regs = &ptp_qoriq->regs;
 	struct ptp_clock_event event;
@@ -121,6 +120,7 @@ static int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index,
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(extts_clean_up);
 
 /*
  * Interrupt service routine
diff --git a/include/linux/fsl/ptp_qoriq.h b/include/linux/fsl/ptp_qoriq.h
index 992bf9f..b0b7435 100644
--- a/include/linux/fsl/ptp_qoriq.h
+++ b/include/linux/fsl/ptp_qoriq.h
@@ -192,6 +192,7 @@ int ptp_qoriq_settime(struct ptp_clock_info *ptp,
 		      const struct timespec64 *ts);
 int ptp_qoriq_enable(struct ptp_clock_info *ptp,
 		     struct ptp_clock_request *rq, int on);
+int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index, bool update_event);
 #ifdef CONFIG_DEBUG_FS
 void ptp_qoriq_create_debugfs(struct ptp_qoriq *ptp_qoriq);
 void ptp_qoriq_remove_debugfs(struct ptp_qoriq *ptp_qoriq);
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] dpaa2-ptp: add external trigger event support
  2019-12-12 10:08 [PATCH 0/3] dpaa2-ptp: support external trigger event Yangbo Lu
  2019-12-12 10:08 ` [PATCH 1/3] ptp_qoriq: check valid status before reading extts fifo Yangbo Lu
  2019-12-12 10:08 ` [PATCH 2/3] ptp_qoriq: export extts_clean_up() function Yangbo Lu
@ 2019-12-12 10:08 ` Yangbo Lu
  2019-12-16 23:56 ` [PATCH 0/3] dpaa2-ptp: support external trigger event David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Yangbo Lu @ 2019-12-12 10:08 UTC (permalink / raw)
  To: netdev, David S . Miller, Richard Cochran; +Cc: Yangbo Lu

This patch is to add external trigger event support
for dpaa2-ptp driver with v2 dprtc_set_irq_mask() API.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
---
 drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c | 20 ++++++++++++++++++++
 drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h |  4 +++-
 drivers/net/ethernet/freescale/dpaa2/dprtc.h     |  2 ++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
index a9503ae..a0061e9 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-ptp.c
@@ -27,6 +27,20 @@ static int dpaa2_ptp_enable(struct ptp_clock_info *ptp,
 	mc_dev = to_fsl_mc_device(dev);
 
 	switch (rq->type) {
+	case PTP_CLK_REQ_EXTTS:
+		switch (rq->extts.index) {
+		case 0:
+			bit = DPRTC_EVENT_ETS1;
+			break;
+		case 1:
+			bit = DPRTC_EVENT_ETS2;
+			break;
+		default:
+			return -EINVAL;
+		}
+		if (on)
+			extts_clean_up(ptp_qoriq, rq->extts.index, false);
+		break;
 	case PTP_CLK_REQ_PPS:
 		bit = DPRTC_EVENT_PPS;
 		break;
@@ -96,6 +110,12 @@ static irqreturn_t dpaa2_ptp_irq_handler_thread(int irq, void *priv)
 		ptp_clock_event(ptp_qoriq->clock, &event);
 	}
 
+	if (status & DPRTC_EVENT_ETS1)
+		extts_clean_up(ptp_qoriq, 0, true);
+
+	if (status & DPRTC_EVENT_ETS2)
+		extts_clean_up(ptp_qoriq, 1, true);
+
 	err = dprtc_clear_irq_status(mc_dev->mc_io, 0, mc_dev->mc_handle,
 				     DPRTC_IRQ_INDEX, status);
 	if (unlikely(err)) {
diff --git a/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
index 4ac05bf..96ffeb9 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dprtc-cmd.h
@@ -9,9 +9,11 @@
 
 /* Command versioning */
 #define DPRTC_CMD_BASE_VERSION		1
+#define DPRTC_CMD_VERSION_2		2
 #define DPRTC_CMD_ID_OFFSET		4
 
 #define DPRTC_CMD(id)	(((id) << DPRTC_CMD_ID_OFFSET) | DPRTC_CMD_BASE_VERSION)
+#define DPRTC_CMD_V2(id) (((id) << DPRTC_CMD_ID_OFFSET) | DPRTC_CMD_VERSION_2)
 
 /* Command IDs */
 #define DPRTC_CMDID_CLOSE			DPRTC_CMD(0x800)
@@ -19,7 +21,7 @@
 
 #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_SET_IRQ_MASK		DPRTC_CMD_V2(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)
diff --git a/drivers/net/ethernet/freescale/dpaa2/dprtc.h b/drivers/net/ethernet/freescale/dpaa2/dprtc.h
index 311c184..05c4137 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dprtc.h
+++ b/drivers/net/ethernet/freescale/dpaa2/dprtc.h
@@ -20,6 +20,8 @@ struct fsl_mc_io;
 #define DPRTC_IRQ_INDEX		0
 
 #define DPRTC_EVENT_PPS		0x08000000
+#define DPRTC_EVENT_ETS1	0x00800000
+#define DPRTC_EVENT_ETS2	0x00400000
 
 int dprtc_open(struct fsl_mc_io *mc_io,
 	       u32 cmd_flags,
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] dpaa2-ptp: support external trigger event
  2019-12-12 10:08 [PATCH 0/3] dpaa2-ptp: support external trigger event Yangbo Lu
                   ` (2 preceding siblings ...)
  2019-12-12 10:08 ` [PATCH 3/3] dpaa2-ptp: add external trigger event support Yangbo Lu
@ 2019-12-16 23:56 ` David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2019-12-16 23:56 UTC (permalink / raw)
  To: yangbo.lu; +Cc: netdev, richardcochran

From: Yangbo Lu <yangbo.lu@nxp.com>
Date: Thu, 12 Dec 2019 18:08:03 +0800

> This patch-set is to add external trigger event support for
> dpaa2-ptp driver since MC firmware has supported external
> trigger interrupt with a new v2 dprtc_set_irq_mask() API.
> And extts_clean_up() function in ptp_qoriq driver needs to be
> exported with minor fixes for dpaa2-ptp reusing.

Series applied to net-next.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-12-16 23:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-12 10:08 [PATCH 0/3] dpaa2-ptp: support external trigger event Yangbo Lu
2019-12-12 10:08 ` [PATCH 1/3] ptp_qoriq: check valid status before reading extts fifo Yangbo Lu
2019-12-12 10:08 ` [PATCH 2/3] ptp_qoriq: export extts_clean_up() function Yangbo Lu
2019-12-12 10:08 ` [PATCH 3/3] dpaa2-ptp: add external trigger event support Yangbo Lu
2019-12-16 23:56 ` [PATCH 0/3] dpaa2-ptp: support external trigger event David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).