1f6bd5952SGrygorii Strashko /* SPDX-License-Identifier: GPL-2.0+ */
2f6bd5952SGrygorii Strashko /* TI K3 AM65 CPTS driver interface
3f6bd5952SGrygorii Strashko  *
4f6bd5952SGrygorii Strashko  * Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com
5f6bd5952SGrygorii Strashko  */
6f6bd5952SGrygorii Strashko 
7f6bd5952SGrygorii Strashko #ifndef K3_CPTS_H_
8f6bd5952SGrygorii Strashko #define K3_CPTS_H_
9f6bd5952SGrygorii Strashko 
10f6bd5952SGrygorii Strashko #include <linux/device.h>
11f6bd5952SGrygorii Strashko #include <linux/of.h>
12f6bd5952SGrygorii Strashko 
13f6bd5952SGrygorii Strashko struct am65_cpts;
14f6bd5952SGrygorii Strashko 
15ec008fa2SIvan Khoronzhuk struct am65_cpts_estf_cfg {
16ec008fa2SIvan Khoronzhuk 	u64 ns_period;
17ec008fa2SIvan Khoronzhuk 	u64 ns_start;
18ec008fa2SIvan Khoronzhuk };
19ec008fa2SIvan Khoronzhuk 
20f6bd5952SGrygorii Strashko #if IS_ENABLED(CONFIG_TI_K3_AM65_CPTS)
21f6bd5952SGrygorii Strashko struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
22f6bd5952SGrygorii Strashko 				   struct device_node *node);
23f6bd5952SGrygorii Strashko int am65_cpts_phc_index(struct am65_cpts *cpts);
24f6bd5952SGrygorii Strashko void am65_cpts_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
25f6bd5952SGrygorii Strashko void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
26f6bd5952SGrygorii Strashko void am65_cpts_rx_enable(struct am65_cpts *cpts, bool en);
27ec008fa2SIvan Khoronzhuk u64 am65_cpts_ns_gettime(struct am65_cpts *cpts);
28ec008fa2SIvan Khoronzhuk int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
29ec008fa2SIvan Khoronzhuk 			  struct am65_cpts_estf_cfg *cfg);
30ec008fa2SIvan Khoronzhuk void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx);
31f6bd5952SGrygorii Strashko #else
32f6bd5952SGrygorii Strashko static inline struct am65_cpts *am65_cpts_create(struct device *dev,
33f6bd5952SGrygorii Strashko 						 void __iomem *regs,
34f6bd5952SGrygorii Strashko 						 struct device_node *node)
35f6bd5952SGrygorii Strashko {
36f6bd5952SGrygorii Strashko 	return ERR_PTR(-EOPNOTSUPP);
37f6bd5952SGrygorii Strashko }
38f6bd5952SGrygorii Strashko 
39f6bd5952SGrygorii Strashko static inline int am65_cpts_phc_index(struct am65_cpts *cpts)
40f6bd5952SGrygorii Strashko {
41f6bd5952SGrygorii Strashko 	return -1;
42f6bd5952SGrygorii Strashko }
43f6bd5952SGrygorii Strashko 
44f6bd5952SGrygorii Strashko static inline void am65_cpts_tx_timestamp(struct am65_cpts *cpts,
45f6bd5952SGrygorii Strashko 					  struct sk_buff *skb)
46f6bd5952SGrygorii Strashko {
47f6bd5952SGrygorii Strashko }
48f6bd5952SGrygorii Strashko 
49f6bd5952SGrygorii Strashko static inline void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts,
50f6bd5952SGrygorii Strashko 					       struct sk_buff *skb)
51f6bd5952SGrygorii Strashko {
52f6bd5952SGrygorii Strashko }
53f6bd5952SGrygorii Strashko 
54f6bd5952SGrygorii Strashko static inline void am65_cpts_rx_enable(struct am65_cpts *cpts, bool en)
55f6bd5952SGrygorii Strashko {
56f6bd5952SGrygorii Strashko }
57ec008fa2SIvan Khoronzhuk 
58ec008fa2SIvan Khoronzhuk static s64 am65_cpts_ns_gettime(struct am65_cpts *cpts)
59ec008fa2SIvan Khoronzhuk {
60ec008fa2SIvan Khoronzhuk 	return 0;
61ec008fa2SIvan Khoronzhuk }
62ec008fa2SIvan Khoronzhuk 
63ec008fa2SIvan Khoronzhuk static int am65_cpts_estf_enable(struct am65_cpts *cpts,
64ec008fa2SIvan Khoronzhuk 				 int idx, struct am65_cpts_estf_cfg *cfg)
65ec008fa2SIvan Khoronzhuk {
66ec008fa2SIvan Khoronzhuk 	return 0;
67ec008fa2SIvan Khoronzhuk }
68ec008fa2SIvan Khoronzhuk 
69ec008fa2SIvan Khoronzhuk static void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx)
70ec008fa2SIvan Khoronzhuk {
71ec008fa2SIvan Khoronzhuk }
72f6bd5952SGrygorii Strashko #endif
73f6bd5952SGrygorii Strashko 
74f6bd5952SGrygorii Strashko #endif /* K3_CPTS_H_ */
75