xref: /linux/drivers/net/ethernet/renesas/rcar_gen4_ptp.h (revision 515c0ead788f4118a91b3ae55fe51f95543553ec)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Renesas R-Car Gen4 gPTP device driver
3  *
4  * Copyright (C) 2022 Renesas Electronics Corporation
5  */
6 
7 #ifndef __RCAR_GEN4_PTP_H__
8 #define __RCAR_GEN4_PTP_H__
9 
10 #include <linux/ptp_clock_kernel.h>
11 
12 #define RCAR_GEN4_GPTP_OFFSET_S4	0x00018000
13 
14 /* driver's definitions */
15 #define RCAR_GEN4_RXTSTAMP_ENABLED		BIT(0)
16 #define RCAR_GEN4_RXTSTAMP_TYPE_V2_L2_EVENT	BIT(1)
17 #define RCAR_GEN4_RXTSTAMP_TYPE_ALL		(RCAR_GEN4_RXTSTAMP_TYPE_V2_L2_EVENT | BIT(2))
18 #define RCAR_GEN4_RXTSTAMP_TYPE			RCAR_GEN4_RXTSTAMP_TYPE_ALL
19 
20 #define RCAR_GEN4_TXTSTAMP_ENABLED		BIT(0)
21 
22 
23 struct rcar_gen4_ptp_private {
24 	void __iomem *addr;
25 	struct ptp_clock *clock;
26 	struct ptp_clock_info info;
27 	spinlock_t lock;	/* For multiple registers access */
28 	u32 tstamp_tx_ctrl;
29 	u32 tstamp_rx_ctrl;
30 	s64 default_addend;
31 	bool initialized;
32 };
33 
34 int rcar_gen4_ptp_register(struct rcar_gen4_ptp_private *ptp_priv, u32 rate);
35 int rcar_gen4_ptp_unregister(struct rcar_gen4_ptp_private *ptp_priv);
36 struct rcar_gen4_ptp_private *rcar_gen4_ptp_alloc(struct platform_device *pdev);
37 
38 #endif	/* #ifndef __RCAR_GEN4_PTP_H__ */
39