Merge "msm: camera: isp: Allow lite IPP to use RDI state machine" into camera-kernel.lnx.5.0

This commit is contained in:
Haritha Chintalapati
2021-02-08 13:53:34 -08:00
committed by Gerrit - the friendly Code Review server
3 changed files with 28 additions and 3 deletions

View File

@@ -3452,8 +3452,11 @@ static int cam_ife_hw_mgr_preprocess_port(
for (i = 0; i < in_port->num_out_res; i++) {
out_port = &in_port->data[i];
if (cam_ife_hw_mgr_is_rdi_res(out_port->res_type) ||
cam_ife_hw_mgr_is_sfe_rdi_res(out_port->res_type))
if (cam_ife_hw_mgr_is_rdi_res(out_port->res_type)) {
in_port->rdi_count++;
in_port->lite_path_count++;
}
else if (cam_ife_hw_mgr_is_sfe_rdi_res(out_port->res_type))
in_port->rdi_count++;
else if (out_port->res_type == CAM_ISP_IFE_OUT_RES_2PD)
in_port->ppp_count++;
@@ -3463,6 +3466,17 @@ static int cam_ife_hw_mgr_preprocess_port(
CAM_DBG(CAM_ISP, "out_res_type %d",
out_port->res_type);
in_port->ipp_count++;
if (in_port->can_use_lite) {
switch(out_port->res_type) {
case CAM_ISP_IFE_LITE_OUT_RES_PREPROCESS_RAW:
case CAM_ISP_IFE_LITE_OUT_RES_STATS_BG:
in_port->lite_path_count++;
break;
default:
CAM_WARN(CAM_ISP, "Output port 0x%x cannot use lite",
out_port->res_type);
}
}
}
}
@@ -4395,6 +4409,7 @@ static int cam_ife_mgr_acquire_hw(void *hw_mgr_priv, void *acquire_hw_args)
uint32_t total_pix_port = 0;
uint32_t total_rdi_port = 0;
uint32_t total_pd_port = 0;
uint32_t total_lite_port = 0;
struct cam_isp_acquire_hw_info *acquire_hw_info = NULL;
uint32_t input_size = 0;
@@ -4461,6 +4476,7 @@ static int cam_ife_mgr_acquire_hw(void *hw_mgr_priv, void *acquire_hw_args)
in_port[i].lcr_count;
total_rdi_port += in_port[i].rdi_count;
total_pd_port += in_port[i].ppp_count;
total_lite_port += in_port[i].lite_path_count;
}
/* Check whether context has only RDI resource */
@@ -4469,6 +4485,11 @@ static int cam_ife_mgr_acquire_hw(void *hw_mgr_priv, void *acquire_hw_args)
CAM_DBG(CAM_ISP, "RDI only context");
}
/* Check if all output ports are of lite */
if (total_lite_port == total_pix_port + total_rdi_port) {
ife_ctx->is_lite_context = 1;
}
/* acquire HW resources */
for (i = 0; i < acquire_hw_info->num_inputs; i++) {
CAM_DBG(CAM_ISP, "in_res_type %x", in_port[i].res_type);
@@ -9597,7 +9618,7 @@ static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args)
else if (ctx->is_fe_enabled && !ctx->is_offline &&
ctx->ctx_type != CAM_IFE_CTX_TYPE_SFE)
isp_hw_cmd_args->u.ctx_type = CAM_ISP_CTX_FS2;
else if (ctx->is_rdi_only_context)
else if (ctx->is_rdi_only_context || ctx->is_lite_context)
isp_hw_cmd_args->u.ctx_type = CAM_ISP_CTX_RDI;
else
isp_hw_cmd_args->u.ctx_type = CAM_ISP_CTX_PIX;

View File

@@ -143,6 +143,8 @@ struct cam_sfe_scratch_buf_cfg {
* registers
* @last_cdm_done_req: Last cdm done request
* @is_rdi_only_context flag to specify the context has only rdi resource
* @is_lite_context flag to specify the context has only uses lite
* resources
* @config_done_complete indicator for configuration complete
* @reg_dump_buf_desc: cmd buffer descriptors for reg dump
* @num_reg_dump_buf: Count of descriptors in reg_dump_buf_desc
@@ -204,6 +206,7 @@ struct cam_ife_hw_mgr_ctx {
atomic_t cdm_done;
uint64_t last_cdm_done_req;
uint32_t is_rdi_only_context;
uint32_t is_lite_context;
struct completion config_done_complete;
uint32_t hw_version;
struct cam_cmd_buf_desc reg_dump_buf_desc[

View File

@@ -130,6 +130,7 @@ struct cam_isp_in_port_generic_info {
uint32_t udi_count;
uint32_t lcr_count;
uint32_t ife_rd_count;
uint32_t lite_path_count;
uint32_t sfe_in_path_type;
uint32_t sfe_ife_enable;
uint32_t secure_mode;