]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blob - drivers/media/pci/intel/ipu-buttress.h
UBUNTU: SAUCE: IPU6: 2022-03-11 alpha release for Andrews MLK
[mirror_ubuntu-jammy-kernel.git] / drivers / media / pci / intel / ipu-buttress.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2013 - 2020 Intel Corporation */
3
4 #ifndef IPU_BUTTRESS_H
5 #define IPU_BUTTRESS_H
6
7 #include <linux/interrupt.h>
8 #include <linux/spinlock.h>
9 #include "ipu.h"
10
11 #define IPU_BUTTRESS_NUM_OF_SENS_CKS 3
12 #define IPU_BUTTRESS_NUM_OF_PLL_CKS 3
13 #define IPU_BUTTRESS_TSC_CLK 19200000
14
15 #define BUTTRESS_POWER_TIMEOUT 200000
16
17 #define BUTTRESS_PS_FREQ_STEP 25U
18 #define BUTTRESS_MIN_FORCE_PS_FREQ (BUTTRESS_PS_FREQ_STEP * 8)
19 #define BUTTRESS_MAX_FORCE_PS_FREQ (BUTTRESS_PS_FREQ_STEP * 32)
20
21 #define BUTTRESS_IS_FREQ_STEP 25U
22 #define BUTTRESS_MIN_FORCE_IS_FREQ (BUTTRESS_IS_FREQ_STEP * 8)
23 #define BUTTRESS_MAX_FORCE_IS_FREQ (BUTTRESS_IS_FREQ_STEP * 16)
24
25 struct ipu_buttress_ctrl {
26 u32 freq_ctl, pwr_sts_shift, pwr_sts_mask, pwr_sts_on, pwr_sts_off;
27 union {
28 unsigned int divisor;
29 unsigned int ratio;
30 };
31 union {
32 unsigned int divisor_shift;
33 unsigned int ratio_shift;
34 };
35 unsigned int qos_floor;
36 bool started;
37 };
38
39 struct ipu_buttress_fused_freqs {
40 unsigned int min_freq;
41 unsigned int max_freq;
42 unsigned int efficient_freq;
43 };
44
45 struct ipu_buttress_ipc {
46 struct completion send_complete;
47 struct completion recv_complete;
48 u32 nack;
49 u32 nack_mask;
50 u32 recv_data;
51 u32 csr_out;
52 u32 csr_in;
53 u32 db0_in;
54 u32 db0_out;
55 u32 data0_out;
56 u32 data0_in;
57 };
58
59 struct ipu_buttress {
60 struct mutex power_mutex, auth_mutex, cons_mutex, ipc_mutex;
61 struct ipu_buttress_ipc cse;
62 struct ipu_buttress_ipc ish;
63 struct list_head constraints;
64 struct ipu_buttress_fused_freqs psys_fused_freqs;
65 unsigned int psys_min_freq;
66 u32 wdt_cached_value;
67 u8 psys_force_ratio;
68 bool force_suspend;
69 u32 ref_clk;
70 };
71
72 struct ipu_buttress_sensor_clk_freq {
73 unsigned int rate;
74 unsigned int val;
75 };
76
77 struct firmware;
78
79 enum ipu_buttress_ipc_domain {
80 IPU_BUTTRESS_IPC_CSE,
81 IPU_BUTTRESS_IPC_ISH,
82 };
83
84 struct ipu_buttress_constraint {
85 struct list_head list;
86 unsigned int min_freq;
87 };
88
89 struct ipu_ipc_buttress_bulk_msg {
90 u32 cmd;
91 u32 expected_resp;
92 bool require_resp;
93 u8 cmd_size;
94 };
95
96 int ipu_buttress_ipc_reset(struct ipu_device *isp,
97 struct ipu_buttress_ipc *ipc);
98 int ipu_buttress_map_fw_image(struct ipu_bus_device *sys,
99 const struct firmware *fw, struct sg_table *sgt);
100 int ipu_buttress_unmap_fw_image(struct ipu_bus_device *sys,
101 struct sg_table *sgt);
102 int ipu_buttress_power(struct device *dev,
103 struct ipu_buttress_ctrl *ctrl, bool on);
104 void
105 ipu_buttress_add_psys_constraint(struct ipu_device *isp,
106 struct ipu_buttress_constraint *constraint);
107 void
108 ipu_buttress_remove_psys_constraint(struct ipu_device *isp,
109 struct ipu_buttress_constraint *constraint);
110 void ipu_buttress_set_secure_mode(struct ipu_device *isp);
111 bool ipu_buttress_get_secure_mode(struct ipu_device *isp);
112 int ipu_buttress_authenticate(struct ipu_device *isp);
113 int ipu_buttress_reset_authentication(struct ipu_device *isp);
114 bool ipu_buttress_auth_done(struct ipu_device *isp);
115 int ipu_buttress_start_tsc_sync(struct ipu_device *isp);
116 int ipu_buttress_tsc_read(struct ipu_device *isp, u64 *val);
117 u64 ipu_buttress_tsc_ticks_to_ns(u64 ticks, const struct ipu_device *isp);
118
119 irqreturn_t ipu_buttress_isr(int irq, void *isp_ptr);
120 irqreturn_t ipu_buttress_isr_threaded(int irq, void *isp_ptr);
121 int ipu_buttress_debugfs_init(struct ipu_device *isp);
122 int ipu_buttress_init(struct ipu_device *isp);
123 void ipu_buttress_exit(struct ipu_device *isp);
124 void ipu_buttress_csi_port_config(struct ipu_device *isp,
125 u32 legacy, u32 combo);
126 int ipu_buttress_restore(struct ipu_device *isp);
127
128 int ipu_buttress_psys_freq_get(void *data, u64 *val);
129 #endif /* IPU_BUTTRESS_H */