void sh_css_sp_start_binary_copy(unsigned int pipe_num, struct ia_css_frame *out_frame, unsigned two_ppc) { enum ia_css_pipe_id pipe_id; unsigned int thread_id; struct sh_css_sp_pipeline *pipe; uint8_t stage_num = 0; assert(out_frame != NULL); pipe_id = IA_CSS_PIPE_ID_CAPTURE; sh_css_query_sp_thread_id(pipe_num, &thread_id); pipe = &sh_css_sp_group.pipe[thread_id]; pipe->copy.bin.bytes_available = out_frame->data_bytes; pipe->num_stages = 1; pipe->pipe_id = pipe_id; pipe->pipe_num = pipe_num; pipe->thread_id = thread_id; pipe->pipe_config = 0x0; /* No parameters */ sh_css_sp_group.config.input_formatter.isp_2ppc = (uint8_t)two_ppc; sh_css_sp_stage.num = stage_num; sh_css_sp_stage.irq_buf_flags = 1 << sh_css_frame_out; sh_css_sp_stage.stage_type = SH_CSS_SP_STAGE_TYPE; sh_css_sp_stage.func = (unsigned int)SH_CSS_SP_BIN_COPY; set_output_frame_buffer(out_frame,pipe_num, stage_num); /* sp_bin_copy_init on the SP does not deal with dynamica/static yet */ /* For now always update the dynamic data from out frames. */ sh_css_store_sp_per_frame_data(pipe_id, pipe_num, &sh_css_sp_fw); }
void sh_css_sp_start_binary_copy(unsigned int pipe_num, struct ia_css_frame *out_frame, unsigned two_ppc) { enum ia_css_pipe_id pipe_id; unsigned int thread_id; struct sh_css_sp_pipeline *pipe; uint8_t stage_num = 0; assert(out_frame != NULL); pipe_id = IA_CSS_PIPE_ID_CAPTURE; ia_css_pipeline_get_sp_thread_id(pipe_num, &thread_id); pipe = &sh_css_sp_group.pipe[thread_id]; pipe->copy.bin.bytes_available = out_frame->data_bytes; pipe->num_stages = 1; pipe->pipe_id = pipe_id; pipe->pipe_num = pipe_num; pipe->thread_id = thread_id; pipe->pipe_config = 0x0; /* No parameters */ if(pipe->inout_port_config == 0) { SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)SH_CSS_HOST_TYPE,1); SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE,1); ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "sh_css_sp_start_binary_copy pipe_id %d port_config %08x\n",pipe->pipe_id,pipe->inout_port_config); } ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "sh_css_sp_start_binary_copy pipe_id %d port_config %08x\n",pipe->pipe_id,pipe->inout_port_config); #if !defined(HAS_NO_INPUT_FORMATTER) sh_css_sp_group.config.input_formatter.isp_2ppc = (uint8_t)two_ppc; #else (void)two_ppc; #endif sh_css_sp_stage.num = stage_num; sh_css_sp_stage.stage_type = SH_CSS_SP_STAGE_TYPE; sh_css_sp_stage.func = (unsigned int)IA_CSS_PIPELINE_BIN_COPY; set_output_frame_buffer(out_frame,pipe_num, stage_num); /* sp_bin_copy_init on the SP does not deal with dynamica/static yet */ /* For now always update the dynamic data from out frames. */ sh_css_store_sp_per_frame_data(pipe_id, pipe_num, &sh_css_sp_fw); }
void sh_css_sp_start_binary_copy(struct sh_css_frame *out_frame, unsigned two_ppc) { enum sh_css_pipe_id pipe_id; unsigned int thread_id; struct sh_css_sp_pipeline *pipe; unsigned stage_num = 0; assert(out_frame != NULL); pipe_id = SH_CSS_CAPTURE_PIPELINE; sh_css_query_sp_thread_id(pipe_id, &thread_id); pipe = &sh_css_sp_group.pipe[thread_id]; pipe->copy.bin.bytes_available = out_frame->data_bytes; pipe->num_stages = 1; pipe->pipe_id = pipe_id; /* TODO: next indicates from which queues parameters need to be sampled, needs checking/improvement */ pipe->pipe_config = SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS << thread_id; sh_css_sp_group.config.input_formatter.isp_2ppc = two_ppc; sh_css_sp_stage.num = stage_num; sh_css_sp_stage.irq_buf_flags = 1 << sh_css_frame_out; sh_css_sp_stage.stage_type = SH_CSS_SP_STAGE_TYPE; sh_css_sp_stage.func = (unsigned int)SH_CSS_SP_BIN_COPY; set_output_frame_buffer(out_frame, (unsigned)pipe_id, stage_num); /* sp_bin_copy_init on the SP does not deal with dynamica/static yet */ /* For now always update the dynamic data from out frames. */ sh_css_store_sp_per_frame_data(pipe_id, &sh_css_sp_fw); }
void sh_css_sp_start_raw_copy(struct sh_css_binary *binary, struct sh_css_frame *out_frame, unsigned two_ppc, bool input_needs_raw_binning, enum sh_css_pipe_config_override pipe_conf_override) { enum sh_css_pipe_id pipe_id; unsigned int thread_id; unsigned stage_num = 0; struct sh_css_sp_pipeline *pipe; assert(out_frame != NULL); { /** * Clear sh_css_sp_stage for easy debugging. * program_input_circuit must be saved as it is set outside * this function. */ unsigned int program_input_circuit; program_input_circuit = sh_css_sp_stage.program_input_circuit; memset(&sh_css_sp_stage, 0, sizeof(sh_css_sp_stage)); sh_css_sp_stage.program_input_circuit = program_input_circuit; } pipe_id = SH_CSS_COPY_PIPELINE; sh_css_query_sp_thread_id(pipe_id, &thread_id); pipe = &sh_css_sp_group.pipe[thread_id]; pipe->copy.raw.height = out_frame->info.height; pipe->copy.raw.width = out_frame->info.width; pipe->copy.raw.padded_width = out_frame->info.padded_width; pipe->copy.raw.raw_bit_depth = out_frame->info.raw_bit_depth; pipe->copy.raw.max_input_width = binary->info->max_input_width; pipe->num_stages = 1; pipe->pipe_id = pipe_id; /* TODO: next indicates from which queues parameters need to be sampled, needs checking/improvement */ if (pipe_conf_override == SH_CSS_PIPE_CONFIG_OVRD_NO_OVRD) pipe->pipe_config = (SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS << thread_id); else pipe->pipe_config = pipe_conf_override; sh_css_sp_group.config.input_formatter.isp_2ppc = two_ppc; sh_css_sp_group.config.input_needs_raw_binning = input_needs_raw_binning; sh_css_sp_stage.num = stage_num; sh_css_sp_stage.irq_buf_flags = 1 << sh_css_frame_out; sh_css_sp_stage.xmem_bin_addr = binary->info->xmem_addr; sh_css_sp_stage.stage_type = SH_CSS_SP_STAGE_TYPE; sh_css_sp_stage.func = (unsigned int)SH_CSS_SP_RAW_COPY; set_output_frame_buffer(out_frame, (unsigned)pipe_id, stage_num); /* sp_raw_copy_init on the SP does not deal with dynamica/static yet */ /* For now always update the dynamic data from out frames. */ sh_css_store_sp_per_frame_data(pipe_id, &sh_css_sp_fw); }
static void sh_css_sp_start_raw_copy(struct ia_css_frame *out_frame, unsigned pipe_num, unsigned two_ppc, unsigned max_input_width, enum sh_css_pipe_config_override pipe_conf_override, unsigned int if_config_index) { enum ia_css_pipe_id pipe_id; unsigned int thread_id; uint8_t stage_num = 0; struct sh_css_sp_pipeline *pipe; assert(out_frame != NULL); { /** * Clear sh_css_sp_stage for easy debugging. * program_input_circuit must be saved as it is set outside * this function. */ uint8_t program_input_circuit; program_input_circuit = sh_css_sp_stage.program_input_circuit; memset(&sh_css_sp_stage, 0, sizeof(sh_css_sp_stage)); sh_css_sp_stage.program_input_circuit = program_input_circuit; } pipe_id = IA_CSS_PIPE_ID_COPY; ia_css_pipeline_get_sp_thread_id(pipe_num, &thread_id); pipe = &sh_css_sp_group.pipe[thread_id]; pipe->copy.raw.height = out_frame->info.res.height; pipe->copy.raw.width = out_frame->info.res.width; pipe->copy.raw.padded_width = out_frame->info.padded_width; pipe->copy.raw.raw_bit_depth = out_frame->info.raw_bit_depth; pipe->copy.raw.max_input_width = max_input_width; pipe->num_stages = 1; pipe->pipe_id = pipe_id; /* TODO: next indicates from which queues parameters need to be sampled, needs checking/improvement */ if (pipe_conf_override == SH_CSS_PIPE_CONFIG_OVRD_NO_OVRD) pipe->pipe_config = (SH_CSS_PIPE_CONFIG_SAMPLE_PARAMS << thread_id); else pipe->pipe_config = pipe_conf_override; if(pipe->inout_port_config == 0) { SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_INPUT, (uint8_t)SH_CSS_HOST_TYPE,1); SH_CSS_PIPE_PORT_CONFIG_SET(pipe->inout_port_config, (uint8_t)SH_CSS_PORT_OUTPUT, (uint8_t)SH_CSS_HOST_TYPE,1); ia_css_debug_dtrace(IA_CSS_DEBUG_TRACE_PRIVATE, "sh_css_sp_start_raw_copy pipe_id %d port_config %08x\n",pipe->pipe_id,pipe->inout_port_config); } #if !defined(HAS_NO_INPUT_FORMATTER) sh_css_sp_group.config.input_formatter.isp_2ppc = (uint8_t)two_ppc; #else (void)two_ppc; #endif sh_css_sp_stage.num = stage_num; #if 0 sh_css_sp_stage.xmem_bin_addr = binary->info->xmem_addr; #else sh_css_sp_stage.xmem_bin_addr = 0x0; #endif sh_css_sp_stage.stage_type = SH_CSS_SP_STAGE_TYPE; sh_css_sp_stage.func = (unsigned int)IA_CSS_PIPELINE_RAW_COPY; sh_css_sp_stage.if_config_index = (uint8_t) if_config_index; set_output_frame_buffer(out_frame, (unsigned)pipe_id, stage_num); #if 0 /* sp_raw_copy_init on the SP does not deal with dynamica/static yet */ /* For now always update the dynamic data from out frames. */ sh_css_store_sp_per_frame_data(pipe_id, 0, &sh_css_sp_fw); #endif ia_css_debug_pipe_graph_dump_sp_raw_copy(out_frame); }