Lines Matching refs:ispif

124 isp4if_gpu_mem_alloc(struct isp4_interface *ispif, u32 mem_size)  in isp4if_gpu_mem_alloc()  argument
127 struct device *dev = ispif->dev; in isp4if_gpu_mem_alloc()
147 static void isp4if_gpu_mem_free(struct isp4_interface *ispif, in isp4if_gpu_mem_free() argument
161 static void isp4if_dealloc_fw_gpumem(struct isp4_interface *ispif) in isp4if_dealloc_fw_gpumem() argument
163 isp4if_gpu_mem_free(ispif, &ispif->fw_mem_pool); in isp4if_dealloc_fw_gpumem()
164 isp4if_gpu_mem_free(ispif, &ispif->fw_cmd_resp_buf); in isp4if_dealloc_fw_gpumem()
165 isp4if_gpu_mem_free(ispif, &ispif->fw_log_buf); in isp4if_dealloc_fw_gpumem()
168 isp4if_gpu_mem_free(ispif, &ispif->meta_info_buf[i]); in isp4if_dealloc_fw_gpumem()
171 static int isp4if_alloc_fw_gpumem(struct isp4_interface *ispif) in isp4if_alloc_fw_gpumem() argument
173 struct device *dev = ispif->dev; in isp4if_alloc_fw_gpumem()
175 ispif->fw_mem_pool = isp4if_gpu_mem_alloc(ispif, in isp4if_alloc_fw_gpumem()
177 if (!ispif->fw_mem_pool) in isp4if_alloc_fw_gpumem()
180 ispif->fw_cmd_resp_buf = in isp4if_alloc_fw_gpumem()
181 isp4if_gpu_mem_alloc(ispif, ISP4IF_RB_PMBMAP_MEM_SIZE); in isp4if_alloc_fw_gpumem()
182 if (!ispif->fw_cmd_resp_buf) in isp4if_alloc_fw_gpumem()
185 ispif->fw_log_buf = in isp4if_alloc_fw_gpumem()
186 isp4if_gpu_mem_alloc(ispif, ISP4IF_FW_LOG_RINGBUF_SIZE); in isp4if_alloc_fw_gpumem()
187 if (!ispif->fw_log_buf) in isp4if_alloc_fw_gpumem()
191 ispif->meta_info_buf[i] = in isp4if_alloc_fw_gpumem()
192 isp4if_gpu_mem_alloc(ispif, ISP4IF_META_INFO_BUF_SIZE); in isp4if_alloc_fw_gpumem()
193 if (!ispif->meta_info_buf[i]) in isp4if_alloc_fw_gpumem()
201 isp4if_dealloc_fw_gpumem(ispif); in isp4if_alloc_fw_gpumem()
224 void isp4if_clear_cmdq(struct isp4_interface *ispif) in isp4if_clear_cmdq() argument
229 scoped_guard(spinlock, &ispif->cmdq_lock) in isp4if_clear_cmdq()
230 list_splice_init(&ispif->cmdq, &free_list); in isp4if_clear_cmdq()
236 static bool isp4if_is_cmdq_rb_full(struct isp4_interface *ispif, in isp4if_is_cmdq_rb_full() argument
245 rd_ptr = isp4hw_rreg(ispif->mmio, rreg); in isp4if_is_cmdq_rb_full()
246 wr_ptr = isp4hw_rreg(ispif->mmio, wreg); in isp4if_is_cmdq_rb_full()
268 struct isp4if_cmd_element *isp4if_rm_cmd_from_cmdq(struct isp4_interface *ispif, in isp4if_rm_cmd_from_cmdq() argument
273 guard(spinlock)(&ispif->cmdq_lock); in isp4if_rm_cmd_from_cmdq()
275 list_for_each_entry(ele, &ispif->cmdq, list) { in isp4if_rm_cmd_from_cmdq()
286 static int isp4if_insert_isp_fw_cmd(struct isp4_interface *ispif, in isp4if_insert_isp_fw_cmd() argument
294 struct device *dev = ispif->dev; in isp4if_insert_isp_fw_cmd()
300 rd_ptr = isp4hw_rreg(ispif->mmio, rreg); in isp4if_insert_isp_fw_cmd()
301 wr_ptr = isp4hw_rreg(ispif->mmio, wreg); in isp4if_insert_isp_fw_cmd()
314 isp4hw_wreg(ispif->mmio, wreg, (wr_ptr + cmd_sz) % len); in isp4if_insert_isp_fw_cmd()
322 isp4hw_wreg(ispif->mmio, wreg, cmd_sz - bytes_to_end); in isp4if_insert_isp_fw_cmd()
333 static int isp4if_send_fw_cmd(struct isp4_interface *ispif, u32 cmd_id, in isp4if_send_fw_cmd() argument
339 struct device *dev = ispif->dev; in isp4if_send_fw_cmd()
383 scoped_guard(mutex, &ispif->isp4if_mutex) { in isp4if_send_fw_cmd()
386 ISP4IF_RB_FULL_TIMEOUT_US, false, ispif, in isp4if_send_fw_cmd()
391 u32 rd_ptr = isp4hw_rreg(ispif->mmio, in isp4if_send_fw_cmd()
393 u32 wr_ptr = isp4hw_rreg(ispif->mmio, in isp4if_send_fw_cmd()
404 seq_num = ispif->host2fw_seq_num++; in isp4if_send_fw_cmd()
418 scoped_guard(spinlock, &ispif->cmdq_lock) in isp4if_send_fw_cmd()
419 list_add_tail(&ele->list, &ispif->cmdq); in isp4if_send_fw_cmd()
422 ret = isp4if_insert_isp_fw_cmd(ispif, stream, &cmd); in isp4if_send_fw_cmd()
451 if (ele && isp4if_rm_cmd_from_cmdq(ispif, seq_num, cmd_id)) in isp4if_send_fw_cmd()
464 static int isp4if_send_buffer(struct isp4_interface *ispif, in isp4if_send_buffer() argument
492 return isp4if_send_fw_cmd(ispif, ISP4FW_CMD_ID_SEND_BUFFER, &cmd, in isp4if_send_buffer()
496 static void isp4if_init_rb_config(struct isp4_interface *ispif, in isp4if_init_rb_config() argument
499 isp4hw_wreg(ispif->mmio, rb_config->reg_rptr, 0x0); in isp4if_init_rb_config()
500 isp4hw_wreg(ispif->mmio, rb_config->reg_wptr, 0x0); in isp4if_init_rb_config()
501 isp4hw_wreg(ispif->mmio, rb_config->reg_base_lo, in isp4if_init_rb_config()
503 isp4hw_wreg(ispif->mmio, rb_config->reg_base_hi, in isp4if_init_rb_config()
505 isp4hw_wreg(ispif->mmio, rb_config->reg_size, rb_config->val_size); in isp4if_init_rb_config()
508 static int isp4if_fw_init(struct isp4_interface *ispif) in isp4if_fw_init() argument
522 ispif->fw_cmd_resp_buf->sys_addr + offset; in isp4if_fw_init()
524 ispif->fw_cmd_resp_buf->gpu_mc_addr + offset; in isp4if_fw_init()
526 isp4if_init_rb_config(ispif, rb_config); in isp4if_fw_init()
537 ispif->fw_cmd_resp_buf->sys_addr + offset; in isp4if_fw_init()
539 ispif->fw_cmd_resp_buf->gpu_mc_addr + offset; in isp4if_fw_init()
541 isp4if_init_rb_config(ispif, rb_config); in isp4if_fw_init()
547 rb_config->base_mc_addr = ispif->fw_log_buf->gpu_mc_addr; in isp4if_fw_init()
548 rb_config->base_sys_addr = ispif->fw_log_buf->sys_addr; in isp4if_fw_init()
550 isp4if_init_rb_config(ispif, rb_config); in isp4if_fw_init()
555 static int isp4if_wait_fw_ready(struct isp4_interface *ispif, in isp4if_wait_fw_ready() argument
558 struct device *dev = ispif->dev; in isp4if_wait_fw_ready()
567 ispif->mmio, isp_status_addr)) in isp4if_wait_fw_ready()
575 static void isp4if_enable_ccpu(struct isp4_interface *ispif) in isp4if_enable_ccpu() argument
579 reg_val = isp4hw_rreg(ispif->mmio, ISP_SOFT_RESET); in isp4if_enable_ccpu()
581 isp4hw_wreg(ispif->mmio, ISP_SOFT_RESET, reg_val); in isp4if_enable_ccpu()
585 reg_val = isp4hw_rreg(ispif->mmio, ISP_CCPU_CNTL); in isp4if_enable_ccpu()
587 isp4hw_wreg(ispif->mmio, ISP_CCPU_CNTL, reg_val); in isp4if_enable_ccpu()
590 static void isp4if_disable_ccpu(struct isp4_interface *ispif) in isp4if_disable_ccpu() argument
594 reg_val = isp4hw_rreg(ispif->mmio, ISP_CCPU_CNTL); in isp4if_disable_ccpu()
596 isp4hw_wreg(ispif->mmio, ISP_CCPU_CNTL, reg_val); in isp4if_disable_ccpu()
600 reg_val = isp4hw_rreg(ispif->mmio, ISP_SOFT_RESET); in isp4if_disable_ccpu()
602 isp4hw_wreg(ispif->mmio, ISP_SOFT_RESET, reg_val); in isp4if_disable_ccpu()
605 static int isp4if_fw_boot(struct isp4_interface *ispif) in isp4if_fw_boot() argument
607 struct device *dev = ispif->dev; in isp4if_fw_boot()
609 if (ispif->status != ISP4IF_STATUS_PWR_ON) { in isp4if_fw_boot()
610 dev_err(dev, "invalid isp power status %d\n", ispif->status); in isp4if_fw_boot()
614 isp4if_disable_ccpu(ispif); in isp4if_fw_boot()
616 isp4if_fw_init(ispif); in isp4if_fw_boot()
619 isp4hw_wreg(ispif->mmio, ISP_STATUS, 0x0); in isp4if_fw_boot()
621 isp4if_enable_ccpu(ispif); in isp4if_fw_boot()
623 if (isp4if_wait_fw_ready(ispif, ISP_STATUS)) { in isp4if_fw_boot()
624 isp4if_disable_ccpu(ispif); in isp4if_fw_boot()
629 isp4hw_wreg(ispif->mmio, ISP_SYS_INT0_EN, in isp4if_fw_boot()
632 ispif->status = ISP4IF_STATUS_FW_RUNNING; in isp4if_fw_boot()
639 int isp4if_f2h_resp(struct isp4_interface *ispif, enum isp4if_stream_id stream, in isp4if_f2h_resp() argument
646 struct device *dev = ispif->dev; in isp4if_f2h_resp()
653 rd_ptr = isp4hw_rreg(ispif->mmio, rreg); in isp4if_f2h_resp()
654 wr_ptr = isp4hw_rreg(ispif->mmio, wreg); in isp4if_f2h_resp()
672 isp4hw_wreg(ispif->mmio, rreg, (rd_ptr + resp_sz) % len); in isp4if_f2h_resp()
683 isp4hw_wreg(ispif->mmio, rreg, resp_sz - bytes_to_end); in isp4if_f2h_resp()
707 int isp4if_send_command(struct isp4_interface *ispif, u32 cmd_id, in isp4if_send_command() argument
710 return isp4if_send_fw_cmd(ispif, cmd_id, package, package_size, false); in isp4if_send_command()
713 int isp4if_send_command_sync(struct isp4_interface *ispif, u32 cmd_id, in isp4if_send_command_sync() argument
716 return isp4if_send_fw_cmd(ispif, cmd_id, package, package_size, true); in isp4if_send_command_sync()
719 void isp4if_clear_bufq(struct isp4_interface *ispif) in isp4if_clear_bufq() argument
724 scoped_guard(spinlock, &ispif->bufq_lock) in isp4if_clear_bufq()
725 list_splice_init(&ispif->bufq, &free_list); in isp4if_clear_bufq()
748 struct isp4if_img_buf_node *isp4if_dequeue_buffer(struct isp4_interface *ispif) in isp4if_dequeue_buffer() argument
752 guard(spinlock)(&ispif->bufq_lock); in isp4if_dequeue_buffer()
754 buf_node = list_first_entry_or_null(&ispif->bufq, typeof(*buf_node), in isp4if_dequeue_buffer()
762 int isp4if_queue_buffer(struct isp4_interface *ispif, in isp4if_queue_buffer() argument
767 ret = isp4if_send_buffer(ispif, &buf_node->buf_info); in isp4if_queue_buffer()
771 scoped_guard(spinlock, &ispif->bufq_lock) in isp4if_queue_buffer()
772 list_add_tail(&buf_node->node, &ispif->bufq); in isp4if_queue_buffer()
777 int isp4if_stop(struct isp4_interface *ispif) in isp4if_stop() argument
779 isp4if_disable_ccpu(ispif); in isp4if_stop()
781 isp4if_dealloc_fw_gpumem(ispif); in isp4if_stop()
786 int isp4if_start(struct isp4_interface *ispif) in isp4if_start() argument
790 ret = isp4if_alloc_fw_gpumem(ispif); in isp4if_start()
794 ret = isp4if_fw_boot(ispif); in isp4if_start()
801 isp4if_dealloc_fw_gpumem(ispif); in isp4if_start()
805 int isp4if_deinit(struct isp4_interface *ispif) in isp4if_deinit() argument
807 isp4if_clear_cmdq(ispif); in isp4if_deinit()
809 isp4if_clear_bufq(ispif); in isp4if_deinit()
811 mutex_destroy(&ispif->isp4if_mutex); in isp4if_deinit()
816 int isp4if_init(struct isp4_interface *ispif, struct device *dev, in isp4if_init() argument
819 ispif->dev = dev; in isp4if_init()
820 ispif->mmio = isp_mmio; in isp4if_init()
822 spin_lock_init(&ispif->cmdq_lock); /* used for cmdq access */ in isp4if_init()
823 spin_lock_init(&ispif->bufq_lock); /* used for bufq access */ in isp4if_init()
824 mutex_init(&ispif->isp4if_mutex); /* used for commands sent to ispfw */ in isp4if_init()
826 INIT_LIST_HEAD(&ispif->cmdq); in isp4if_init()
827 INIT_LIST_HEAD(&ispif->bufq); in isp4if_init()