| .. | .. |
|---|
| 7 | 7 | #define __PTP_QORIQ_H__ |
|---|
| 8 | 8 | |
|---|
| 9 | 9 | #include <linux/io.h> |
|---|
| 10 | +#include <linux/interrupt.h> |
|---|
| 10 | 11 | #include <linux/ptp_clock_kernel.h> |
|---|
| 11 | 12 | |
|---|
| 12 | 13 | /* |
|---|
| .. | .. |
|---|
| 49 | 50 | u32 tmr_etts2_l; /* Timestamp of general purpose external trigger */ |
|---|
| 50 | 51 | }; |
|---|
| 51 | 52 | |
|---|
| 52 | | -struct qoriq_ptp_registers { |
|---|
| 53 | +struct ptp_qoriq_registers { |
|---|
| 53 | 54 | struct ctrl_regs __iomem *ctrl_regs; |
|---|
| 54 | 55 | struct alarm_regs __iomem *alarm_regs; |
|---|
| 55 | 56 | struct fiper_regs __iomem *fiper_regs; |
|---|
| .. | .. |
|---|
| 57 | 58 | }; |
|---|
| 58 | 59 | |
|---|
| 59 | 60 | /* Offset definitions for the four register groups */ |
|---|
| 60 | | -#define CTRL_REGS_OFFSET 0x0 |
|---|
| 61 | | -#define ALARM_REGS_OFFSET 0x40 |
|---|
| 62 | | -#define FIPER_REGS_OFFSET 0x80 |
|---|
| 63 | | -#define ETTS_REGS_OFFSET 0xa0 |
|---|
| 61 | +#define ETSEC_CTRL_REGS_OFFSET 0x0 |
|---|
| 62 | +#define ETSEC_ALARM_REGS_OFFSET 0x40 |
|---|
| 63 | +#define ETSEC_FIPER_REGS_OFFSET 0x80 |
|---|
| 64 | +#define ETSEC_ETTS_REGS_OFFSET 0xa0 |
|---|
| 64 | 65 | |
|---|
| 65 | | -#define FMAN_CTRL_REGS_OFFSET 0x80 |
|---|
| 66 | | -#define FMAN_ALARM_REGS_OFFSET 0xb8 |
|---|
| 67 | | -#define FMAN_FIPER_REGS_OFFSET 0xd0 |
|---|
| 68 | | -#define FMAN_ETTS_REGS_OFFSET 0xe0 |
|---|
| 66 | +#define CTRL_REGS_OFFSET 0x80 |
|---|
| 67 | +#define ALARM_REGS_OFFSET 0xb8 |
|---|
| 68 | +#define FIPER_REGS_OFFSET 0xd0 |
|---|
| 69 | +#define ETTS_REGS_OFFSET 0xe0 |
|---|
| 69 | 70 | |
|---|
| 70 | 71 | |
|---|
| 71 | 72 | /* Bit definitions for the TMR_CTRL register */ |
|---|
| .. | .. |
|---|
| 120 | 121 | /* Bit definitions for the TMR_STAT register */ |
|---|
| 121 | 122 | #define STAT_VEC_SHIFT (0) /* Timer general purpose status vector */ |
|---|
| 122 | 123 | #define STAT_VEC_MASK (0x3f) |
|---|
| 124 | +#define ETS1_VLD (1<<24) |
|---|
| 125 | +#define ETS2_VLD (1<<25) |
|---|
| 123 | 126 | |
|---|
| 124 | 127 | /* Bit definitions for the TMR_PRSC register */ |
|---|
| 125 | 128 | #define PRSC_OCK_SHIFT (0) /* Output clock division/prescale factor. */ |
|---|
| .. | .. |
|---|
| 132 | 135 | #define DEFAULT_CKSEL 1 |
|---|
| 133 | 136 | #define DEFAULT_TMR_PRSC 2 |
|---|
| 134 | 137 | #define DEFAULT_FIPER1_PERIOD 1000000000 |
|---|
| 135 | | -#define DEFAULT_FIPER2_PERIOD 100000 |
|---|
| 138 | +#define DEFAULT_FIPER2_PERIOD 1000000000 |
|---|
| 139 | +#define DEFAULT_FIPER3_PERIOD 1000000000 |
|---|
| 136 | 140 | |
|---|
| 137 | | -struct qoriq_ptp { |
|---|
| 141 | +struct ptp_qoriq { |
|---|
| 138 | 142 | void __iomem *base; |
|---|
| 139 | | - struct qoriq_ptp_registers regs; |
|---|
| 143 | + struct ptp_qoriq_registers regs; |
|---|
| 140 | 144 | spinlock_t lock; /* protects regs */ |
|---|
| 141 | 145 | struct ptp_clock *clock; |
|---|
| 142 | 146 | struct ptp_clock_info caps; |
|---|
| 143 | 147 | struct resource *rsrc; |
|---|
| 148 | + struct dentry *debugfs_root; |
|---|
| 149 | + struct device *dev; |
|---|
| 150 | + bool extts_fifo_support; |
|---|
| 151 | + bool fiper3_support; |
|---|
| 144 | 152 | int irq; |
|---|
| 145 | 153 | int phc_index; |
|---|
| 146 | | - u64 alarm_interval; /* for periodic alarm */ |
|---|
| 147 | | - u64 alarm_value; |
|---|
| 148 | 154 | u32 tclk_period; /* nanoseconds */ |
|---|
| 149 | 155 | u32 tmr_prsc; |
|---|
| 150 | 156 | u32 tmr_add; |
|---|
| 151 | 157 | u32 cksel; |
|---|
| 152 | 158 | u32 tmr_fiper1; |
|---|
| 153 | 159 | u32 tmr_fiper2; |
|---|
| 160 | + u32 tmr_fiper3; |
|---|
| 161 | + u32 (*read)(unsigned __iomem *addr); |
|---|
| 162 | + void (*write)(unsigned __iomem *addr, u32 val); |
|---|
| 154 | 163 | }; |
|---|
| 155 | 164 | |
|---|
| 156 | | -static inline u32 qoriq_read(unsigned __iomem *addr) |
|---|
| 165 | +static inline u32 qoriq_read_be(unsigned __iomem *addr) |
|---|
| 157 | 166 | { |
|---|
| 158 | | - u32 val; |
|---|
| 159 | | - |
|---|
| 160 | | - val = ioread32be(addr); |
|---|
| 161 | | - return val; |
|---|
| 167 | + return ioread32be(addr); |
|---|
| 162 | 168 | } |
|---|
| 163 | 169 | |
|---|
| 164 | | -static inline void qoriq_write(unsigned __iomem *addr, u32 val) |
|---|
| 170 | +static inline void qoriq_write_be(unsigned __iomem *addr, u32 val) |
|---|
| 165 | 171 | { |
|---|
| 166 | 172 | iowrite32be(val, addr); |
|---|
| 167 | 173 | } |
|---|
| 168 | 174 | |
|---|
| 175 | +static inline u32 qoriq_read_le(unsigned __iomem *addr) |
|---|
| 176 | +{ |
|---|
| 177 | + return ioread32(addr); |
|---|
| 178 | +} |
|---|
| 179 | + |
|---|
| 180 | +static inline void qoriq_write_le(unsigned __iomem *addr, u32 val) |
|---|
| 181 | +{ |
|---|
| 182 | + iowrite32(val, addr); |
|---|
| 183 | +} |
|---|
| 184 | + |
|---|
| 185 | +irqreturn_t ptp_qoriq_isr(int irq, void *priv); |
|---|
| 186 | +int ptp_qoriq_init(struct ptp_qoriq *ptp_qoriq, void __iomem *base, |
|---|
| 187 | + const struct ptp_clock_info *caps); |
|---|
| 188 | +void ptp_qoriq_free(struct ptp_qoriq *ptp_qoriq); |
|---|
| 189 | +int ptp_qoriq_adjfine(struct ptp_clock_info *ptp, long scaled_ppm); |
|---|
| 190 | +int ptp_qoriq_adjtime(struct ptp_clock_info *ptp, s64 delta); |
|---|
| 191 | +int ptp_qoriq_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts); |
|---|
| 192 | +int ptp_qoriq_settime(struct ptp_clock_info *ptp, |
|---|
| 193 | + const struct timespec64 *ts); |
|---|
| 194 | +int ptp_qoriq_enable(struct ptp_clock_info *ptp, |
|---|
| 195 | + struct ptp_clock_request *rq, int on); |
|---|
| 196 | +int extts_clean_up(struct ptp_qoriq *ptp_qoriq, int index, bool update_event); |
|---|
| 197 | +#ifdef CONFIG_DEBUG_FS |
|---|
| 198 | +void ptp_qoriq_create_debugfs(struct ptp_qoriq *ptp_qoriq); |
|---|
| 199 | +void ptp_qoriq_remove_debugfs(struct ptp_qoriq *ptp_qoriq); |
|---|
| 200 | +#else |
|---|
| 201 | +static inline void ptp_qoriq_create_debugfs(struct ptp_qoriq *ptp_qoriq) |
|---|
| 202 | +{ } |
|---|
| 203 | +static inline void ptp_qoriq_remove_debugfs(struct ptp_qoriq *ptp_qoriq) |
|---|
| 204 | +{ } |
|---|
| 205 | +#endif |
|---|
| 206 | + |
|---|
| 169 | 207 | #endif |
|---|