Re: [PATCH V13 3/4] ptp: Added a clock driver for the IXP46x.

2011-03-28 Thread John Stultz
On Sun, 2011-03-27 at 08:39 +0200, Richard Cochran wrote:
 This patch adds a driver for the hardware time stamping unit found on the
 IXP465. The basic clock operations and an external trigger are implemented.
 
 Signed-off-by: Richard Cochran richard.coch...@omicron.at

Acked-by: John Stultz john.stu...@linaro.org

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH V13 3/4] ptp: Added a clock driver for the IXP46x.

2011-03-27 Thread Richard Cochran
This patch adds a driver for the hardware time stamping unit found on the
IXP465. The basic clock operations and an external trigger are implemented.

Signed-off-by: Richard Cochran richard.coch...@omicron.at
Acked-by: John Stultz johns...@us.ibm.com
---
 arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h |   78 ++
 drivers/net/arm/ixp4xx_eth.c  |  192 ++-
 drivers/ptp/Kconfig   |   13 +
 drivers/ptp/Makefile  |1 +
 drivers/ptp/ptp_ixp46x.c  |  332 +
 5 files changed, 613 insertions(+), 3 deletions(-)
 create mode 100644 arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h
 create mode 100644 drivers/ptp/ptp_ixp46x.c

diff --git a/arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h 
b/arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h
new file mode 100644
index 000..292d55e
--- /dev/null
+++ b/arch/arm/mach-ixp4xx/include/mach/ixp46x_ts.h
@@ -0,0 +1,78 @@
+/*
+ * PTP 1588 clock using the IXP46X
+ *
+ * Copyright (C) 2010 OMICRON electronics GmbH
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _IXP46X_TS_H_
+#define _IXP46X_TS_H_
+
+#define DEFAULT_ADDEND 0xF029
+#define TICKS_NS_SHIFT 4
+
+struct ixp46x_channel_ctl {
+   u32 ch_control;  /* 0x40 Time Synchronization Channel Control */
+   u32 ch_event;/* 0x44 Time Synchronization Channel Event */
+   u32 tx_snap_lo;  /* 0x48 Transmit Snapshot Low Register */
+   u32 tx_snap_hi;  /* 0x4C Transmit Snapshot High Register */
+   u32 rx_snap_lo;  /* 0x50 Receive Snapshot Low Register */
+   u32 rx_snap_hi;  /* 0x54 Receive Snapshot High Register */
+   u32 src_uuid_lo; /* 0x58 Source UUID0 Low Register */
+   u32 src_uuid_hi; /* 0x5C Sequence Identifier/Source UUID0 High */
+};
+
+struct ixp46x_ts_regs {
+   u32 control; /* 0x00 Time Sync Control Register */
+   u32 event;   /* 0x04 Time Sync Event Register */
+   u32 addend;  /* 0x08 Time Sync Addend Register */
+   u32 accum;   /* 0x0C Time Sync Accumulator Register */
+   u32 test;/* 0x10 Time Sync Test Register */
+   u32 unused;  /* 0x14 */
+   u32 rsystime_lo; /* 0x18 RawSystemTime_Low Register */
+   u32 rsystime_hi; /* 0x1C RawSystemTime_High Register */
+   u32 systime_lo;  /* 0x20 SystemTime_Low Register */
+   u32 systime_hi;  /* 0x24 SystemTime_High Register */
+   u32 trgt_lo; /* 0x28 TargetTime_Low Register */
+   u32 trgt_hi; /* 0x2C TargetTime_High Register */
+   u32 asms_lo; /* 0x30 Auxiliary Slave Mode Snapshot Low  */
+   u32 asms_hi; /* 0x34 Auxiliary Slave Mode Snapshot High */
+   u32 amms_lo; /* 0x38 Auxiliary Master Mode Snapshot Low */
+   u32 amms_hi; /* 0x3C Auxiliary Master Mode Snapshot High */
+
+   struct ixp46x_channel_ctl channel[3];
+};
+
+/* 0x00 Time Sync Control Register Bits */
+#define TSCR_AMM (13)
+#define TSCR_ASM (12)
+#define TSCR_TTM (11)
+#define TSCR_RST (10)
+
+/* 0x04 Time Sync Event Register Bits */
+#define TSER_SNM (13)
+#define TSER_SNS (12)
+#define TTIPEND  (11)
+
+/* 0x40 Time Synchronization Channel Control Register Bits */
+#define MASTER_MODE   (10)
+#define TIMESTAMP_ALL (11)
+
+/* 0x44 Time Synchronization Channel Event Register Bits */
+#define TX_SNAPSHOT_LOCKED (10)
+#define RX_SNAPSHOT_LOCKED (11)
+
+#endif
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c
index 9eb9b98..c56fcb6 100644
--- a/drivers/net/arm/ixp4xx_eth.c
+++ b/drivers/net/arm/ixp4xx_eth.c
@@ -30,9 +30,12 @@
 #include linux/etherdevice.h
 #include linux/io.h
 #include linux/kernel.h
+#include linux/net_tstamp.h
 #include linux/phy.h
 #include linux/platform_device.h
+#include linux/ptp_classify.h
 #include linux/slab.h
+#include mach/ixp46x_ts.h
 #include mach/npe.h
 #include mach/qmgr.h
 
@@ -67,6 +70,10 @@
 #define RXFREE_QUEUE(port_id)  (NPE_ID(port_id) + 26)
 #define TXDONE_QUEUE   31
 
+#define PTP_SLAVE_MODE 1
+#define PTP_MASTER_MODE2
+#define PORT2CHANNEL(p)NPE_ID(p-id)
+
 /* TX Control Registers */
 #define TX_CNTRL0_TX_EN0x01
 #define TX_CNTRL0_HALFDUPLEX   0x02
@@ -171,6 +178,8 @@ struct port {
int id; /* logical port