mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-11 07:03:09 -04:00
Merge "msm: camera: isp: Add trace events across ISP" into camera-kernel.lnx.4.0
This commit is contained in:
commit
0819ac8dba
5 changed files with 103 additions and 5 deletions
|
|
@ -23,6 +23,7 @@
|
|||
#include "cam_cdm_hw_reg_1_2.h"
|
||||
#include "cam_cdm_hw_reg_2_0.h"
|
||||
#include "camera_main.h"
|
||||
#include "cam_trace.h"
|
||||
|
||||
#define CAM_CDM_BL_FIFO_WAIT_TIMEOUT 2000
|
||||
#define CAM_CDM_DBG_GEN_IRQ_USR_DATA 0xff
|
||||
|
|
@ -689,6 +690,8 @@ int cam_hw_cdm_submit_gen_irq(
|
|||
rc = -EIO;
|
||||
}
|
||||
|
||||
trace_cam_log_event("CDM_START", "CDM_START_IRQ", req->data->cookie, 0);
|
||||
|
||||
end:
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -1159,7 +1162,20 @@ irqreturn_t cam_hw_cdm_irq(int irq_num, void *data)
|
|||
INIT_WORK((struct work_struct *)&payload[i]->work,
|
||||
cam_hw_cdm_work);
|
||||
|
||||
work_status = queue_work(
|
||||
trace_cam_log_event("CDM_DONE", "CDM_DONE_IRQ",
|
||||
payload[i]->irq_status,
|
||||
cdm_hw->soc_info.index);
|
||||
|
||||
if (cam_cdm_write_hw_reg(cdm_hw,
|
||||
cdm_core->offsets->irq_reg[i]->irq_clear,
|
||||
payload[i]->irq_status)) {
|
||||
CAM_ERR(CAM_CDM,
|
||||
"Failed to Write CDM HW IRQ Clear");
|
||||
kfree(payload[i]);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
work_status = queue_work(
|
||||
cdm_core->bl_fifo[i].work_queue,
|
||||
&payload[i]->work);
|
||||
|
||||
|
|
|
|||
|
|
@ -782,15 +782,26 @@ static void __cam_isp_ctx_handle_buf_done_fail_log(
|
|||
"Resource Handles that fail to generate buf_done in prev frame");
|
||||
for (i = 0; i < req_isp->num_fence_map_out; i++) {
|
||||
if (req_isp->fence_map_out[i].sync_id != -1) {
|
||||
if (isp_device_type == CAM_IFE_DEVICE_TYPE)
|
||||
if (isp_device_type == CAM_IFE_DEVICE_TYPE) {
|
||||
handle_type =
|
||||
__cam_isp_resource_handle_id_to_type(
|
||||
req_isp->fence_map_out[i].resource_handle);
|
||||
else
|
||||
|
||||
trace_cam_log_event("Buf_done Congestion",
|
||||
__cam_isp_resource_handle_id_to_type(
|
||||
req_isp->fence_map_out[i].resource_handle),
|
||||
request_id, req_isp->fence_map_out[i].sync_id);
|
||||
} else {
|
||||
handle_type =
|
||||
__cam_isp_tfe_resource_handle_id_to_type(
|
||||
req_isp->fence_map_out[i].resource_handle);
|
||||
|
||||
trace_cam_log_event("Buf_done Congestion",
|
||||
__cam_isp_tfe_resource_handle_id_to_type(
|
||||
req_isp->fence_map_out[i].resource_handle),
|
||||
request_id, req_isp->fence_map_out[i].sync_id);
|
||||
}
|
||||
|
||||
CAM_WARN(CAM_ISP,
|
||||
"Resource_Handle: [%s][0x%x] Sync_ID: [0x%x]",
|
||||
handle_type,
|
||||
|
|
@ -873,6 +884,9 @@ static int __cam_isp_ctx_handle_buf_done_for_request(
|
|||
"Duplicate BUF_DONE for req %lld : i=%d, j=%d, res=%s",
|
||||
req->request_id, i, j, handle_type);
|
||||
|
||||
trace_cam_log_event("Duplicate BufDone",
|
||||
handle_type, req->request_id, ctx->ctx_id);
|
||||
|
||||
if (done_next_req) {
|
||||
done_next_req->resource_handle
|
||||
[done_next_req->num_handles++] =
|
||||
|
|
@ -1557,6 +1571,8 @@ static int __cam_isp_ctx_epoch_in_applied(struct cam_isp_context *ctx_isp,
|
|||
CAM_WARN(CAM_ISP,
|
||||
"Notify CRM about Bubble req %lld frame %lld, ctx %u",
|
||||
req->request_id, ctx_isp->frame_id, ctx->ctx_id);
|
||||
trace_cam_log_event("Bubble", "Rcvd epoch in applied state",
|
||||
req->request_id, ctx->ctx_id);
|
||||
ctx->ctx_crm_intf->notify_err(¬ify);
|
||||
atomic_set(&ctx_isp->process_bubble, 1);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
#include "cam_vfe_soc.h"
|
||||
#include "cam_debug_util.h"
|
||||
#include "cam_cpas_api.h"
|
||||
#include "cam_trace.h"
|
||||
|
||||
static const char drv_name[] = "vfe_bus";
|
||||
|
||||
|
|
@ -866,6 +867,7 @@ static int cam_vfe_bus_ver3_handle_rup_top_half(uint32_t evt_id,
|
|||
struct cam_isp_resource_node *vfe_out = NULL;
|
||||
struct cam_vfe_bus_ver3_vfe_out_data *rsrc_data = NULL;
|
||||
struct cam_vfe_bus_irq_evt_payload *evt_payload;
|
||||
uint32_t irq_status;
|
||||
|
||||
vfe_out = th_payload->handler_priv;
|
||||
if (!vfe_out) {
|
||||
|
|
@ -894,6 +896,12 @@ static int cam_vfe_bus_ver3_handle_rup_top_half(uint32_t evt_id,
|
|||
evt_payload->evt_id = evt_id;
|
||||
for (i = 0; i < th_payload->num_registers; i++)
|
||||
evt_payload->irq_reg_val[i] = th_payload->evt_status_arr[i];
|
||||
|
||||
irq_status =
|
||||
th_payload->evt_status_arr[CAM_IFE_IRQ_BUS_VER3_REG_STATUS0];
|
||||
|
||||
trace_cam_log_event("RUP", "RUP_IRQ", irq_status, 0);
|
||||
|
||||
th_payload->evt_payload_priv = evt_payload;
|
||||
|
||||
return rc;
|
||||
|
|
@ -2180,6 +2188,8 @@ static int cam_vfe_bus_ver3_handle_vfe_out_done_top_half(uint32_t evt_id,
|
|||
struct cam_isp_resource_node *vfe_out = NULL;
|
||||
struct cam_vfe_bus_ver3_vfe_out_data *rsrc_data = NULL;
|
||||
struct cam_vfe_bus_irq_evt_payload *evt_payload;
|
||||
struct cam_vfe_bus_ver3_comp_grp_data *resource_data;
|
||||
uint32_t status_0;
|
||||
|
||||
vfe_out = th_payload->handler_priv;
|
||||
if (!vfe_out) {
|
||||
|
|
@ -2188,6 +2198,7 @@ static int cam_vfe_bus_ver3_handle_vfe_out_done_top_half(uint32_t evt_id,
|
|||
}
|
||||
|
||||
rsrc_data = vfe_out->res_priv;
|
||||
resource_data = rsrc_data->comp_grp->res_priv;
|
||||
|
||||
CAM_DBG(CAM_ISP, "VFE:%d Bus IRQ status_0: 0x%X status_1: 0x%X",
|
||||
rsrc_data->common_data->core_index,
|
||||
|
|
@ -2216,6 +2227,17 @@ static int cam_vfe_bus_ver3_handle_vfe_out_done_top_half(uint32_t evt_id,
|
|||
|
||||
th_payload->evt_payload_priv = evt_payload;
|
||||
|
||||
status_0 = th_payload->evt_status_arr[CAM_IFE_IRQ_BUS_VER3_REG_STATUS0];
|
||||
|
||||
if (status_0 & BIT(resource_data->comp_grp_type +
|
||||
rsrc_data->common_data->comp_done_shift)) {
|
||||
trace_cam_log_event("bufdone", "bufdone_IRQ",
|
||||
status_0, resource_data->comp_grp_type);
|
||||
}
|
||||
|
||||
if (status_0 & 0x1)
|
||||
trace_cam_log_event("UnexpectedRUP", "RUP_IRQ", status_0, 40);
|
||||
|
||||
CAM_DBG(CAM_ISP, "Exit");
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -3699,7 +3721,6 @@ int cam_vfe_bus_ver3_init(
|
|||
struct cam_vfe_bus *vfe_bus_local;
|
||||
struct cam_vfe_bus_ver3_hw_info *ver3_hw_info = bus_hw_info;
|
||||
struct cam_vfe_soc_private *soc_private = NULL;
|
||||
static const char rup_controller_name[] = "vfe_bus_rup";
|
||||
|
||||
CAM_DBG(CAM_ISP, "Enter");
|
||||
|
||||
|
|
@ -3765,7 +3786,7 @@ int cam_vfe_bus_ver3_init(
|
|||
goto free_bus_priv;
|
||||
}
|
||||
|
||||
rc = cam_irq_controller_init(rup_controller_name,
|
||||
rc = cam_irq_controller_init("vfe_bus_rup",
|
||||
bus_priv->common_data.mem_base,
|
||||
&ver3_hw_info->common_reg.irq_reg_info,
|
||||
&bus_priv->common_data.rup_irq_controller, false);
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "cam_debug_util.h"
|
||||
#include "cam_cdm_util.h"
|
||||
#include "cam_cpas_api.h"
|
||||
#include "cam_trace.h"
|
||||
|
||||
#define CAM_VFE_CAMIF_IRQ_SOF_DEBUG_CNT_MAX 2
|
||||
|
||||
|
|
@ -1245,6 +1246,27 @@ static int cam_vfe_camif_ver3_handle_irq_top_half(uint32_t evt_id,
|
|||
|
||||
th_payload->evt_payload_priv = evt_payload;
|
||||
|
||||
if (th_payload->evt_status_arr[CAM_IFE_IRQ_CAMIF_REG_STATUS1]
|
||||
& camif_priv->reg_data->sof_irq_mask) {
|
||||
trace_cam_log_event("SOF", "TOP_HALF",
|
||||
th_payload->evt_status_arr[CAM_IFE_IRQ_CAMIF_REG_STATUS1],
|
||||
camif_node->hw_intf->hw_idx);
|
||||
}
|
||||
|
||||
if (th_payload->evt_status_arr[CAM_IFE_IRQ_CAMIF_REG_STATUS1]
|
||||
& camif_priv->reg_data->epoch0_irq_mask) {
|
||||
trace_cam_log_event("EPOCH0", "TOP_HALF",
|
||||
th_payload->evt_status_arr[CAM_IFE_IRQ_CAMIF_REG_STATUS1],
|
||||
camif_node->hw_intf->hw_idx);
|
||||
}
|
||||
|
||||
if (th_payload->evt_status_arr[CAM_IFE_IRQ_CAMIF_REG_STATUS1]
|
||||
& camif_priv->reg_data->eof_irq_mask) {
|
||||
trace_cam_log_event("EOF", "TOP_HALF",
|
||||
th_payload->evt_status_arr[CAM_IFE_IRQ_CAMIF_REG_STATUS1],
|
||||
camif_node->hw_intf->hw_idx);
|
||||
}
|
||||
|
||||
CAM_DBG(CAM_ISP, "Exit");
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,6 +63,29 @@ TRACE_EVENT(cam_isp_activated_irq,
|
|||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(cam_log_event,
|
||||
TP_PROTO(const char *string1, const char *string2,
|
||||
uint64_t val1, uint64_t val2),
|
||||
TP_ARGS(string1, string2, val1, val2),
|
||||
TP_STRUCT__entry(
|
||||
__string(string1, string1)
|
||||
__string(string2, string2)
|
||||
__field(uint64_t, val1)
|
||||
__field(uint64_t, val2)
|
||||
),
|
||||
TP_fast_assign(
|
||||
__assign_str(string1, string1);
|
||||
__assign_str(string2, string2);
|
||||
__entry->val1 = val1;
|
||||
__entry->val2 = val2;
|
||||
),
|
||||
TP_printk(
|
||||
"%s: %s val1=%llu val2=%llu",
|
||||
__get_str(string1), __get_str(string2),
|
||||
__entry->val1, __entry->val2
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(cam_icp_fw_dbg,
|
||||
TP_PROTO(char *dbg_message, uint64_t timestamp),
|
||||
TP_ARGS(dbg_message, timestamp),
|
||||
|
|
|
|||
Loading…
Reference in a new issue