xref: /linux/drivers/staging/media/ipu7/ipu7-buttress.h (revision 8d2b0853add1d7534dc0794e3c8e0b9e8c4ec640)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2013 - 2025 Intel Corporation
4  */
5 
6 #ifndef IPU7_BUTTRESS_H
7 #define IPU7_BUTTRESS_H
8 
9 #include <linux/completion.h>
10 #include <linux/irqreturn.h>
11 #include <linux/list.h>
12 #include <linux/mutex.h>
13 
14 struct device;
15 struct ipu7_device;
16 
17 struct ipu_buttress_ctrl {
18 	u32 subsys_id;
19 	u32 freq_ctl, pwr_sts_shift, pwr_sts_mask, pwr_sts_on, pwr_sts_off;
20 	u32 ratio;
21 	u32 ratio_shift;
22 	u32 cdyn;
23 	u32 cdyn_shift;
24 	u32 ovrd_clk;
25 	u32 own_clk_ack;
26 };
27 
28 struct ipu_buttress_ipc {
29 	struct completion send_complete;
30 	struct completion recv_complete;
31 	u32 nack;
32 	u32 nack_mask;
33 	u32 recv_data;
34 	u32 csr_out;
35 	u32 csr_in;
36 	u32 db0_in;
37 	u32 db0_out;
38 	u32 data0_out;
39 	u32 data0_in;
40 };
41 
42 struct ipu_buttress {
43 	struct mutex power_mutex, auth_mutex, cons_mutex, ipc_mutex;
44 	struct ipu_buttress_ipc cse;
45 	u32 psys_min_freq;
46 	u32 wdt_cached_value;
47 	u8 psys_force_ratio;
48 	bool force_suspend;
49 	u32 ref_clk;
50 };
51 
52 int ipu_buttress_ipc_reset(struct ipu7_device *isp,
53 			   struct ipu_buttress_ipc *ipc);
54 int ipu_buttress_powerup(struct device *dev,
55 			 const struct ipu_buttress_ctrl *ctrl);
56 int ipu_buttress_powerdown(struct device *dev,
57 			   const struct ipu_buttress_ctrl *ctrl);
58 bool ipu_buttress_get_secure_mode(struct ipu7_device *isp);
59 int ipu_buttress_authenticate(struct ipu7_device *isp);
60 int ipu_buttress_reset_authentication(struct ipu7_device *isp);
61 bool ipu_buttress_auth_done(struct ipu7_device *isp);
62 int ipu_buttress_get_isys_freq(struct ipu7_device *isp, u32 *freq);
63 int ipu_buttress_get_psys_freq(struct ipu7_device *isp, u32 *freq);
64 int ipu_buttress_start_tsc_sync(struct ipu7_device *isp);
65 void ipu_buttress_tsc_read(struct ipu7_device *isp, u64 *val);
66 u64 ipu_buttress_tsc_ticks_to_ns(u64 ticks, const struct ipu7_device *isp);
67 
68 irqreturn_t ipu_buttress_isr(int irq, void *isp_ptr);
69 irqreturn_t ipu_buttress_isr_threaded(int irq, void *isp_ptr);
70 int ipu_buttress_init(struct ipu7_device *isp);
71 void ipu_buttress_exit(struct ipu7_device *isp);
72 void ipu_buttress_csi_port_config(struct ipu7_device *isp,
73 				  u32 legacy, u32 combo);
74 void ipu_buttress_restore(struct ipu7_device *isp);
75 void ipu_buttress_wakeup_is_uc(const struct ipu7_device *isp);
76 void ipu_buttress_wakeup_ps_uc(const struct ipu7_device *isp);
77 #endif /* IPU7_BUTTRESS_H */
78