Merge "msm: camera: tfe: Add support last consumed address for tfe" into camera-kernel.lnx.4.0

This commit is contained in:
Camera Software Integration 2020-09-25 16:53:01 -07:00 • committed by Gerrit - the friendly Code Review server
commit e27a2769e6
4 changed files with 19 additions and 27 deletions

View file

@ -4534,6 +4534,9 @@ static int __cam_isp_ctx_acquire_hw_v1(struct cam_context *ctx,
goto free_res;
}
ctx_isp->support_consumed_addr =
param.support_consumed_addr;
/* Query the context has rdi only resource */
hw_cmd_args.ctxt_to_hw_map = param.ctxt_to_hw_map;
hw_cmd_args.cmd_type = CAM_HW_MGR_CMD_INTERNAL;

View file

@ -1775,32 +1775,6 @@ void cam_tfe_cam_cdm_callback(uint32_t handle, void *userdata,
}
}
static bool cam_tfe_mgr_is_consumed_addr_supported(
struct cam_tfe_hw_mgr_ctx *ctx)
{
bool support_consumed_addr = false;
struct cam_isp_hw_mgr_res *isp_hw_res = NULL;
struct cam_hw_intf *hw_intf = NULL;
isp_hw_res = &ctx->res_list_tfe_out[0];
if (!isp_hw_res || !isp_hw_res->hw_res[0]) {
CAM_ERR(CAM_ISP, "Invalid ife out res.");
goto end;
}
hw_intf = isp_hw_res->hw_res[0]->hw_intf;
if (hw_intf && hw_intf->hw_ops.process_cmd) {
hw_intf->hw_ops.process_cmd(hw_intf->hw_priv,
CAM_ISP_HW_CMD_IS_CONSUMED_ADDR_SUPPORT,
&support_consumed_addr,
sizeof(support_consumed_addr));
}
end:
return support_consumed_addr;
}
/* entry function: acquire_hw */
static int cam_tfe_mgr_acquire_hw(void *hw_mgr_priv, void *acquire_hw_args)
{
@ -2011,7 +1985,7 @@ static int cam_tfe_mgr_acquire_hw(void *hw_mgr_priv, void *acquire_hw_args)
tfe_ctx->num_reg_dump_buf = 0;
acquire_args->support_consumed_addr =
cam_tfe_mgr_is_consumed_addr_supported(tfe_ctx);
g_tfe_hw_mgr.support_consumed_addr;
cam_tfe_hw_mgr_put_ctx(&tfe_hw_mgr->used_ctx_list, &tfe_ctx);
@ -5361,6 +5335,7 @@ static int cam_tfe_hw_mgr_handle_hw_buf_done(
buf_done_event_data.num_handles = 1;
buf_done_event_data.resource_handle[0] = event_info->res_id;
buf_done_event_data.last_consumed_addr[0] = event_info->reg_val;
if (atomic_read(&tfe_hw_mgr_ctx->overflow_pending))
return 0;
@ -5560,6 +5535,7 @@ int cam_tfe_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl)
struct cam_iommu_handle cdm_handles;
struct cam_tfe_hw_mgr_ctx *ctx_pool;
struct cam_isp_hw_mgr_res *res_list_tfe_out;
bool support_consumed_addr = false;
CAM_DBG(CAM_ISP, "Enter");
@ -5576,10 +5552,19 @@ int cam_tfe_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl)
for (i = 0, j = 0; i < CAM_TFE_HW_NUM_MAX; i++) {
rc = cam_tfe_hw_init(&g_tfe_hw_mgr.tfe_devices[i], i);
if (!rc) {
struct cam_hw_intf *tfe_device =
g_tfe_hw_mgr.tfe_devices[i]->hw_intf;
struct cam_hw_info *tfe_hw = (struct cam_hw_info *)
g_tfe_hw_mgr.tfe_devices[i]->hw_intf->hw_priv;
struct cam_hw_soc_info *soc_info = &tfe_hw->soc_info;
if (j == 0)
tfe_device->hw_ops.process_cmd(
tfe_hw,
CAM_ISP_HW_CMD_IS_CONSUMED_ADDR_SUPPORT,
&support_consumed_addr,
sizeof(support_consumed_addr));
j++;
g_tfe_hw_mgr.cdm_reg_map[i] = &soc_info->reg_map[0];
@ -5596,6 +5581,7 @@ int cam_tfe_hw_mgr_init(struct cam_hw_mgr_intf *hw_mgr_intf, int *iommu_hdl)
return -EINVAL;
}
g_tfe_hw_mgr.support_consumed_addr = support_consumed_addr;
/* fill csid hw intf information */
for (i = 0, j = 0; i < CAM_TFE_CSID_HW_NUM_MAX; i++) {
rc = cam_tfe_csid_hw_init(&g_tfe_hw_mgr.csid_devices[i], i);

View file

@ -147,6 +147,7 @@ struct cam_tfe_hw_mgr_ctx {
* @tfe_dev_caps tfe device capability per core
* @work q work queue for TFE hw manager
* @debug_cfg debug configuration
* @support_consumed_addr indicate whether hw supports last consumed address
*/
struct cam_tfe_hw_mgr {
struct cam_isp_hw_mgr mgr_common;
@ -165,6 +166,7 @@ struct cam_tfe_hw_mgr {
struct cam_tfe_hw_get_hw_cap tfe_dev_caps[CAM_TFE_HW_NUM_MAX];
struct cam_req_mgr_core_workq *workq;
struct cam_tfe_hw_mgr_debug debug_cfg;
bool support_consumed_addr;
};
/**

View file

@ -1947,6 +1947,7 @@ static int cam_tfe_bus_update_wm(void *priv, void *cmd_args,
update_buf->wm_update->image_buf[i]);
CAM_DBG(CAM_ISP, "WM %d image address 0x%x",
wm_data->index, reg_val_pair[j-1]);
update_buf->wm_update->image_buf_offset[i] = 0;
CAM_TFE_ADD_REG_VAL_PAIR(reg_val_pair, j,
wm_data->hw_regs->frame_incr, frame_inc);