1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Support for Intel Camera Imaging ISP subsystem. 4 * Copyright (c) 2015, Intel Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 */ 15 16 #ifndef _SH_CSS_SP_H_ 17 #define _SH_CSS_SP_H_ 18 19 #include <system_global.h> 20 #include <type_support.h> 21 #if !defined(ISP2401) 22 #include "input_formatter.h" 23 #endif 24 25 #include "ia_css_binary.h" 26 #include "ia_css_types.h" 27 #include "ia_css_pipeline.h" 28 29 /* Function to initialize the data and bss section descr of the binary */ 30 void 31 sh_css_sp_store_init_dmem(const struct ia_css_fw_info *fw); 32 33 void 34 store_sp_stage_data(enum ia_css_pipe_id id, unsigned int pipe_num, 35 unsigned int stage); 36 37 void 38 sh_css_stage_write_binary_info(struct ia_css_binary_info *info); 39 40 void 41 store_sp_group_data(void); 42 43 /* Start binary (jpeg) copy on the SP */ 44 void 45 sh_css_sp_start_binary_copy(unsigned int pipe_num, 46 struct ia_css_frame *out_frame, 47 unsigned int two_ppc); 48 49 unsigned int 50 sh_css_sp_get_binary_copy_size(void); 51 52 /* Return the value of a SW interrupt */ 53 unsigned int 54 sh_css_sp_get_sw_interrupt_value(unsigned int irq); 55 56 void 57 sh_css_sp_init_pipeline(struct ia_css_pipeline *me, 58 enum ia_css_pipe_id id, 59 u8 pipe_num, 60 bool xnr, 61 bool two_ppc, 62 bool continuous, 63 bool offline, 64 unsigned int required_bds_factor, 65 enum sh_css_pipe_config_override copy_ovrd, 66 enum ia_css_input_mode input_mode, 67 const struct ia_css_metadata_config *md_config, 68 const struct ia_css_metadata_info *md_info, 69 const enum mipi_port_id port_id, 70 const struct ia_css_coordinate 71 *internal_frame_origin_bqs_on_sctbl, /* Origin of internal frame 72 positioned on shading table at shading correction in ISP. */ 73 const struct ia_css_isp_parameters *params 74 ); 75 76 void 77 sh_css_sp_uninit_pipeline(unsigned int pipe_num); 78 79 bool sh_css_write_host2sp_command(enum host2sp_commands host2sp_command); 80 81 enum host2sp_commands 82 sh_css_read_host2sp_command(void); 83 84 void 85 sh_css_init_host2sp_frame_data(void); 86 87 /** 88 * @brief Update the offline frame information in host_sp_communication. 89 * 90 * @param[in] frame_num The offline frame number. 91 * @param[in] frame The pointer to the offline frame. 92 */ 93 void 94 sh_css_update_host2sp_offline_frame( 95 unsigned int frame_num, 96 struct ia_css_frame *frame, 97 struct ia_css_metadata *metadata); 98 99 /** 100 * @brief Update the mipi frame information in host_sp_communication. 101 * 102 * @param[in] frame_num The mipi frame number. 103 * @param[in] frame The pointer to the mipi frame. 104 */ 105 void 106 sh_css_update_host2sp_mipi_frame( 107 unsigned int frame_num, 108 struct ia_css_frame *frame); 109 110 /** 111 * @brief Update the mipi metadata information in host_sp_communication. 112 * 113 * @param[in] frame_num The mipi frame number. 114 * @param[in] metadata The pointer to the mipi metadata. 115 */ 116 void 117 sh_css_update_host2sp_mipi_metadata( 118 unsigned int frame_num, 119 struct ia_css_metadata *metadata); 120 121 /** 122 * @brief Update the nr of mipi frames to use in host_sp_communication. 123 * 124 * @param[in] num_frames The number of mipi frames to use. 125 */ 126 void 127 sh_css_update_host2sp_num_mipi_frames(unsigned int num_frames); 128 129 /** 130 * @brief Update the nr of offline frames to use in host_sp_communication. 131 * 132 * @param[in] num_frames The number of raw frames to use. 133 */ 134 void 135 sh_css_update_host2sp_cont_num_raw_frames(unsigned int num_frames, 136 bool set_avail); 137 138 void 139 sh_css_event_init_irq_mask(void); 140 141 void 142 sh_css_sp_start_isp(void); 143 144 void 145 sh_css_sp_set_sp_running(bool flag); 146 147 bool 148 sh_css_sp_is_running(void); 149 150 #if SP_DEBUG != SP_DEBUG_NONE 151 152 void 153 sh_css_sp_get_debug_state(struct sh_css_sp_debug_state *state); 154 155 #endif 156 157 #if !defined(ISP2401) 158 void 159 sh_css_sp_set_if_configs( 160 const input_formatter_cfg_t *config_a, 161 const input_formatter_cfg_t *config_b, 162 const uint8_t if_config_index); 163 #endif 164 165 void 166 sh_css_sp_program_input_circuit(int fmt_type, 167 int ch_id, 168 enum ia_css_input_mode input_mode); 169 170 void 171 sh_css_sp_configure_sync_gen(int width, 172 int height, 173 int hblank_cycles, 174 int vblank_cycles); 175 176 void 177 sh_css_sp_configure_tpg(int x_mask, 178 int y_mask, 179 int x_delta, 180 int y_delta, 181 int xy_mask); 182 183 void 184 sh_css_sp_configure_prbs(int seed); 185 186 void 187 sh_css_sp_configure_enable_raw_pool_locking(bool lock_all); 188 189 void 190 sh_css_sp_enable_isys_event_queue(bool enable); 191 192 void 193 sh_css_sp_set_disable_continuous_viewfinder(bool flag); 194 195 void 196 sh_css_sp_reset_global_vars(void); 197 198 /** 199 * @brief Initialize the DMA software-mask in the debug mode. 200 * This API should be ONLY called in the debugging mode. 201 * And it should be always called before the first call of 202 * "sh_css_set_dma_sw_reg(...)". 203 * 204 * @param[in] dma_id The ID of the target DMA. 205 * 206 * @return 207 * - true, if it is successful. 208 * - false, otherwise. 209 */ 210 bool 211 sh_css_sp_init_dma_sw_reg(int dma_id); 212 213 /** 214 * @brief Set the DMA software-mask in the debug mode. 215 * This API should be ONLYL called in the debugging mode. Must 216 * call "sh_css_set_dma_sw_reg(...)" before this 217 * API is called for the first time. 218 * 219 * @param[in] dma_id The ID of the target DMA. 220 * @param[in] channel_id The ID of the target DMA channel. 221 * @param[in] request_type The type of the DMA request. 222 * For example: 223 * - "0" indicates the writing request. 224 * - "1" indicates the reading request. 225 * 226 * @param[in] enable If it is "true", the target DMA 227 * channel is enabled in the software. 228 * Otherwise, the target DMA channel 229 * is disabled in the software. 230 * 231 * @return 232 * - true, if it is successful. 233 * - false, otherwise. 234 */ 235 bool 236 sh_css_sp_set_dma_sw_reg(int dma_id, 237 int channel_id, 238 int request_type, 239 bool enable); 240 241 extern struct sh_css_sp_group sh_css_sp_group; 242 extern struct sh_css_sp_stage sh_css_sp_stage; 243 extern struct sh_css_isp_stage sh_css_isp_stage; 244 245 #endif /* _SH_CSS_SP_H_ */ 246