19d4fa1a1SMauro Carvalho Chehab /* 29d4fa1a1SMauro Carvalho Chehab * Support for Intel Camera Imaging ISP subsystem. 39d4fa1a1SMauro Carvalho Chehab * Copyright (c) 2015, Intel Corporation. 49d4fa1a1SMauro Carvalho Chehab * 59d4fa1a1SMauro Carvalho Chehab * This program is free software; you can redistribute it and/or modify it 69d4fa1a1SMauro Carvalho Chehab * under the terms and conditions of the GNU General Public License, 79d4fa1a1SMauro Carvalho Chehab * version 2, as published by the Free Software Foundation. 89d4fa1a1SMauro Carvalho Chehab * 99d4fa1a1SMauro Carvalho Chehab * This program is distributed in the hope it will be useful, but WITHOUT 109d4fa1a1SMauro Carvalho Chehab * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 119d4fa1a1SMauro Carvalho Chehab * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 129d4fa1a1SMauro Carvalho Chehab * more details. 139d4fa1a1SMauro Carvalho Chehab */ 149d4fa1a1SMauro Carvalho Chehab 159d4fa1a1SMauro Carvalho Chehab #ifndef _SH_CSS_SP_H_ 169d4fa1a1SMauro Carvalho Chehab #define _SH_CSS_SP_H_ 179d4fa1a1SMauro Carvalho Chehab 189d4fa1a1SMauro Carvalho Chehab #include <system_global.h> 199d4fa1a1SMauro Carvalho Chehab #include <type_support.h> 209d4fa1a1SMauro Carvalho Chehab #if !defined(HAS_NO_INPUT_FORMATTER) 219d4fa1a1SMauro Carvalho Chehab #include "input_formatter.h" 229d4fa1a1SMauro Carvalho Chehab #endif 239d4fa1a1SMauro Carvalho Chehab 249d4fa1a1SMauro Carvalho Chehab #include "ia_css_binary.h" 259d4fa1a1SMauro Carvalho Chehab #include "ia_css_types.h" 269d4fa1a1SMauro Carvalho Chehab #include "ia_css_pipeline.h" 279d4fa1a1SMauro Carvalho Chehab 289d4fa1a1SMauro Carvalho Chehab /* Function to initialize the data and bss section descr of the binary */ 299d4fa1a1SMauro Carvalho Chehab void 309d4fa1a1SMauro Carvalho Chehab sh_css_sp_store_init_dmem(const struct ia_css_fw_info *fw); 319d4fa1a1SMauro Carvalho Chehab 329d4fa1a1SMauro Carvalho Chehab void 339d4fa1a1SMauro Carvalho Chehab store_sp_stage_data(enum ia_css_pipe_id id, unsigned int pipe_num, 349d4fa1a1SMauro Carvalho Chehab unsigned int stage); 359d4fa1a1SMauro Carvalho Chehab 369d4fa1a1SMauro Carvalho Chehab void 379d4fa1a1SMauro Carvalho Chehab sh_css_stage_write_binary_info(struct ia_css_binary_info *info); 389d4fa1a1SMauro Carvalho Chehab 399d4fa1a1SMauro Carvalho Chehab void 409d4fa1a1SMauro Carvalho Chehab store_sp_group_data(void); 419d4fa1a1SMauro Carvalho Chehab 429d4fa1a1SMauro Carvalho Chehab /* Start binary (jpeg) copy on the SP */ 439d4fa1a1SMauro Carvalho Chehab void 449d4fa1a1SMauro Carvalho Chehab sh_css_sp_start_binary_copy(unsigned int pipe_num, 459d4fa1a1SMauro Carvalho Chehab struct ia_css_frame *out_frame, 469d4fa1a1SMauro Carvalho Chehab unsigned int two_ppc); 479d4fa1a1SMauro Carvalho Chehab 489d4fa1a1SMauro Carvalho Chehab unsigned int 499d4fa1a1SMauro Carvalho Chehab sh_css_sp_get_binary_copy_size(void); 509d4fa1a1SMauro Carvalho Chehab 519d4fa1a1SMauro Carvalho Chehab /* Return the value of a SW interrupt */ 529d4fa1a1SMauro Carvalho Chehab unsigned int 539d4fa1a1SMauro Carvalho Chehab sh_css_sp_get_sw_interrupt_value(unsigned int irq); 549d4fa1a1SMauro Carvalho Chehab 559d4fa1a1SMauro Carvalho Chehab void 569d4fa1a1SMauro Carvalho Chehab sh_css_sp_init_pipeline(struct ia_css_pipeline *me, 579d4fa1a1SMauro Carvalho Chehab enum ia_css_pipe_id id, 589d4fa1a1SMauro Carvalho Chehab u8 pipe_num, 599d4fa1a1SMauro Carvalho Chehab bool xnr, 609d4fa1a1SMauro Carvalho Chehab bool two_ppc, 619d4fa1a1SMauro Carvalho Chehab bool continuous, 629d4fa1a1SMauro Carvalho Chehab bool offline, 639d4fa1a1SMauro Carvalho Chehab unsigned int required_bds_factor, 649d4fa1a1SMauro Carvalho Chehab enum sh_css_pipe_config_override copy_ovrd, 659d4fa1a1SMauro Carvalho Chehab enum ia_css_input_mode input_mode, 669d4fa1a1SMauro Carvalho Chehab const struct ia_css_metadata_config *md_config, 679d4fa1a1SMauro Carvalho Chehab const struct ia_css_metadata_info *md_info, 689d4fa1a1SMauro Carvalho Chehab #if !defined(HAS_NO_INPUT_SYSTEM) 699d4fa1a1SMauro Carvalho Chehab const enum mipi_port_id port_id, 709d4fa1a1SMauro Carvalho Chehab #endif 719d4fa1a1SMauro Carvalho Chehab const struct ia_css_coordinate 729d4fa1a1SMauro Carvalho Chehab *internal_frame_origin_bqs_on_sctbl, /* Origin of internal frame 739d4fa1a1SMauro Carvalho Chehab positioned on shading table at shading correction in ISP. */ 749d4fa1a1SMauro Carvalho Chehab const struct ia_css_isp_parameters *params 759d4fa1a1SMauro Carvalho Chehab ); 769d4fa1a1SMauro Carvalho Chehab 779d4fa1a1SMauro Carvalho Chehab void 789d4fa1a1SMauro Carvalho Chehab sh_css_sp_uninit_pipeline(unsigned int pipe_num); 799d4fa1a1SMauro Carvalho Chehab 809d4fa1a1SMauro Carvalho Chehab bool sh_css_write_host2sp_command(enum host2sp_commands host2sp_command); 819d4fa1a1SMauro Carvalho Chehab 829d4fa1a1SMauro Carvalho Chehab enum host2sp_commands 839d4fa1a1SMauro Carvalho Chehab sh_css_read_host2sp_command(void); 849d4fa1a1SMauro Carvalho Chehab 859d4fa1a1SMauro Carvalho Chehab void 869d4fa1a1SMauro Carvalho Chehab sh_css_init_host2sp_frame_data(void); 879d4fa1a1SMauro Carvalho Chehab 889d4fa1a1SMauro Carvalho Chehab /** 899d4fa1a1SMauro Carvalho Chehab * @brief Update the offline frame information in host_sp_communication. 909d4fa1a1SMauro Carvalho Chehab * 919d4fa1a1SMauro Carvalho Chehab * @param[in] frame_num The offline frame number. 929d4fa1a1SMauro Carvalho Chehab * @param[in] frame The pointer to the offline frame. 939d4fa1a1SMauro Carvalho Chehab */ 949d4fa1a1SMauro Carvalho Chehab void 959d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_offline_frame( 969d4fa1a1SMauro Carvalho Chehab unsigned int frame_num, 979d4fa1a1SMauro Carvalho Chehab struct ia_css_frame *frame, 989d4fa1a1SMauro Carvalho Chehab struct ia_css_metadata *metadata); 999d4fa1a1SMauro Carvalho Chehab 1009d4fa1a1SMauro Carvalho Chehab #if defined(USE_INPUT_SYSTEM_VERSION_2) || defined(USE_INPUT_SYSTEM_VERSION_2401) 1019d4fa1a1SMauro Carvalho Chehab /** 1029d4fa1a1SMauro Carvalho Chehab * @brief Update the mipi frame information in host_sp_communication. 1039d4fa1a1SMauro Carvalho Chehab * 1049d4fa1a1SMauro Carvalho Chehab * @param[in] frame_num The mipi frame number. 1059d4fa1a1SMauro Carvalho Chehab * @param[in] frame The pointer to the mipi frame. 1069d4fa1a1SMauro Carvalho Chehab */ 1079d4fa1a1SMauro Carvalho Chehab void 1089d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_mipi_frame( 1099d4fa1a1SMauro Carvalho Chehab unsigned int frame_num, 1109d4fa1a1SMauro Carvalho Chehab struct ia_css_frame *frame); 1119d4fa1a1SMauro Carvalho Chehab 1129d4fa1a1SMauro Carvalho Chehab /** 1139d4fa1a1SMauro Carvalho Chehab * @brief Update the mipi metadata information in host_sp_communication. 1149d4fa1a1SMauro Carvalho Chehab * 1159d4fa1a1SMauro Carvalho Chehab * @param[in] frame_num The mipi frame number. 1169d4fa1a1SMauro Carvalho Chehab * @param[in] metadata The pointer to the mipi metadata. 1179d4fa1a1SMauro Carvalho Chehab */ 1189d4fa1a1SMauro Carvalho Chehab void 1199d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_mipi_metadata( 1209d4fa1a1SMauro Carvalho Chehab unsigned int frame_num, 1219d4fa1a1SMauro Carvalho Chehab struct ia_css_metadata *metadata); 1229d4fa1a1SMauro Carvalho Chehab 1239d4fa1a1SMauro Carvalho Chehab /** 1249d4fa1a1SMauro Carvalho Chehab * @brief Update the nr of mipi frames to use in host_sp_communication. 1259d4fa1a1SMauro Carvalho Chehab * 1269d4fa1a1SMauro Carvalho Chehab * @param[in] num_frames The number of mipi frames to use. 1279d4fa1a1SMauro Carvalho Chehab */ 1289d4fa1a1SMauro Carvalho Chehab void 1299d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_num_mipi_frames(unsigned int num_frames); 1309d4fa1a1SMauro Carvalho Chehab #endif 1319d4fa1a1SMauro Carvalho Chehab 1329d4fa1a1SMauro Carvalho Chehab /** 1339d4fa1a1SMauro Carvalho Chehab * @brief Update the nr of offline frames to use in host_sp_communication. 1349d4fa1a1SMauro Carvalho Chehab * 1359d4fa1a1SMauro Carvalho Chehab * @param[in] num_frames The number of raw frames to use. 1369d4fa1a1SMauro Carvalho Chehab */ 1379d4fa1a1SMauro Carvalho Chehab void 1389d4fa1a1SMauro Carvalho Chehab sh_css_update_host2sp_cont_num_raw_frames(unsigned int num_frames, 1399d4fa1a1SMauro Carvalho Chehab bool set_avail); 1409d4fa1a1SMauro Carvalho Chehab 1419d4fa1a1SMauro Carvalho Chehab void 1429d4fa1a1SMauro Carvalho Chehab sh_css_event_init_irq_mask(void); 1439d4fa1a1SMauro Carvalho Chehab 1449d4fa1a1SMauro Carvalho Chehab void 1459d4fa1a1SMauro Carvalho Chehab sh_css_sp_start_isp(void); 1469d4fa1a1SMauro Carvalho Chehab 1479d4fa1a1SMauro Carvalho Chehab void 1489d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_sp_running(bool flag); 1499d4fa1a1SMauro Carvalho Chehab 1509d4fa1a1SMauro Carvalho Chehab bool 1519d4fa1a1SMauro Carvalho Chehab sh_css_sp_is_running(void); 1529d4fa1a1SMauro Carvalho Chehab 1539d4fa1a1SMauro Carvalho Chehab #if SP_DEBUG != SP_DEBUG_NONE 1549d4fa1a1SMauro Carvalho Chehab 1559d4fa1a1SMauro Carvalho Chehab void 1569d4fa1a1SMauro Carvalho Chehab sh_css_sp_get_debug_state(struct sh_css_sp_debug_state *state); 1579d4fa1a1SMauro Carvalho Chehab 1589d4fa1a1SMauro Carvalho Chehab #endif 1599d4fa1a1SMauro Carvalho Chehab 1609d4fa1a1SMauro Carvalho Chehab #if !defined(HAS_NO_INPUT_FORMATTER) 1619d4fa1a1SMauro Carvalho Chehab void 1629d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_if_configs( 1639d4fa1a1SMauro Carvalho Chehab const input_formatter_cfg_t *config_a, 1649d4fa1a1SMauro Carvalho Chehab const input_formatter_cfg_t *config_b, 1659d4fa1a1SMauro Carvalho Chehab const uint8_t if_config_index); 1669d4fa1a1SMauro Carvalho Chehab #endif 1679d4fa1a1SMauro Carvalho Chehab 1689d4fa1a1SMauro Carvalho Chehab void 1699d4fa1a1SMauro Carvalho Chehab sh_css_sp_program_input_circuit(int fmt_type, 1709d4fa1a1SMauro Carvalho Chehab int ch_id, 1719d4fa1a1SMauro Carvalho Chehab enum ia_css_input_mode input_mode); 1729d4fa1a1SMauro Carvalho Chehab 1739d4fa1a1SMauro Carvalho Chehab void 1749d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_sync_gen(int width, 1759d4fa1a1SMauro Carvalho Chehab int height, 1769d4fa1a1SMauro Carvalho Chehab int hblank_cycles, 1779d4fa1a1SMauro Carvalho Chehab int vblank_cycles); 1789d4fa1a1SMauro Carvalho Chehab 1799d4fa1a1SMauro Carvalho Chehab void 1809d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_tpg(int x_mask, 1819d4fa1a1SMauro Carvalho Chehab int y_mask, 1829d4fa1a1SMauro Carvalho Chehab int x_delta, 1839d4fa1a1SMauro Carvalho Chehab int y_delta, 1849d4fa1a1SMauro Carvalho Chehab int xy_mask); 1859d4fa1a1SMauro Carvalho Chehab 1869d4fa1a1SMauro Carvalho Chehab void 1879d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_prbs(int seed); 1889d4fa1a1SMauro Carvalho Chehab 1899d4fa1a1SMauro Carvalho Chehab void 1909d4fa1a1SMauro Carvalho Chehab sh_css_sp_configure_enable_raw_pool_locking(bool lock_all); 1919d4fa1a1SMauro Carvalho Chehab 1929d4fa1a1SMauro Carvalho Chehab void 1939d4fa1a1SMauro Carvalho Chehab sh_css_sp_enable_isys_event_queue(bool enable); 1949d4fa1a1SMauro Carvalho Chehab 1959d4fa1a1SMauro Carvalho Chehab void 1969d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_disable_continuous_viewfinder(bool flag); 1979d4fa1a1SMauro Carvalho Chehab 1989d4fa1a1SMauro Carvalho Chehab void 1999d4fa1a1SMauro Carvalho Chehab sh_css_sp_reset_global_vars(void); 2009d4fa1a1SMauro Carvalho Chehab 2019d4fa1a1SMauro Carvalho Chehab /** 2029d4fa1a1SMauro Carvalho Chehab * @brief Initialize the DMA software-mask in the debug mode. 2039d4fa1a1SMauro Carvalho Chehab * This API should be ONLY called in the debugging mode. 2049d4fa1a1SMauro Carvalho Chehab * And it should be always called before the first call of 2059d4fa1a1SMauro Carvalho Chehab * "sh_css_set_dma_sw_reg(...)". 2069d4fa1a1SMauro Carvalho Chehab * 2079d4fa1a1SMauro Carvalho Chehab * @param[in] dma_id The ID of the target DMA. 2089d4fa1a1SMauro Carvalho Chehab * 2099d4fa1a1SMauro Carvalho Chehab * @return 2109d4fa1a1SMauro Carvalho Chehab * - true, if it is successful. 2119d4fa1a1SMauro Carvalho Chehab * - false, otherwise. 2129d4fa1a1SMauro Carvalho Chehab */ 2139d4fa1a1SMauro Carvalho Chehab bool 2149d4fa1a1SMauro Carvalho Chehab sh_css_sp_init_dma_sw_reg(int dma_id); 2159d4fa1a1SMauro Carvalho Chehab 2169d4fa1a1SMauro Carvalho Chehab /** 2179d4fa1a1SMauro Carvalho Chehab * @brief Set the DMA software-mask in the debug mode. 2189d4fa1a1SMauro Carvalho Chehab * This API should be ONLYL called in the debugging mode. Must 2199d4fa1a1SMauro Carvalho Chehab * call "sh_css_set_dma_sw_reg(...)" before this 2209d4fa1a1SMauro Carvalho Chehab * API is called for the first time. 2219d4fa1a1SMauro Carvalho Chehab * 2229d4fa1a1SMauro Carvalho Chehab * @param[in] dma_id The ID of the target DMA. 2239d4fa1a1SMauro Carvalho Chehab * @param[in] channel_id The ID of the target DMA channel. 2249d4fa1a1SMauro Carvalho Chehab * @param[in] request_type The type of the DMA request. 2259d4fa1a1SMauro Carvalho Chehab * For example: 2269d4fa1a1SMauro Carvalho Chehab * - "0" indicates the writing request. 2279d4fa1a1SMauro Carvalho Chehab * - "1" indicates the reading request. 2289d4fa1a1SMauro Carvalho Chehab * 2299d4fa1a1SMauro Carvalho Chehab * @param[in] enable If it is "true", the target DMA 2309d4fa1a1SMauro Carvalho Chehab * channel is enabled in the software. 2319d4fa1a1SMauro Carvalho Chehab * Otherwise, the target DMA channel 2329d4fa1a1SMauro Carvalho Chehab * is disabled in the software. 2339d4fa1a1SMauro Carvalho Chehab * 2349d4fa1a1SMauro Carvalho Chehab * @return 2359d4fa1a1SMauro Carvalho Chehab * - true, if it is successful. 2369d4fa1a1SMauro Carvalho Chehab * - false, otherwise. 2379d4fa1a1SMauro Carvalho Chehab */ 2389d4fa1a1SMauro Carvalho Chehab bool 2399d4fa1a1SMauro Carvalho Chehab sh_css_sp_set_dma_sw_reg(int dma_id, 2409d4fa1a1SMauro Carvalho Chehab int channel_id, 2419d4fa1a1SMauro Carvalho Chehab int request_type, 2429d4fa1a1SMauro Carvalho Chehab bool enable); 2439d4fa1a1SMauro Carvalho Chehab 2449d4fa1a1SMauro Carvalho Chehab extern struct sh_css_sp_group sh_css_sp_group; 2459d4fa1a1SMauro Carvalho Chehab extern struct sh_css_sp_stage sh_css_sp_stage; 2469d4fa1a1SMauro Carvalho Chehab extern struct sh_css_isp_stage sh_css_isp_stage; 2479d4fa1a1SMauro Carvalho Chehab 2489d4fa1a1SMauro Carvalho Chehab #endif /* _SH_CSS_SP_H_ */ 249