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