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

Commit 320c3f86 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: ife: dump bandwidth and clock for cpas and ife" into camera-kernel.lnx.1.0

parents aec98b6b 7b9bc4eb
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -7022,6 +7022,7 @@ static int cam_ife_hw_mgr_handle_hw_dump_info(
	struct cam_isp_resource_node  *rsrc_node = NULL;
	struct cam_hw_intf            *hw_intf;
	uint32_t i, out_port_id;
	uint64_t dummy_args;
	int rc = 0;

	list_for_each_entry(hw_mgr_res,
@@ -7045,6 +7046,25 @@ static int cam_ife_hw_mgr_handle_hw_dump_info(
		}
	}

	list_for_each_entry(hw_mgr_res,
		&ife_hw_mgr_ctx->res_list_ife_csid, list) {
		for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) {
			if (!hw_mgr_res->hw_res[i])
				continue;
			hw_intf = hw_mgr_res->hw_res[i]->hw_intf;
			if (hw_intf->hw_ops.process_cmd) {
				rc = hw_intf->hw_ops.process_cmd(
					hw_intf->hw_priv,
					CAM_ISP_HW_CMD_CSID_CLOCK_DUMP,
					&dummy_args,
					sizeof(uint64_t));
				if (rc)
					CAM_ERR(CAM_ISP,
						"CSID Clock Dump failed");
			}
		}
	}

	out_port_id = event_info->res_id & 0xFF;
	hw_mgr_res =
		&ife_hw_mgr_ctx->res_list_ife_out[out_port_id];
+16 −0
Original line number Diff line number Diff line
@@ -4036,6 +4036,19 @@ static int cam_ife_csid_set_csid_clock(
	return 0;
}

static int cam_ife_csid_dump_csid_clock(
	struct cam_ife_csid_hw *csid_hw, void *cmd_args)
{
	if (!csid_hw)
		return -EINVAL;

	CAM_INFO(CAM_ISP, "CSID:%d clock rate %llu",
		csid_hw->hw_intf->hw_idx,
		csid_hw->clk_rate);

	return 0;
}

