Loading drivers/cam_ope/ope_hw_mgr/cam_ope_hw_mgr.c +29 −2 Original line number Diff line number Diff line Loading @@ -125,6 +125,20 @@ static int cam_ope_mgr_reset_hw(void) return rc; } static void cam_ope_free_io_config(struct cam_ope_request *req) { int i, j; for (i = 0; i < OPE_MAX_BATCH_SIZE; i++) { for (j = 0; j < OPE_MAX_IO_BUFS; j++) { if (req->io_buf[i][j]) { kzfree(req->io_buf[i][j]); req->io_buf[i][j] = NULL; } } } } static void cam_ope_device_timer_stop(struct cam_ope_hw_mgr *hw_mgr) { if (hw_mgr->clk_info.watch_dog) { Loading Loading @@ -1140,6 +1154,7 @@ static void cam_ope_ctx_cdm_callback(uint32_t handle, void *userdata, ope_req->request_id = 0; kzfree(ctx->req_list[cookie]->cdm_cmd); ctx->req_list[cookie]->cdm_cmd = NULL; cam_ope_free_io_config(ctx->req_list[cookie]); kzfree(ctx->req_list[cookie]); ctx->req_list[cookie] = NULL; clear_bit(cookie, ctx->bitmap); Loading Loading @@ -1273,7 +1288,7 @@ static int cam_ope_mgr_process_io_cfg(struct cam_ope_hw_mgr *hw_mgr, for (i = 0; i < ope_request->num_batch; i++) { for (l = 0; l < ope_request->num_io_bufs[i]; l++) { io_buf = &ope_request->io_buf[i][l]; io_buf = ope_request->io_buf[i][l]; if (io_buf->direction == CAM_BUF_INPUT) { if (io_buf->fence != -1) { sync_in_obj[j++] = io_buf->fence; Loading Loading @@ -1433,7 +1448,15 @@ static int cam_ope_mgr_process_cmd_io_buf_req(struct cam_ope_hw_mgr *hw_mgr, for (j = 0; j < in_frame_set->num_io_bufs; j++) { in_io_buf = &in_frame_set->io_buf[j]; io_buf = &ope_request->io_buf[i][j]; ope_request->io_buf[i][j] = kzalloc(sizeof(struct ope_io_buf), GFP_KERNEL); if (!ope_request->io_buf[i][j]) { CAM_ERR(CAM_OPE, "IO config allocation failure"); cam_ope_free_io_config(ope_request); return -ENOMEM; } io_buf = ope_request->io_buf[i][j]; if (in_io_buf->num_planes > OPE_MAX_PLANES) { CAM_ERR(CAM_OPE, "wrong number of planes: %u", in_io_buf->num_planes); Loading Loading @@ -2286,6 +2309,7 @@ static int cam_ope_mgr_release_ctx(struct cam_ope_hw_mgr *hw_mgr, int ctx_id) kzfree(hw_mgr->ctx[ctx_id].req_list[i]->cdm_cmd); hw_mgr->ctx[ctx_id].req_list[i]->cdm_cmd = NULL; } cam_ope_free_io_config(hw_mgr->ctx[ctx_id].req_list[i]); kzfree(hw_mgr->ctx[ctx_id].req_list[i]); hw_mgr->ctx[ctx_id].req_list[i] = NULL; clear_bit(i, hw_mgr->ctx[ctx_id].bitmap); Loading Loading @@ -2638,6 +2662,7 @@ static int cam_ope_mgr_handle_config_err( ope_req->request_id = 0; kzfree(ctx_data->req_list[req_idx]->cdm_cmd); ctx_data->req_list[req_idx]->cdm_cmd = NULL; cam_ope_free_io_config(ctx_data->req_list[req_idx]); kzfree(ctx_data->req_list[req_idx]); ctx_data->req_list[req_idx] = NULL; clear_bit(req_idx, ctx_data->bitmap); Loading Loading @@ -2793,6 +2818,7 @@ static int cam_ope_mgr_flush_req(struct cam_ope_ctx *ctx_data, ctx_data->req_list[idx]->request_id = 0; kzfree(ctx_data->req_list[idx]->cdm_cmd); ctx_data->req_list[idx]->cdm_cmd = NULL; cam_ope_free_io_config(ctx_data->req_list[idx]); kzfree(ctx_data->req_list[idx]); ctx_data->req_list[idx] = NULL; clear_bit(idx, ctx_data->bitmap); Loading Loading @@ -2825,6 +2851,7 @@ static int cam_ope_mgr_flush_all(struct cam_ope_ctx *ctx_data, ctx_data->req_list[i]->request_id = 0; kzfree(ctx_data->req_list[i]->cdm_cmd); ctx_data->req_list[i]->cdm_cmd = NULL; cam_ope_free_io_config(ctx_data->req_list[i]); kzfree(ctx_data->req_list[i]); ctx_data->req_list[i] = NULL; clear_bit(i, ctx_data->bitmap); Loading drivers/cam_ope/ope_hw_mgr/cam_ope_hw_mgr.h +1 −1 Original line number Diff line number Diff line Loading @@ -398,7 +398,7 @@ struct cam_ope_request { uint8_t num_stripe_cmd_bufs[OPE_MAX_BATCH_SIZE][OPE_MAX_STRIPES]; struct ope_kmd_buffer ope_kmd_buf; struct ope_debug_buffer ope_debug_buf; struct ope_io_buf io_buf[OPE_MAX_BATCH_SIZE][OPE_MAX_IO_BUFS]; struct ope_io_buf *io_buf[OPE_MAX_BATCH_SIZE][OPE_MAX_IO_BUFS]; struct cam_cdm_bl_request *cdm_cmd; struct cam_ope_clk_bw_request clk_info; struct cam_ope_clk_bw_req_internal_v2 clk_info_v2; Loading drivers/cam_ope/ope_hw_mgr/ope_hw/bus_rd/ope_bus_rd.c +3 −3 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ static int cam_ope_bus_is_rm_enabled( } for (i = 0; i < ope_request->num_io_bufs[batch_idx]; i++) { io_buf = &ope_request->io_buf[batch_idx][i]; io_buf = ope_request->io_buf[batch_idx][i]; if (io_buf->direction != CAM_BUF_INPUT) continue; in_port_to_rm = Loading Loading @@ -171,7 +171,7 @@ static uint32_t *cam_ope_bus_rd_update(struct ope_hw *ope_hw_info, rd_reg = ope_hw_info->bus_rd_reg; rd_reg_val = ope_hw_info->bus_rd_reg_val; io_buf = &ope_request->io_buf[batch_idx][io_idx]; io_buf = ope_request->io_buf[batch_idx][io_idx]; CAM_DBG(CAM_OPE, "batch:%d iobuf:%d direction:%d", batch_idx, io_idx, io_buf->direction); Loading Loading @@ -434,7 +434,7 @@ static int cam_ope_bus_rd_prepare(struct ope_hw *ope_hw_info, for (i = 0; i < ope_request->num_batch; i++) { for (j = 0; j < ope_request->num_io_bufs[i]; j++) { io_buf = &ope_request->io_buf[i][j]; io_buf = ope_request->io_buf[i][j]; if (io_buf->direction != CAM_BUF_INPUT) continue; Loading drivers/cam_ope/ope_hw_mgr/ope_hw/bus_wr/ope_bus_wr.c +3 −3 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ static int cam_ope_bus_en_port_idx( } for (i = 0; i < ope_request->num_io_bufs[batch_idx]; i++) { io_buf = &ope_request->io_buf[batch_idx][i]; io_buf = ope_request->io_buf[batch_idx][i]; if (io_buf->direction != CAM_BUF_OUTPUT) continue; if (io_buf->resource_type == output_port_id) Loading Loading @@ -217,7 +217,7 @@ static uint32_t *cam_ope_bus_wr_update(struct ope_hw *ope_hw_info, kmd_buf, req_idx, ope_request->request_id, prepare->kmd_buf_offset); io_buf = &ope_request->io_buf[batch_idx][io_idx]; io_buf = ope_request->io_buf[batch_idx][io_idx]; CAM_DBG(CAM_OPE, "batch = %d io buf num = %d dir = %d", batch_idx, io_idx, io_buf->direction); Loading Loading @@ -483,7 +483,7 @@ static int cam_ope_bus_wr_prepare(struct ope_hw *ope_hw_info, for (i = 0; i < ope_request->num_batch; i++) { for (j = 0; j < ope_request->num_io_bufs[i]; j++) { io_buf = &ope_request->io_buf[i][j]; io_buf = ope_request->io_buf[i][j]; CAM_DBG(CAM_OPE, "batch = %d io buf num = %d dir = %d", i, j, io_buf->direction); if (io_buf->direction != CAM_BUF_OUTPUT) Loading Loading
drivers/cam_ope/ope_hw_mgr/cam_ope_hw_mgr.c +29 −2 Original line number Diff line number Diff line Loading @@ -125,6 +125,20 @@ static int cam_ope_mgr_reset_hw(void) return rc; } static void cam_ope_free_io_config(struct cam_ope_request *req) { int i, j; for (i = 0; i < OPE_MAX_BATCH_SIZE; i++) { for (j = 0; j < OPE_MAX_IO_BUFS; j++) { if (req->io_buf[i][j]) { kzfree(req->io_buf[i][j]); req->io_buf[i][j] = NULL; } } } } static void cam_ope_device_timer_stop(struct cam_ope_hw_mgr *hw_mgr) { if (hw_mgr->clk_info.watch_dog) { Loading Loading @@ -1140,6 +1154,7 @@ static void cam_ope_ctx_cdm_callback(uint32_t handle, void *userdata, ope_req->request_id = 0; kzfree(ctx->req_list[cookie]->cdm_cmd); ctx->req_list[cookie]->cdm_cmd = NULL; cam_ope_free_io_config(ctx->req_list[cookie]); kzfree(ctx->req_list[cookie]); ctx->req_list[cookie] = NULL; clear_bit(cookie, ctx->bitmap); Loading Loading @@ -1273,7 +1288,7 @@ static int cam_ope_mgr_process_io_cfg(struct cam_ope_hw_mgr *hw_mgr, for (i = 0; i < ope_request->num_batch; i++) { for (l = 0; l < ope_request->num_io_bufs[i]; l++) { io_buf = &ope_request->io_buf[i][l]; io_buf = ope_request->io_buf[i][l]; if (io_buf->direction == CAM_BUF_INPUT) { if (io_buf->fence != -1) { sync_in_obj[j++] = io_buf->fence; Loading Loading @@ -1433,7 +1448,15 @@ static int cam_ope_mgr_process_cmd_io_buf_req(struct cam_ope_hw_mgr *hw_mgr, for (j = 0; j < in_frame_set->num_io_bufs; j++) { in_io_buf = &in_frame_set->io_buf[j]; io_buf = &ope_request->io_buf[i][j]; ope_request->io_buf[i][j] = kzalloc(sizeof(struct ope_io_buf), GFP_KERNEL); if (!ope_request->io_buf[i][j]) { CAM_ERR(CAM_OPE, "IO config allocation failure"); cam_ope_free_io_config(ope_request); return -ENOMEM; } io_buf = ope_request->io_buf[i][j]; if (in_io_buf->num_planes > OPE_MAX_PLANES) { CAM_ERR(CAM_OPE, "wrong number of planes: %u", in_io_buf->num_planes); Loading Loading @@ -2286,6 +2309,7 @@ static int cam_ope_mgr_release_ctx(struct cam_ope_hw_mgr *hw_mgr, int ctx_id) kzfree(hw_mgr->ctx[ctx_id].req_list[i]->cdm_cmd); hw_mgr->ctx[ctx_id].req_list[i]->cdm_cmd = NULL; } cam_ope_free_io_config(hw_mgr->ctx[ctx_id].req_list[i]); kzfree(hw_mgr->ctx[ctx_id].req_list[i]); hw_mgr->ctx[ctx_id].req_list[i] = NULL; clear_bit(i, hw_mgr->ctx[ctx_id].bitmap); Loading Loading @@ -2638,6 +2662,7 @@ static int cam_ope_mgr_handle_config_err( ope_req->request_id = 0; kzfree(ctx_data->req_list[req_idx]->cdm_cmd); ctx_data->req_list[req_idx]->cdm_cmd = NULL; cam_ope_free_io_config(ctx_data->req_list[req_idx]); kzfree(ctx_data->req_list[req_idx]); ctx_data->req_list[req_idx] = NULL; clear_bit(req_idx, ctx_data->bitmap); Loading Loading @@ -2793,6 +2818,7 @@ static int cam_ope_mgr_flush_req(struct cam_ope_ctx *ctx_data, ctx_data->req_list[idx]->request_id = 0; kzfree(ctx_data->req_list[idx]->cdm_cmd); ctx_data->req_list[idx]->cdm_cmd = NULL; cam_ope_free_io_config(ctx_data->req_list[idx]); kzfree(ctx_data->req_list[idx]); ctx_data->req_list[idx] = NULL; clear_bit(idx, ctx_data->bitmap); Loading Loading @@ -2825,6 +2851,7 @@ static int cam_ope_mgr_flush_all(struct cam_ope_ctx *ctx_data, ctx_data->req_list[i]->request_id = 0; kzfree(ctx_data->req_list[i]->cdm_cmd); ctx_data->req_list[i]->cdm_cmd = NULL; cam_ope_free_io_config(ctx_data->req_list[i]); kzfree(ctx_data->req_list[i]); ctx_data->req_list[i] = NULL; clear_bit(i, ctx_data->bitmap); Loading
drivers/cam_ope/ope_hw_mgr/cam_ope_hw_mgr.h +1 −1 Original line number Diff line number Diff line Loading @@ -398,7 +398,7 @@ struct cam_ope_request { uint8_t num_stripe_cmd_bufs[OPE_MAX_BATCH_SIZE][OPE_MAX_STRIPES]; struct ope_kmd_buffer ope_kmd_buf; struct ope_debug_buffer ope_debug_buf; struct ope_io_buf io_buf[OPE_MAX_BATCH_SIZE][OPE_MAX_IO_BUFS]; struct ope_io_buf *io_buf[OPE_MAX_BATCH_SIZE][OPE_MAX_IO_BUFS]; struct cam_cdm_bl_request *cdm_cmd; struct cam_ope_clk_bw_request clk_info; struct cam_ope_clk_bw_req_internal_v2 clk_info_v2; Loading
drivers/cam_ope/ope_hw_mgr/ope_hw/bus_rd/ope_bus_rd.c +3 −3 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ static int cam_ope_bus_is_rm_enabled( } for (i = 0; i < ope_request->num_io_bufs[batch_idx]; i++) { io_buf = &ope_request->io_buf[batch_idx][i]; io_buf = ope_request->io_buf[batch_idx][i]; if (io_buf->direction != CAM_BUF_INPUT) continue; in_port_to_rm = Loading Loading @@ -171,7 +171,7 @@ static uint32_t *cam_ope_bus_rd_update(struct ope_hw *ope_hw_info, rd_reg = ope_hw_info->bus_rd_reg; rd_reg_val = ope_hw_info->bus_rd_reg_val; io_buf = &ope_request->io_buf[batch_idx][io_idx]; io_buf = ope_request->io_buf[batch_idx][io_idx]; CAM_DBG(CAM_OPE, "batch:%d iobuf:%d direction:%d", batch_idx, io_idx, io_buf->direction); Loading Loading @@ -434,7 +434,7 @@ static int cam_ope_bus_rd_prepare(struct ope_hw *ope_hw_info, for (i = 0; i < ope_request->num_batch; i++) { for (j = 0; j < ope_request->num_io_bufs[i]; j++) { io_buf = &ope_request->io_buf[i][j]; io_buf = ope_request->io_buf[i][j]; if (io_buf->direction != CAM_BUF_INPUT) continue; Loading
drivers/cam_ope/ope_hw_mgr/ope_hw/bus_wr/ope_bus_wr.c +3 −3 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ static int cam_ope_bus_en_port_idx( } for (i = 0; i < ope_request->num_io_bufs[batch_idx]; i++) { io_buf = &ope_request->io_buf[batch_idx][i]; io_buf = ope_request->io_buf[batch_idx][i]; if (io_buf->direction != CAM_BUF_OUTPUT) continue; if (io_buf->resource_type == output_port_id) Loading Loading @@ -217,7 +217,7 @@ static uint32_t *cam_ope_bus_wr_update(struct ope_hw *ope_hw_info, kmd_buf, req_idx, ope_request->request_id, prepare->kmd_buf_offset); io_buf = &ope_request->io_buf[batch_idx][io_idx]; io_buf = ope_request->io_buf[batch_idx][io_idx]; CAM_DBG(CAM_OPE, "batch = %d io buf num = %d dir = %d", batch_idx, io_idx, io_buf->direction); Loading Loading @@ -483,7 +483,7 @@ static int cam_ope_bus_wr_prepare(struct ope_hw *ope_hw_info, for (i = 0; i < ope_request->num_batch; i++) { for (j = 0; j < ope_request->num_io_bufs[i]; j++) { io_buf = &ope_request->io_buf[i][j]; io_buf = ope_request->io_buf[i][j]; CAM_DBG(CAM_OPE, "batch = %d io buf num = %d dir = %d", i, j, io_buf->direction); if (io_buf->direction != CAM_BUF_OUTPUT) Loading