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);
31*cef122d4SRoger Quadros void am65_cpts_suspend(struct am65_cpts *cpts);
32*cef122d4SRoger Quadros void am65_cpts_resume(struct am65_cpts *cpts);
33f6bd5952SGrygorii Strashko #else
34f6bd5952SGrygorii Strashko static inline struct am65_cpts *am65_cpts_create(struct device *dev,
35f6bd5952SGrygorii Strashko 						 void __iomem *regs,
36f6bd5952SGrygorii Strashko 						 struct device_node *node)
37f6bd5952SGrygorii Strashko {
38f6bd5952SGrygorii Strashko 	return ERR_PTR(-EOPNOTSUPP);
39f6bd5952SGrygorii Strashko }
40f6bd5952SGrygorii Strashko 
41f6bd5952SGrygorii Strashko static inline int am65_cpts_phc_index(struct am65_cpts *cpts)
42f6bd5952SGrygorii Strashko {
43f6bd5952SGrygorii Strashko 	return -1;
44f6bd5952SGrygorii Strashko }
45f6bd5952SGrygorii Strashko 
46f6bd5952SGrygorii Strashko static inline void am65_cpts_tx_timestamp(struct am65_cpts *cpts,
47f6bd5952SGrygorii Strashko 					  struct sk_buff *skb)
48f6bd5952SGrygorii Strashko {
49f6bd5952SGrygorii Strashko }
50f6bd5952SGrygorii Strashko 
51f6bd5952SGrygorii Strashko static inline void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts,
52f6bd5952SGrygorii Strashko 					       struct sk_buff *skb)
53f6bd5952SGrygorii Strashko {
54f6bd5952SGrygorii Strashko }
55f6bd5952SGrygorii Strashko 
56f6bd5952SGrygorii Strashko static inline void am65_cpts_rx_enable(struct am65_cpts *cpts, bool en)
57f6bd5952SGrygorii Strashko {
58f6bd5952SGrygorii Strashko }
59ec008fa2SIvan Khoronzhuk 
602ea46dc6SNathan Chancellor static inline s64 am65_cpts_ns_gettime(struct am65_cpts *cpts)
61ec008fa2SIvan Khoronzhuk {
62ec008fa2SIvan Khoronzhuk 	return 0;
63ec008fa2SIvan Khoronzhuk }
64ec008fa2SIvan Khoronzhuk 
652ea46dc6SNathan Chancellor static inline int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
662ea46dc6SNathan Chancellor 					struct am65_cpts_estf_cfg *cfg)
67ec008fa2SIvan Khoronzhuk {
68ec008fa2SIvan Khoronzhuk 	return 0;
69ec008fa2SIvan Khoronzhuk }
70ec008fa2SIvan Khoronzhuk 
712ea46dc6SNathan Chancellor static inline void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx)
72ec008fa2SIvan Khoronzhuk {
73ec008fa2SIvan Khoronzhuk }
74*cef122d4SRoger Quadros 
75*cef122d4SRoger Quadros static inline void am65_cpts_suspend(struct am65_cpts *cpts)
76*cef122d4SRoger Quadros {
77*cef122d4SRoger Quadros }
78*cef122d4SRoger Quadros 
79*cef122d4SRoger Quadros static inline void am65_cpts_resume(struct am65_cpts *cpts)
80*cef122d4SRoger Quadros {
81*cef122d4SRoger Quadros }
82f6bd5952SGrygorii Strashko #endif
83f6bd5952SGrygorii Strashko 
84f6bd5952SGrygorii Strashko #endif /* K3_CPTS_H_ */
85