#include "hmm.h"
#include "sh_css_sp.h"
#include "input_formatter.h"
#include "dma.h"
#include "ia_css_buffer.h"
#include "ia_css_binary.h"
#include "sh_css_hrt.h"
#include "sh_css_defs.h"
#include "sh_css_internal.h"
#include "ia_css_control.h"
#include "ia_css_debug.h"
#include "ia_css_debug_pipe.h"
#include "ia_css_event_public.h"
#include "ia_css_mmu.h"
#include "ia_css_stream.h"
#include "ia_css_isp_param.h"
#include "sh_css_params.h"
#include "sh_css_legacy.h"
#include "ia_css_frame_comm.h"
#include "ia_css_isys.h"
#include "gdc_device.h"
#include "assert_support.h"
#include "sw_event_global.h"
#include "ia_css_event.h"
#include "mmu_device.h"
#include "ia_css_spctrl.h"
#include "atomisp_internal.h"
#ifndef offsetof
#define offsetof …
#endif
#define IA_CSS_INCLUDE_CONFIGURATIONS
#include "ia_css_isp_configs.h"
#define IA_CSS_INCLUDE_STATES
#include "ia_css_isp_states.h"
#include "isp/kernels/ipu2_io_ls/bayer_io_ls/ia_css_bayer_io.host.h"
struct sh_css_sp_group sh_css_sp_group;
struct sh_css_sp_stage sh_css_sp_stage;
struct sh_css_isp_stage sh_css_isp_stage;
static struct sh_css_sp_output sh_css_sp_output;
static struct sh_css_sp_per_frame_data per_frame_data;
static bool sp_running;
static int
set_output_frame_buffer(const struct ia_css_frame *frame,
unsigned int idx);
static void
sh_css_copy_buffer_attr_to_spbuffer(struct ia_css_buffer_sp *dest_buf,
const enum sh_css_queue_id queue_id,
const ia_css_ptr xmem_addr,
const enum ia_css_buffer_type buf_type);
static void
initialize_frame_buffer_attribute(struct ia_css_buffer_sp *buf_attr);
static void
initialize_stage_frames(struct ia_css_frames_sp *frames);
void
store_sp_group_data(void)
{ … }
static void
copy_isp_stage_to_sp_stage(void)
{ … }
void
store_sp_stage_data(enum ia_css_pipe_id id, unsigned int pipe_num,
unsigned int stage)
{ … }
static void
store_sp_per_frame_data(const struct ia_css_fw_info *fw)
{ … }
static void
sh_css_store_sp_per_frame_data(enum ia_css_pipe_id pipe_id,
unsigned int pipe_num,
const struct ia_css_fw_info *sp_fw)
{ … }
#if SP_DEBUG != SP_DEBUG_NONE
void
sh_css_sp_get_debug_state(struct sh_css_sp_debug_state *state)
{
const struct ia_css_fw_info *fw = &sh_css_sp_fw;
unsigned int HIVE_ADDR_sp_output = fw->info.sp.output;
unsigned int i;
unsigned int offset = (unsigned int)offsetof(struct sh_css_sp_output,
debug) / sizeof(int);
assert(state);
(void)HIVE_ADDR_sp_output;
for (i = 0; i < sizeof(*state) / sizeof(int); i++)
((unsigned int *)state)[i] = load_sp_array_uint(sp_output, i + offset);
}
#endif
void
sh_css_sp_start_binary_copy(unsigned int pipe_num,
struct ia_css_frame *out_frame,
unsigned int two_ppc)
{ … }
static void
sh_css_sp_start_raw_copy(struct ia_css_frame *out_frame,
unsigned int pipe_num,
unsigned int two_ppc,
unsigned int max_input_width,
enum sh_css_pipe_config_override pipe_conf_override,
unsigned int if_config_index)
{ … }
static void
sh_css_sp_start_isys_copy(struct ia_css_frame *out_frame,
unsigned int pipe_num, unsigned int max_input_width,
unsigned int if_config_index)
{ … }
unsigned int
sh_css_sp_get_binary_copy_size(void)
{ … }
unsigned int
sh_css_sp_get_sw_interrupt_value(unsigned int irq)
{ … }
static void
sh_css_copy_buffer_attr_to_spbuffer(struct ia_css_buffer_sp *dest_buf,
const enum sh_css_queue_id queue_id,
const ia_css_ptr xmem_addr,
const enum ia_css_buffer_type buf_type)
{ … }
static void
sh_css_copy_frame_to_spframe(struct ia_css_frame_sp *sp_frame_out,
const struct ia_css_frame *frame_in)
{ … }
static int
set_input_frame_buffer(const struct ia_css_frame *frame)
{ … }
static int
set_output_frame_buffer(const struct ia_css_frame *frame,
unsigned int idx)
{ … }
static int
set_view_finder_buffer(const struct ia_css_frame *frame)
{ … }
void sh_css_sp_set_if_configs(
const input_formatter_cfg_t *config_a,
const input_formatter_cfg_t *config_b,
const uint8_t if_config_index
)
{ … }
void
sh_css_sp_program_input_circuit(int fmt_type,
int ch_id,
enum ia_css_input_mode input_mode)
{ … }
void
sh_css_sp_configure_sync_gen(int width, int height,
int hblank_cycles,
int vblank_cycles)
{ … }
void
sh_css_sp_configure_prbs(int seed)
{ … }
void
sh_css_sp_configure_enable_raw_pool_locking(bool lock_all)
{ … }
void
sh_css_sp_enable_isys_event_queue(bool enable)
{ … }
void
sh_css_sp_set_disable_continuous_viewfinder(bool flag)
{ … }
static int
sh_css_sp_write_frame_pointers(const struct sh_css_binary_args *args)
{ … }
static void
sh_css_sp_init_group(bool two_ppc,
enum atomisp_input_format input_format,
bool no_isp_sync,
uint8_t if_config_index)
{ … }
void
sh_css_stage_write_binary_info(struct ia_css_binary_info *info)
{ … }
static int
copy_isp_mem_if_to_ddr(struct ia_css_binary *binary)
{ … }
static bool
is_sp_stage(struct ia_css_pipeline_stage *stage)
{ … }
static int configure_isp_from_args(const struct sh_css_sp_pipeline *pipeline,
const struct ia_css_binary *binary,
const struct sh_css_binary_args *args,
bool two_ppc,
bool deinterleaved)
{ … }
static void
initialize_isp_states(const struct ia_css_binary *binary)
{ … }
static void
initialize_frame_buffer_attribute(struct ia_css_buffer_sp *buf_attr)
{ … }
static void
initialize_stage_frames(struct ia_css_frames_sp *frames)
{ … }
static int
sh_css_sp_init_stage(struct ia_css_binary *binary,
const char *binary_name,
const struct ia_css_blob_info *blob_info,
const struct sh_css_binary_args *args,
unsigned int pipe_num,
unsigned int stage,
bool xnr,
const struct ia_css_isp_param_css_segments *isp_mem_if,
unsigned int if_config_index,
bool two_ppc)
{ … }
static int
sp_init_stage(struct ia_css_pipeline_stage *stage,
unsigned int pipe_num,
bool xnr,
unsigned int if_config_index,
bool two_ppc)
{ … }
static void
sp_init_sp_stage(struct ia_css_pipeline_stage *stage,
unsigned int pipe_num,
bool two_ppc,
enum sh_css_pipe_config_override copy_ovrd,
unsigned int if_config_index)
{ … }
void
sh_css_sp_init_pipeline(struct ia_css_pipeline *me,
enum ia_css_pipe_id id,
u8 pipe_num,
bool xnr,
bool two_ppc,
bool continuous,
bool offline,
unsigned int required_bds_factor,
enum sh_css_pipe_config_override copy_ovrd,
enum ia_css_input_mode input_mode,
const struct ia_css_metadata_config *md_config,
const struct ia_css_metadata_info *md_info,
const enum mipi_port_id port_id)
{ … }
void
sh_css_sp_uninit_pipeline(unsigned int pipe_num)
{ … }
bool sh_css_write_host2sp_command(enum host2sp_commands host2sp_command)
{ … }
enum host2sp_commands
sh_css_read_host2sp_command(void)
{ … }
void
sh_css_init_host2sp_frame_data(void)
{ … }
void
sh_css_update_host2sp_offline_frame(
unsigned int frame_num,
struct ia_css_frame *frame,
struct ia_css_metadata *metadata)
{ … }
void
sh_css_update_host2sp_mipi_frame(
unsigned int frame_num,
struct ia_css_frame *frame)
{ … }
void
sh_css_update_host2sp_mipi_metadata(
unsigned int frame_num,
struct ia_css_metadata *metadata)
{ … }
void
sh_css_update_host2sp_num_mipi_frames(unsigned int num_frames)
{ … }
void
sh_css_update_host2sp_cont_num_raw_frames(unsigned int num_frames,
bool set_avail)
{ … }
void
sh_css_event_init_irq_mask(void)
{ … }
int
ia_css_pipe_set_irq_mask(struct ia_css_pipe *pipe,
unsigned int or_mask,
unsigned int and_mask)
{ … }
int
ia_css_event_get_irq_mask(const struct ia_css_pipe *pipe,
unsigned int *or_mask,
unsigned int *and_mask)
{ … }
void
sh_css_sp_set_sp_running(bool flag)
{ … }
bool
sh_css_sp_is_running(void)
{ … }
void
sh_css_sp_start_isp(void)
{ … }
bool
ia_css_isp_has_started(void)
{ … }
bool
sh_css_sp_init_dma_sw_reg(int dma_id)
{ … }
bool
sh_css_sp_set_dma_sw_reg(int dma_id,
int channel_id,
int request_type,
bool enable)
{ … }
void
sh_css_sp_reset_global_vars(void)
{ … }