diff --git a/drivers/cam_icp/icp_hw/icp_hw_mgr/cam_icp_hw_mgr.c b/drivers/cam_icp/icp_hw/icp_hw_mgr/cam_icp_hw_mgr.c index e1fa6c7cf5..3497ec5d00 100644 --- a/drivers/cam_icp/icp_hw/icp_hw_mgr/cam_icp_hw_mgr.c +++ b/drivers/cam_icp/icp_hw/icp_hw_mgr/cam_icp_hw_mgr.c @@ -2833,8 +2833,10 @@ static int cam_icp_alloc_shared_mem(struct cam_mem_mgr_memory_desc *qtbl) CAM_MEM_FLAG_HW_SHARED_ACCESS; alloc.smmu_hdl = icp_hw_mgr.iommu_hdl; rc = cam_mem_mgr_request_mem(&alloc, &out); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in alloc shared mem rc %d", rc); return rc; + } *qtbl = out; CAM_DBG(CAM_ICP, "kva: %llX, iova: %x, hdl: %x, len: %lld", @@ -2855,8 +2857,10 @@ static int cam_icp_allocate_fw_mem(void) rc = cam_smmu_alloc_firmware(icp_hw_mgr.iommu_hdl, &iova, &kvaddr, &len); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in alloc firmware rc %d", rc); return -ENOMEM; + } icp_hw_mgr.hfi_mem.fw_buf.len = len; icp_hw_mgr.hfi_mem.fw_buf.kva = kvaddr; @@ -2877,8 +2881,10 @@ static int cam_icp_allocate_qdss_mem(void) rc = cam_smmu_alloc_qdss(icp_hw_mgr.iommu_hdl, &iova, &len); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in alloc qdss mem rc %d", rc); return rc; + } icp_hw_mgr.hfi_mem.qdss_buf.len = len; icp_hw_mgr.hfi_mem.qdss_buf.iova = iova; @@ -2921,19 +2927,19 @@ static int cam_icp_allocate_hfi_mem(void) CAM_SMMU_REGION_SHARED, &icp_hw_mgr.hfi_mem.shmem); if (rc) { - CAM_ERR(CAM_ICP, "Unable to get shared memory info"); + CAM_ERR(CAM_ICP, "Unable to get shared memory info rc %d", rc); return rc; } rc = cam_icp_allocate_fw_mem(); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate FW memory"); + CAM_ERR(CAM_ICP, "Unable to allocate FW memory rc %d", rc); return rc; } rc = cam_icp_allocate_qdss_mem(); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate qdss memory"); + CAM_ERR(CAM_ICP, "Unable to allocate qdss memory rc %d", rc); goto fw_alloc_failed; } @@ -2960,7 +2966,7 @@ static int cam_icp_allocate_hfi_mem(void) CAM_SMMU_REGION_FWUNCACHED, &out); if (rc) { - CAM_ERR(CAM_ICP, "Unable to reserve secheap memory"); + CAM_ERR(CAM_ICP, "Unable to reserve secheap memory rc %d", rc); goto qtbl_alloc_failed; } @@ -3033,37 +3039,37 @@ static int cam_icp_allocate_hfi_mem(void) } else { rc = cam_icp_alloc_shared_mem(&icp_hw_mgr.hfi_mem.qtbl); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate qtbl memory"); + CAM_ERR(CAM_ICP, "Unable to allocate qtbl memory, rc %d", rc); goto qtbl_alloc_failed; } rc = cam_icp_alloc_shared_mem(&icp_hw_mgr.hfi_mem.cmd_q); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate cmd q memory"); + CAM_ERR(CAM_ICP, "Unable to allocate cmd q memory rc %d", rc); goto cmd_q_alloc_failed; } rc = cam_icp_alloc_shared_mem(&icp_hw_mgr.hfi_mem.msg_q); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate msg q memory"); + CAM_ERR(CAM_ICP, "Unable to allocate msg q memory rc %d", rc); goto msg_q_alloc_failed; } rc = cam_icp_alloc_shared_mem(&icp_hw_mgr.hfi_mem.dbg_q); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate dbg q memory"); + CAM_ERR(CAM_ICP, "Unable to allocate dbg q memory rc %d", rc); goto dbg_q_alloc_failed; } rc = cam_icp_alloc_sfr_mem(&icp_hw_mgr.hfi_mem.sfr_buf); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate sfr buffer"); + CAM_ERR(CAM_ICP, "Unable to allocate sfr buffer rc %d", rc); goto sfr_buf_alloc_failed; } rc = cam_icp_alloc_secheap_mem(&icp_hw_mgr.hfi_mem.sec_heap); if (rc) { - CAM_ERR(CAM_ICP, "Unable to allocate sec heap memory"); + CAM_ERR(CAM_ICP, "Unable to allocate sec heap memory rc %d", rc); goto sec_heap_alloc_failed; } } @@ -3103,7 +3109,7 @@ static int cam_icp_allocate_hfi_mem(void) rc = cam_icp_get_io_mem_info(); if (rc) { - CAM_ERR(CAM_ICP, "Unable to get I/O region info"); + CAM_ERR(CAM_ICP, "Unable to get I/O region info rc %d", rc); if (fwuncached_region_exists) { cam_mem_mgr_free_memory_region( &icp_hw_mgr.hfi_mem.fw_uncached); @@ -3192,6 +3198,7 @@ static int cam_ipe_bps_deint(struct cam_icp_hw_mgr *hw_mgr) struct cam_hw_intf *ipe0_dev_intf = NULL; struct cam_hw_intf *ipe1_dev_intf = NULL; struct cam_hw_intf *bps_dev_intf = NULL; + int rc = 0; ipe0_dev_intf = hw_mgr->ipe0_dev_intf; ipe1_dev_intf = hw_mgr->ipe1_dev_intf; @@ -3202,14 +3209,23 @@ static int cam_ipe_bps_deint(struct cam_icp_hw_mgr *hw_mgr) } if (ipe1_dev_intf && hw_mgr->ipe_clk_state) { - ipe1_dev_intf->hw_ops.deinit(ipe1_dev_intf->hw_priv, + rc = ipe1_dev_intf->hw_ops.deinit(ipe1_dev_intf->hw_priv, NULL, 0); + if (rc) + CAM_ERR(CAM_ICP, "Failed in ipe1 deinit rc %d", rc); } - if (hw_mgr->ipe_clk_state) - ipe0_dev_intf->hw_ops.deinit(ipe0_dev_intf->hw_priv, NULL, 0); - if (hw_mgr->bps_clk_state) - bps_dev_intf->hw_ops.deinit(bps_dev_intf->hw_priv, NULL, 0); + if (hw_mgr->ipe_clk_state) { + rc = ipe0_dev_intf->hw_ops.deinit(ipe0_dev_intf->hw_priv, NULL, 0); + if (rc) + CAM_ERR(CAM_ICP, "Failed in ipe0 deinit rc %d", rc); + } + + if (hw_mgr->bps_clk_state) { + rc = bps_dev_intf->hw_ops.deinit(bps_dev_intf->hw_priv, NULL, 0); + if (rc) + CAM_ERR(CAM_ICP, "Failed in bps deinit rc %d", rc); + } hw_mgr->bps_clk_state = false; @@ -3288,10 +3304,17 @@ static int __power_collapse(struct cam_icp_hw_mgr *hw_mgr) if (!hw_mgr->icp_pc_flag || atomic_read(&hw_mgr->recovery)) { cam_icp_mgr_proc_suspend(hw_mgr); + rc = cam_icp_mgr_hw_close_k(hw_mgr, NULL); + if (rc) + CAM_ERR(CAM_ICP, "Failed in hw close rc %d", rc); } else { CAM_DBG(CAM_PERF, "Sending PC prep ICP PC enabled"); + rc = cam_icp_mgr_send_pc_prep(hw_mgr); + if (rc) + CAM_ERR(CAM_ICP, "Failed in send pc prep rc %d", rc); + cam_icp_mgr_proc_suspend(hw_mgr); } @@ -3312,7 +3335,8 @@ static int cam_icp_mgr_icp_power_collapse(struct cam_icp_hw_mgr *hw_mgr) rc = __power_collapse(hw_mgr); - icp_dev_intf->hw_ops.deinit(icp_dev_intf->hw_priv, NULL, 0); + if (icp_dev_intf->hw_ops.deinit(icp_dev_intf->hw_priv, NULL, 0)) + CAM_ERR(CAM_ICP, "Failed in icp deinit"); CAM_DBG(CAM_PERF, "EXIT"); @@ -3906,22 +3930,30 @@ static int cam_icp_mgr_device_init(struct cam_icp_hw_mgr *hw_mgr) } rc = icp_dev_intf->hw_ops.init(icp_dev_intf->hw_priv, NULL, 0); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in icp init rc %d", rc); goto icp_dev_init_failed; + } rc = bps_dev_intf->hw_ops.init(bps_dev_intf->hw_priv, NULL, 0); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in bps init rc %d", rc); goto bps_dev_init_failed; + } rc = ipe0_dev_intf->hw_ops.init(ipe0_dev_intf->hw_priv, NULL, 0); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in ipe0 init rc %d", rc); goto ipe0_dev_init_failed; + } if (ipe1_dev_intf) { rc = ipe1_dev_intf->hw_ops.init(ipe1_dev_intf->hw_priv, NULL, 0); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in ipe1 init rc %d", rc); goto ipe1_dev_init_failed; + } } hw_mgr->bps_clk_state = true; @@ -4037,8 +4069,10 @@ static int cam_icp_mgr_send_fw_init(struct cam_icp_hw_mgr *hw_mgr) CAM_DBG(CAM_ICP, "Sending HFI init command"); rc = icp_dev_intf->hw_ops.process_cmd(icp_dev_intf->hw_priv, CAM_ICP_SEND_INIT, NULL, 0); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in sending HFI init command rc %d", rc); return rc; + } rem_jiffies = cam_common_wait_for_completion_timeout( &icp_hw_mgr.icp_complete, @@ -4154,25 +4188,37 @@ static int cam_icp_mgr_hw_open(void *hw_mgr_priv, void *download_fw_args) return -EINVAL; } + CAM_DBG(CAM_ICP, "Start icp hw open"); + rc = cam_icp_allocate_hfi_mem(); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in alloc hfi mem, rc %d", rc); goto alloc_hfi_mem_failed; + } rc = cam_icp_mgr_device_init(hw_mgr); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in device init, rc %d", rc); goto dev_init_fail; + } rc = cam_icp_mgr_proc_boot(hw_mgr); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in proc boot, rc %d", rc); goto boot_failed; + } rc = cam_icp_mgr_hfi_init(hw_mgr); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in hfi init, rc %d", rc); goto hfi_init_failed; + } rc = cam_icp_mgr_send_fw_init(hw_mgr); - if (rc) + if (rc) { + CAM_ERR(CAM_ICP, "Failed in sending fw init, rc %d", rc); goto fw_init_failed; + } hw_mgr->ctxt_cnt = 0; hw_mgr->icp_booted = true; @@ -4181,11 +4227,17 @@ static int cam_icp_mgr_hw_open(void *hw_mgr_priv, void *download_fw_args) CAM_INFO(CAM_ICP, "FW download done successfully"); rc = cam_ipe_bps_deint(hw_mgr); + if (rc) + CAM_ERR(CAM_ICP, "Failed in ipe bps deinit rc %d", rc); + if (download_fw_args) icp_pc = *((bool *)download_fw_args); if (download_fw_args && icp_pc == true && hw_mgr->icp_pc_flag) { rc = cam_ipe_bps_deint(hw_mgr); + if (rc) + CAM_ERR(CAM_ICP, "Failed in ipe bps deinit with icp_pc rc %d", rc); + CAM_DBG(CAM_ICP, "deinit all clocks"); } @@ -4193,7 +4245,13 @@ static int cam_icp_mgr_hw_open(void *hw_mgr_priv, void *download_fw_args) return rc; rc = cam_ipe_bps_deint(hw_mgr); + if (rc) + CAM_ERR(CAM_ICP, "Failed in ipe bps deinit rc %d", rc); + rc = cam_icp_mgr_icp_power_collapse(hw_mgr); + if (rc) + CAM_ERR(CAM_ICP, "Failed in icp power collapse rc %d", rc); + CAM_DBG(CAM_ICP, "deinit all clocks at boot up"); return rc; diff --git a/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c b/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c index b2a68f81ad..0110f94489 100644 --- a/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c +++ b/drivers/cam_icp/icp_hw/lx7_hw/lx7_core.c @@ -742,6 +742,8 @@ static inline int cam_lx7_download_fw( { int rc; + CAM_INFO(CAM_ICP, "Loading Secure PIL : %s", CAM_BOOL_TO_YESNO(args->use_sec_pil)); + if (args->use_sec_pil) rc = cam_lx7_boot( lx7_info, args, arg_size); diff --git a/drivers/cam_utils/cam_compat.c b/drivers/cam_utils/cam_compat.c index ec64edb3e2..1fd51e3f7e 100644 --- a/drivers/cam_utils/cam_compat.c +++ b/drivers/cam_utils/cam_compat.c @@ -345,11 +345,15 @@ int cam_compat_util_get_dmabuf_va(struct dma_buf *dmabuf, uintptr_t *vaddr) struct dma_buf_map mapping; int error_code = dma_buf_vmap(dmabuf, &mapping); - if (error_code) + if (error_code) { *vaddr = 0; - else + } else { *vaddr = (mapping.is_iomem) ? (uintptr_t)mapping.vaddr_iomem : (uintptr_t)mapping.vaddr; + CAM_DBG(CAM_MEM, + "dmabuf=%p, *vaddr=%p, is_iomem=%d, vaddr_iomem=%p, vaddr=%p", + dmabuf, *vaddr, mapping.is_iomem, mapping.vaddr_iomem, mapping.vaddr); + } return error_code; }