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