msm: camera: isp: Remove IFE HW mgr reference from ISP ctx
Removes IFE HW manager reference from ISP context and moves some LDAR dump functionality for stream info to IFE HW manager. CRs-Fixed: 3210247 Change-Id: I311c7cd8d8684a68ba0bfbe279ef9ba55cfbbe82 Signed-off-by: Joshua Florez <quic_jflorez@quicinc.com>
Este cometimento está contido em:

cometido por
Camera Software Integration

ascendente
c8a2b3a9a8
cometimento
8f297a31ea
@@ -4640,38 +4640,9 @@ static void *cam_isp_ctx_user_dump_stream_info(
|
||||
void *dump_struct, uint8_t *addr_ptr)
|
||||
{
|
||||
struct cam_context *ctx = NULL;
|
||||
struct cam_ife_hw_mgr_ctx *hw_mgr_ctx = NULL;
|
||||
struct cam_isp_hw_mgr_res *hw_mgr_res = NULL;
|
||||
struct cam_isp_resource_node *hw_res = NULL;
|
||||
int hw_idx[CAM_ISP_HW_SPLIT_MAX] = { -1, -1 };
|
||||
int sfe_hw_idx[CAM_ISP_HW_SPLIT_MAX] = { -1, -1 };
|
||||
int32_t *addr;
|
||||
int i;
|
||||
|
||||
ctx = (struct cam_context *)dump_struct;
|
||||
hw_mgr_ctx = (struct cam_ife_hw_mgr_ctx *)ctx->ctxt_to_hw_map;
|
||||
|
||||
if (!list_empty(&hw_mgr_ctx->res_list_ife_src)) {
|
||||
hw_mgr_res = list_first_entry(&hw_mgr_ctx->res_list_ife_src,
|
||||
struct cam_isp_hw_mgr_res, list);
|
||||
|
||||
for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) {
|
||||
hw_res = hw_mgr_res->hw_res[i];
|
||||
if (hw_res && hw_res->hw_intf)
|
||||
hw_idx[i] = hw_res->hw_intf->hw_idx;
|
||||
}
|
||||
}
|
||||
|
||||
if (!list_empty(&hw_mgr_ctx->res_list_sfe_src)) {
|
||||
hw_mgr_res = list_first_entry(&hw_mgr_ctx->res_list_sfe_src,
|
||||
struct cam_isp_hw_mgr_res, list);
|
||||
|
||||
for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) {
|
||||
hw_res = hw_mgr_res->hw_res[i];
|
||||
if (hw_res && hw_res->hw_intf)
|
||||
sfe_hw_idx[i] = hw_res->hw_intf->hw_idx;
|
||||
}
|
||||
}
|
||||
|
||||
addr = (int32_t *)addr_ptr;
|
||||
|
||||
@@ -4679,20 +4650,6 @@ static void *cam_isp_ctx_user_dump_stream_info(
|
||||
*addr++ = ctx->dev_hdl;
|
||||
*addr++ = ctx->link_hdl;
|
||||
|
||||
*addr++ = hw_mgr_ctx->flags.is_dual;
|
||||
*addr++ = hw_mgr_ctx->ctx_type;
|
||||
|
||||
*addr++ = hw_idx[CAM_ISP_HW_SPLIT_LEFT];
|
||||
*addr++ = hw_idx[CAM_ISP_HW_SPLIT_RIGHT];
|
||||
*addr++ = sfe_hw_idx[CAM_ISP_HW_SPLIT_LEFT];
|
||||
*addr++ = sfe_hw_idx[CAM_ISP_HW_SPLIT_RIGHT];
|
||||
|
||||
*addr++ = hw_mgr_ctx->flags.is_sfe_shdr;
|
||||
*addr++ = hw_mgr_ctx->flags.is_sfe_fs;
|
||||
*addr++ = hw_mgr_ctx->flags.dsp_enabled;
|
||||
*addr++ = hw_mgr_ctx->flags.is_offline;
|
||||
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
@@ -4714,6 +4671,8 @@ static int __cam_isp_ctx_dump_in_top_state(
|
||||
struct cam_ctx_request *req_temp;
|
||||
struct cam_hw_dump_args ife_dump_args;
|
||||
struct cam_common_hw_dump_args dump_args;
|
||||
struct cam_hw_cmd_args hw_cmd_args;
|
||||
struct cam_isp_hw_cmd_args isp_hw_cmd_args;
|
||||
|
||||
spin_lock_bh(&ctx->lock);
|
||||
list_for_each_entry_safe(req, req_temp,
|
||||
@@ -4789,14 +4748,33 @@ hw_dump:
|
||||
|
||||
/* Dump stream info */
|
||||
ctx->ctxt_to_hw_map = ctx_isp->hw_ctx;
|
||||
rc = cam_common_user_dump_helper(&dump_args, cam_isp_ctx_user_dump_stream_info,
|
||||
ctx, sizeof(int32_t), "ISP_STREAM_INFO:");
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "Stream info dump fail %lld, rc: %d",
|
||||
req->request_id, rc);
|
||||
goto end;
|
||||
if (ctx->hw_mgr_intf->hw_dump) {
|
||||
/* Dump first part of stream info from isp context */
|
||||
rc = cam_common_user_dump_helper(&dump_args,
|
||||
cam_isp_ctx_user_dump_stream_info, ctx,
|
||||
sizeof(int32_t), "ISP_STREAM_INFO_FROM_CTX:");
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "ISP CTX stream info dump fail %lld, rc: %d",
|
||||
req->request_id, rc);
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* Dump second part of stream info from ife hw manager */
|
||||
hw_cmd_args.ctxt_to_hw_map = ctx->ctxt_to_hw_map;
|
||||
hw_cmd_args.cmd_type = CAM_HW_MGR_CMD_INTERNAL;
|
||||
isp_hw_cmd_args.cmd_type = CAM_ISP_HW_MGR_DUMP_STREAM_INFO;
|
||||
isp_hw_cmd_args.cmd_data = &dump_args;
|
||||
hw_cmd_args.u.internal_args = (void *)&isp_hw_cmd_args;
|
||||
|
||||
rc = ctx->hw_mgr_intf->hw_cmd(ctx->hw_mgr_intf->hw_mgr_priv, &hw_cmd_args);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "IFE HW MGR stream info dump fail %lld, rc: %d",
|
||||
req->request_id, rc);
|
||||
goto end;
|
||||
}
|
||||
|
||||
dump_info->offset = dump_args.offset;
|
||||
}
|
||||
dump_info->offset = dump_args.offset;
|
||||
|
||||
/* Dump event record */
|
||||
rc = __cam_isp_ctx_dump_event_record(ctx_isp, &dump_args);
|
||||
|
@@ -11977,6 +11977,59 @@ end:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static void *cam_ife_mgr_user_dump_stream_info(
|
||||
void *dump_struct, uint8_t *addr_ptr)
|
||||
{
|
||||
struct cam_ife_hw_mgr_ctx *hw_mgr_ctx = NULL;
|
||||
struct cam_isp_hw_mgr_res *hw_mgr_res = NULL;
|
||||
struct cam_isp_resource_node *hw_res = NULL;
|
||||
int32_t *addr;
|
||||
int i;
|
||||
int hw_idx[CAM_ISP_HW_SPLIT_MAX] = { -1, -1 };
|
||||
int sfe_hw_idx[CAM_ISP_HW_SPLIT_MAX] = { -1, -1 };
|
||||
|
||||
hw_mgr_ctx = (struct cam_ife_hw_mgr_ctx *)dump_struct;
|
||||
|
||||
if (!list_empty(&hw_mgr_ctx->res_list_ife_src)) {
|
||||
hw_mgr_res = list_first_entry(&hw_mgr_ctx->res_list_ife_src,
|
||||
struct cam_isp_hw_mgr_res, list);
|
||||
|
||||
for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) {
|
||||
hw_res = hw_mgr_res->hw_res[i];
|
||||
if (hw_res && hw_res->hw_intf)
|
||||
hw_idx[i] = hw_res->hw_intf->hw_idx;
|
||||
}
|
||||
}
|
||||
|
||||
if (!list_empty(&hw_mgr_ctx->res_list_sfe_src)) {
|
||||
hw_mgr_res = list_first_entry(&hw_mgr_ctx->res_list_sfe_src,
|
||||
struct cam_isp_hw_mgr_res, list);
|
||||
|
||||
for (i = 0; i < CAM_ISP_HW_SPLIT_MAX; i++) {
|
||||
hw_res = hw_mgr_res->hw_res[i];
|
||||
if (hw_res && hw_res->hw_intf)
|
||||
sfe_hw_idx[i] = hw_res->hw_intf->hw_idx;
|
||||
}
|
||||
}
|
||||
|
||||
addr = (int32_t *)addr_ptr;
|
||||
|
||||
*addr++ = hw_mgr_ctx->flags.is_dual;
|
||||
*addr++ = hw_mgr_ctx->ctx_type;
|
||||
|
||||
*addr++ = hw_idx[CAM_ISP_HW_SPLIT_LEFT];
|
||||
*addr++ = hw_idx[CAM_ISP_HW_SPLIT_RIGHT];
|
||||
*addr++ = sfe_hw_idx[CAM_ISP_HW_SPLIT_LEFT];
|
||||
*addr++ = sfe_hw_idx[CAM_ISP_HW_SPLIT_RIGHT];
|
||||
|
||||
*addr++ = hw_mgr_ctx->flags.is_sfe_shdr;
|
||||
*addr++ = hw_mgr_ctx->flags.is_sfe_fs;
|
||||
*addr++ = hw_mgr_ctx->flags.dsp_enabled;
|
||||
*addr++ = hw_mgr_ctx->flags.is_offline;
|
||||
|
||||
return addr;
|
||||
}
|
||||
|
||||
static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args)
|
||||
{
|
||||
int rc = 0;
|
||||
@@ -12056,6 +12109,12 @@ static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args)
|
||||
&isp_hw_cmd_args->u.sof_ts.boot,
|
||||
&isp_hw_cmd_args->u.sof_ts.prev);
|
||||
break;
|
||||
case CAM_ISP_HW_MGR_DUMP_STREAM_INFO:
|
||||
rc = cam_common_user_dump_helper(
|
||||
(void *)(isp_hw_cmd_args->cmd_data),
|
||||
cam_ife_mgr_user_dump_stream_info, ctx,
|
||||
sizeof(int32_t), "ISP_STREAM_INFO_FROM_IFE_HW_MGR:");
|
||||
break;
|
||||
default:
|
||||
CAM_ERR(CAM_ISP, "Invalid HW mgr command:0x%x",
|
||||
hw_cmd_args->cmd_type);
|
||||
|
@@ -365,6 +365,7 @@ enum cam_isp_hw_mgr_command {
|
||||
CAM_ISP_HW_MGR_GET_LAST_CDM_DONE,
|
||||
CAM_ISP_HW_MGR_CMD_PROG_DEFAULT_CFG,
|
||||
CAM_ISP_HW_MGR_GET_SOF_TS,
|
||||
CAM_ISP_HW_MGR_DUMP_STREAM_INFO,
|
||||
CAM_ISP_HW_MGR_CMD_MAX,
|
||||
};
|
||||
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador