1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2013 - 2020 Intel Corporation */
7 #include <linux/interrupt.h>
8 #include <linux/spinlock.h>
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
15 #define BUTTRESS_POWER_TIMEOUT 200000
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)
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)
25 struct ipu_buttress_ctrl
{
26 u32 freq_ctl
, pwr_sts_shift
, pwr_sts_mask
, pwr_sts_on
, pwr_sts_off
;
32 unsigned int divisor_shift
;
33 unsigned int ratio_shift
;
35 unsigned int qos_floor
;
39 struct ipu_buttress_fused_freqs
{
40 unsigned int min_freq
;
41 unsigned int max_freq
;
42 unsigned int efficient_freq
;
45 struct ipu_buttress_ipc
{
46 struct completion send_complete
;
47 struct completion recv_complete
;
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
;
71 struct ipu_buttress_sensor_clk_freq
{
78 enum ipu_buttress_ipc_domain
{
83 struct ipu_buttress_constraint
{
84 struct list_head list
;
85 unsigned int min_freq
;
88 struct ipu_ipc_buttress_bulk_msg
{
95 int ipu_buttress_ipc_reset(struct ipu_device
*isp
,
96 struct ipu_buttress_ipc
*ipc
);
97 int ipu_buttress_map_fw_image(struct ipu_bus_device
*sys
,
98 const struct firmware
*fw
, struct sg_table
*sgt
);
99 int ipu_buttress_unmap_fw_image(struct ipu_bus_device
*sys
,
100 struct sg_table
*sgt
);
101 int ipu_buttress_power(struct device
*dev
,
102 struct ipu_buttress_ctrl
*ctrl
, bool on
);
104 ipu_buttress_add_psys_constraint(struct ipu_device
*isp
,
105 struct ipu_buttress_constraint
*constraint
);
107 ipu_buttress_remove_psys_constraint(struct ipu_device
*isp
,
108 struct ipu_buttress_constraint
*constraint
);
109 void ipu_buttress_set_secure_mode(struct ipu_device
*isp
);
110 bool ipu_buttress_get_secure_mode(struct ipu_device
*isp
);
111 int ipu_buttress_authenticate(struct ipu_device
*isp
);
112 int ipu_buttress_reset_authentication(struct ipu_device
*isp
);
113 bool ipu_buttress_auth_done(struct ipu_device
*isp
);
114 int ipu_buttress_start_tsc_sync(struct ipu_device
*isp
);
115 int ipu_buttress_tsc_read(struct ipu_device
*isp
, u64
*val
);
116 u64
ipu_buttress_tsc_ticks_to_ns(u64 ticks
);
118 irqreturn_t
ipu_buttress_isr(int irq
, void *isp_ptr
);
119 irqreturn_t
ipu_buttress_isr_threaded(int irq
, void *isp_ptr
);
120 int ipu_buttress_debugfs_init(struct ipu_device
*isp
);
121 int ipu_buttress_init(struct ipu_device
*isp
);
122 void ipu_buttress_exit(struct ipu_device
*isp
);
123 void ipu_buttress_csi_port_config(struct ipu_device
*isp
,
124 u32 legacy
, u32 combo
);
125 int ipu_buttress_restore(struct ipu_device
*isp
);
127 int ipu_buttress_psys_freq_get(void *data
, u64
*val
);
128 #endif /* IPU_BUTTRESS_H */