Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 439655d6 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera: isp: fix page fault handler"

parents 6e0e16e3 77964173
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1160,7 +1160,7 @@ static int msm_isp_init_isp_buf_mgr(
		goto get_handle_error2;
	}
	buf_mgr->buf_handle_cnt = 0;
	buf_mgr->pagefault_debug = 0;
	buf_mgr->pagefault_debug_disable = 0;
	buf_mgr->frameId_mismatch_recovery = 0;
	mutex_unlock(&buf_mgr->lock);
	return 0;
@@ -1188,7 +1188,7 @@ static int msm_isp_deinit_isp_buf_mgr(
	msm_isp_release_all_bufq(buf_mgr);
	kfree(buf_mgr->bufq);
	buf_mgr->num_buf_q = 0;
	buf_mgr->pagefault_debug = 0;
	buf_mgr->pagefault_debug_disable = 0;

	cam_smmu_ops(buf_mgr->img_iommu_hdl, CAM_SMMU_DETACH);
	cam_smmu_ops(buf_mgr->stats_iommu_hdl, CAM_SMMU_DETACH);
@@ -1375,7 +1375,7 @@ int msm_isp_create_isp_buf_mgr(
	buf_mgr->ops = &isp_buf_ops;
	buf_mgr->vb2_ops = vb2_ops;
	buf_mgr->open_count = 0;
	buf_mgr->pagefault_debug = 0;
	buf_mgr->pagefault_debug_disable = 0;
	buf_mgr->secure_enable = NON_SECURE_MODE;
	buf_mgr->attach_state = MSM_ISP_BUF_MGR_DETACH;
	mutex_init(&buf_mgr->lock);
+1 −1
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ struct msm_isp_buf_ops {
struct msm_isp_buf_mgr {
	int init_done;
	uint32_t open_count;
	uint32_t pagefault_debug;
	uint32_t pagefault_debug_disable;
	uint32_t frameId_mismatch_recovery;
	uint16_t num_buf_q;
	struct msm_isp_bufq *bufq;
+12 −13
Original line number Diff line number Diff line
@@ -1704,10 +1704,15 @@ void ms_isp_process_iommu_page_fault(struct vfe_device *vfe_dev)

	error_event.frame_id =
		vfe_dev->axi_data.src_info[VFE_PIX_0].frame_id;
	if (vfe_dev->buf_mgr->pagefault_debug_disable == 0) {
		vfe_dev->buf_mgr->pagefault_debug_disable = 1;
		vfe_dev->buf_mgr->ops->buf_mgr_debug(vfe_dev->buf_mgr,
			vfe_dev->page_fault_addr);
	msm_isp_print_ping_pong_address(vfe_dev, vfe_dev->page_fault_addr);
	vfe_dev->hw_info->vfe_ops.axi_ops.read_wm_ping_pong_addr(vfe_dev);
		msm_isp_print_ping_pong_address(vfe_dev,
			vfe_dev->page_fault_addr);
		vfe_dev->hw_info->vfe_ops.axi_ops.
			read_wm_ping_pong_addr(vfe_dev);
	}

	for (i = 0; i < MAX_NUM_STREAM; i++)
		vfe_dev->axi_data.stream_info[i].state = INACTIVE;
@@ -1965,14 +1970,8 @@ static int msm_vfe_iommu_fault_handler(struct iommu_domain *domain,
				vfe_dev->axi_data.num_active_stream);
			goto end;
		}
		if (!vfe_dev->buf_mgr->pagefault_debug) {
			vfe_dev->buf_mgr->pagefault_debug = 1;

		msm_isp_enqueue_tasklet_cmd(vfe_dev, 0, 0, 1);
		} else {
			/* Page fault previously handled, avoid flooding logs*/
			rc = 0;
			goto end;
		}
	} else {
		ISP_DBG("%s:%d] no token received: %p\n",
			__func__, __LINE__, token);
@@ -2052,7 +2051,7 @@ int msm_isp_open_node(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
	vfe_dev->vt_enable = 0;
	vfe_dev->reg_update_requested = 0;
	/* Register page fault handler */
	vfe_dev->buf_mgr->pagefault_debug = 0;
	vfe_dev->buf_mgr->pagefault_debug_disable = 0;
	cam_smmu_reg_client_page_fault_handler(
			vfe_dev->buf_mgr->img_iommu_hdl,
			msm_vfe_iommu_fault_handler, vfe_dev);