static int cam_ife_csid_set_sensor_dimension(
	struct cam_ife_csid_hw *csid_hw, void *cmd_args)
{
@@ -4220,6 +4233,9 @@ static int cam_ife_csid_process_cmd(void *hw_priv,
	case CAM_ISP_HW_CMD_CSID_CLOCK_UPDATE:
		rc = cam_ife_csid_set_csid_clock(csid_hw, cmd_args);
		break;
	case CAM_ISP_HW_CMD_CSID_CLOCK_DUMP:
		rc = cam_ife_csid_dump_csid_clock(csid_hw, cmd_args);
		break;
	case CAM_ISP_HW_CMD_CSID_QCFA_SUPPORTED:
		rc = cam_ife_csid_set_csid_qcfa(csid_hw, cmd_args);
		break;
+1 −0
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ enum cam_isp_hw_cmd_type {
	CAM_ISP_HW_CMD_FE_TRIGGER_CMD,
	CAM_ISP_HW_CMD_CSID_CHANGE_HALT_MODE,
	CAM_ISP_HW_CMD_GET_IRQ_REGISTER_DUMP,
	CAM_ISP_HW_CMD_CSID_CLOCK_DUMP,
	CAM_ISP_HW_CMD_MAX,
};

+23 −2
Original line number Diff line number Diff line
@@ -840,7 +840,7 @@ static void cam_vfe_camif_lite_print_status(uint32_t *status,
	uint32_t violation_mask = 0x3F00, violation_status = 0;
	uint32_t bus_overflow_status = 0, status_0 = 0, status_2 = 0;
	struct cam_vfe_soc_private *soc_private = NULL;
	uint32_t val0, val1, val2;
	uint32_t val0, val1, val2, val3;

	if (!status) {
		CAM_ERR(CAM_ISP, "Invalid params");
@@ -878,8 +878,23 @@ static void cam_vfe_camif_lite_print_status(uint32_t *status,
		if (status_0 & 0x20000000)
			CAM_INFO(CAM_ISP, "RDI0 OVERFLOW");

		if (status_0 & 0x40000000)
		if (status_0 & 0x40000000) {
			CAM_INFO(CAM_ISP, "PD PIPE OVERFLOW");
			cam_cpas_reg_read(soc_private->cpas_handle,
				CAM_CPAS_REG_CAMNOC, 0xA20, true, &val0);
			cam_cpas_reg_read(soc_private->cpas_handle,
				CAM_CPAS_REG_CAMNOC, 0x1420, true, &val1);
			cam_cpas_reg_read(soc_private->cpas_handle,
				CAM_CPAS_REG_CAMNOC, 0x1A20, true, &val2);
			cam_cpas_reg_read(soc_private->cpas_handle,
				CAM_CPAS_REG_CAMNOC, 0x1010, true, &val3);
			CAM_INFO(CAM_ISP, "CAMNOC REG ife_linear: 0x%X",
				val0);
			CAM_INFO(CAM_ISP, "ife_rdi_wr: 0x%X", val1);
			CAM_INFO(CAM_ISP, "ife_ubwc_stats: 0x%X", val2);
			CAM_INFO(CAM_ISP, "ife_rdi_Rd: 0x%x", val3);
			cam_cpas_log_votes();
		}
	}

	if (err_type == CAM_VFE_IRQ_STATUS_OVERFLOW && bus_overflow_status) {
@@ -1200,6 +1215,9 @@ static int cam_vfe_camif_lite_handle_irq_bottom_half(

		ret = CAM_VFE_IRQ_STATUS_OVERFLOW;

		CAM_INFO(CAM_ISP, "ife_clk_src:%lld",
			soc_private->ife_clk_src);

		cam_vfe_camif_lite_print_status(irq_status, ret,
			camif_lite_priv);

@@ -1219,6 +1237,9 @@ static int cam_vfe_camif_lite_handle_irq_bottom_half(

		ret = CAM_VFE_IRQ_STATUS_VIOLATION;

		CAM_INFO(CAM_ISP, "ife_clk_src:%lld",
			soc_private->ife_clk_src);

		cam_vfe_camif_lite_print_status(irq_status, ret,
			camif_lite_priv);

+17 −0
Original line number Diff line number Diff line
@@ -786,6 +786,8 @@ static int cam_vfe_camif_handle_irq_bottom_half(void *handler_priv,
	struct cam_vfe_mux_camif_data        *camif_priv;
	struct cam_vfe_top_irq_evt_payload *payload;
	struct cam_isp_hw_event_info          evt_info;
	struct cam_hw_soc_info               *soc_info = NULL;
	struct cam_vfe_soc_private           *soc_private = NULL;
	uint32_t                              irq_status0;
	uint32_t                              irq_status1;
	uint32_t                              val;
@@ -802,6 +804,9 @@ static int cam_vfe_camif_handle_irq_bottom_half(void *handler_priv,
	irq_status0 = payload->irq_reg_val[CAM_IFE_IRQ_CAMIF_REG_STATUS0];
	irq_status1 = payload->irq_reg_val[CAM_IFE_IRQ_CAMIF_REG_STATUS1];

	soc_info = camif_priv->soc_info;
	soc_private = (struct cam_vfe_soc_private *)soc_info->soc_private;

	evt_info.hw_idx   = camif_node->hw_intf->hw_idx;
	evt_info.res_id   = camif_node->res_id;
	evt_info.res_type = camif_node->res_type;
@@ -891,6 +896,12 @@ static int cam_vfe_camif_handle_irq_bottom_half(void *handler_priv,
			payload->irq_reg_val[2]);

		ret = CAM_VFE_IRQ_STATUS_OVERFLOW;

		CAM_INFO(CAM_ISP, "ife_clk_src:%lld",
			soc_private->ife_clk_src);

		cam_cpas_log_votes();

		if (camif_priv->camif_debug & CAMIF_DEBUG_ENABLE_REG_DUMP)
			cam_vfe_camif_reg_dump(camif_node->res_priv);
	}
@@ -909,6 +920,12 @@ static int cam_vfe_camif_handle_irq_bottom_half(void *handler_priv,
			ts.tv_sec, ts.tv_nsec/1000, payload->irq_reg_val[2]);

		ret = CAM_VFE_IRQ_STATUS_OVERFLOW;

		CAM_INFO(CAM_ISP, "ife_clk_src:%lld",
			soc_private->ife_clk_src);

		cam_cpas_log_votes();

		if (camif_priv->camif_debug & CAMIF_DEBUG_ENABLE_REG_DUMP)
			cam_vfe_camif_reg_dump(camif_node->res_priv);
	}
Loading