Merge eac3f0b664 on remote branch

Change-Id: I65eaf0c1ca7d8dac9ecd52d9ce1f8c7c01c99375
This commit is contained in:
Linux Build Service Account 2022-01-18 00:05:46 -08:00
commit 1d988caf4a
7 changed files with 39 additions and 17 deletions

View file

@ -4315,7 +4315,7 @@ static struct cam_isp_ctx_irq_ops
__cam_isp_ctx_rdi_only_sof_in_top_state,
__cam_isp_ctx_reg_upd_in_sof,
NULL,
NULL,
__cam_isp_ctx_notify_eof_in_activated_state,
NULL,
},
},
@ -4326,7 +4326,7 @@ static struct cam_isp_ctx_irq_ops
__cam_isp_ctx_rdi_only_sof_in_applied_state,
NULL,
NULL,
NULL,
__cam_isp_ctx_notify_eof_in_activated_state,
__cam_isp_ctx_buf_done_in_applied,
},
},
@ -4337,7 +4337,7 @@ static struct cam_isp_ctx_irq_ops
__cam_isp_ctx_rdi_only_sof_in_top_state,
NULL,
NULL,
NULL,
__cam_isp_ctx_notify_eof_in_activated_state,
__cam_isp_ctx_buf_done_in_epoch,
},
},
@ -4348,7 +4348,7 @@ static struct cam_isp_ctx_irq_ops
__cam_isp_ctx_rdi_only_sof_in_bubble_state,
__cam_isp_ctx_rdi_only_reg_upd_in_bubble_state,
NULL,
NULL,
__cam_isp_ctx_notify_eof_in_activated_state,
__cam_isp_ctx_buf_done_in_bubble,
},
},
@ -4359,7 +4359,7 @@ static struct cam_isp_ctx_irq_ops
__cam_isp_ctx_rdi_only_sof_in_bubble_applied,
__cam_isp_ctx_rdi_only_reg_upd_in_bubble_applied_state,
NULL,
NULL,
__cam_isp_ctx_notify_eof_in_activated_state,
__cam_isp_ctx_buf_done_in_bubble_applied,
},
},

View file

@ -7990,6 +7990,14 @@ static int cam_ife_hw_mgr_handle_hw_eof(
case CAM_ISP_HW_VFE_IN_RDI1:
case CAM_ISP_HW_VFE_IN_RDI2:
case CAM_ISP_HW_VFE_IN_RDI3:
if (!ife_hw_mgr_ctx->is_rdi_only_context)
break;
if (atomic_read(&ife_hw_mgr_ctx->overflow_pending))
break;
ife_hw_irq_eof_cb(ife_hw_mgr_ctx->common.cb_priv,
CAM_ISP_HW_EVENT_EOF, (void *)&eof_done_event_data);
break;
case CAM_ISP_HW_VFE_IN_PDLIB:
case CAM_ISP_HW_VFE_IN_LCR:
break;

View file

@ -5649,6 +5649,12 @@ static int cam_tfe_hw_mgr_handle_hw_eof(
case CAM_ISP_HW_TFE_IN_RDI0:
case CAM_ISP_HW_TFE_IN_RDI1:
case CAM_ISP_HW_TFE_IN_RDI2:
if (!tfe_hw_mgr_ctx->is_rdi_only_context)
break;
if (atomic_read(&tfe_hw_mgr_ctx->overflow_pending))
break;
tfe_hw_irq_eof_cb(tfe_hw_mgr_ctx->common.cb_priv,
CAM_ISP_HW_EVENT_EOF, (void *)&eof_done_event_data);
break;
default:

View file

@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2017-2022, The Linux Foundation. All rights reserved.
*/
#include <linux/uaccess.h>
@ -19,6 +19,7 @@
#include <media/cam_defs.h>
#include <media/cam_ope.h>
#include <media/cam_cpas.h>
#include <linux/math64.h>
#include "cam_sync_api.h"
#include "cam_packet_util.h"
@ -624,8 +625,8 @@ static bool cam_ope_check_req_delay(struct cam_ope_ctx *ctx_data,
ts.tv_nsec);
if (ts_ns - req_time <
((OPE_REQUEST_TIMEOUT -
OPE_REQUEST_TIMEOUT / 10) * 1000000)) {
((ctx_data->req_timer_timeout -
div_u64(ctx_data->req_timer_timeout, 10)) * 1000000)) {
CAM_INFO(CAM_OPE, "ctx: %d, ts_ns : %llu",
ctx_data->ctx_id, ts_ns);
cam_ope_req_timer_reset(ctx_data);
@ -848,7 +849,7 @@ static int cam_ope_start_req_timer(struct cam_ope_ctx *ctx_data)
int rc = 0;
rc = crm_timer_init(&ctx_data->req_watch_dog,
OPE_REQUEST_TIMEOUT, ctx_data, &cam_ope_req_timer_cb);
ctx_data->req_timer_timeout, ctx_data, &cam_ope_req_timer_cb);
if (rc)
CAM_ERR(CAM_OPE, "Failed to start timer");
@ -2626,11 +2627,15 @@ static int cam_ope_mgr_acquire_hw(void *hw_priv, void *hw_acquire_args)
goto end;
}
strlcpy(cdm_acquire->identifier, "ope", sizeof("ope"));
if (ctx->ope_acquire.dev_type == OPE_DEV_TYPE_OPE_RT)
if (ctx->ope_acquire.dev_type == OPE_DEV_TYPE_OPE_RT) {
cdm_acquire->priority = CAM_CDM_BL_FIFO_3;
ctx->req_timer_timeout = OPE_REQUEST_RT_TIMEOUT;
}
else if (ctx->ope_acquire.dev_type ==
OPE_DEV_TYPE_OPE_NRT)
OPE_DEV_TYPE_OPE_NRT) {
cdm_acquire->priority = CAM_CDM_BL_FIFO_0;
ctx->req_timer_timeout = OPE_REQUEST_NRT_TIMEOUT;
}
else
goto free_cdm_acquire;
@ -3300,7 +3305,7 @@ static int cam_ope_mgr_prepare_hw_update(void *hw_priv,
CAM_DBG(CAM_REQ, "req_id= %llu ctx_id= %d lrt=%llu",
packet->header.request_id, ctx_data->ctx_id,
ctx_data->last_req_time);
cam_ope_req_timer_modify(ctx_data, OPE_REQUEST_TIMEOUT);
cam_ope_req_timer_modify(ctx_data, ctx_data->req_timer_timeout);
set_bit(request_idx, ctx_data->bitmap);
mutex_unlock(&ctx_data->ctx_mutex);
@ -3620,7 +3625,7 @@ static int cam_ope_mgr_hw_dump(void *hw_priv, void *hw_dump_args)
cur_ts = ktime_to_timespec64(cur_time);
req_ts = ktime_to_timespec64(ctx_data->req_list[idx]->submit_timestamp);
if (diff < (OPE_REQUEST_TIMEOUT * 1000)) {
if (diff < (ctx_data->req_timer_timeout * 1000)) {
CAM_INFO(CAM_OPE, "No Error req %llu %ld:%06ld %ld:%06ld",
dump_args->request_id,
req_ts.tv_sec,

View file

@ -50,7 +50,7 @@
#define OPE_CMDS OPE_MAX_CMD_BUFS
#define CAM_MAX_IN_RES 8
#define OPE_MAX_CDM_BLS 24
#define OPE_MAX_CDM_BLS 32
#define CAM_OPE_MAX_PER_PATH_VOTES 6
#define CAM_OPE_BW_CONFIG_UNKNOWN 0
@ -60,7 +60,8 @@
#define CLK_HW_MAX 0x1
#define OPE_DEVICE_IDLE_TIMEOUT 400
#define OPE_REQUEST_TIMEOUT 200
#define OPE_REQUEST_RT_TIMEOUT 200
#define OPE_REQUEST_NRT_TIMEOUT 400
/**
* struct cam_ope_clk_bw_request_v2
@ -447,6 +448,7 @@ struct cam_ope_cdm {
* @clk_watch_dog: Clock watchdog
* @clk_watch_dog_reset_counter: Reset counter
* @last_flush_req: last flush req for this ctx
* @req_timer_timeout: req timer timeout value
*/
struct cam_ope_ctx {
void *context_priv;
@ -470,6 +472,7 @@ struct cam_ope_ctx {
uint32_t clk_watch_dog_reset_counter;
uint64_t last_flush_req;
bool pf_mid_found;
uint64_t req_timer_timeout;
};
/**

View file

@ -4542,7 +4542,7 @@ int cam_req_mgr_dump_request(struct cam_dump_req_cmd *dump_req)
link = (struct cam_req_mgr_core_link *)
cam_get_device_priv(dump_req->link_hdl);
if (!link) {
if (!link || link->link_hdl != dump_req->link_hdl) {
CAM_DBG(CAM_CRM, "link ptr NULL %x", dump_req->link_hdl);
rc = -EINVAL;
goto end;

View file

@ -73,7 +73,7 @@
#define OPE_MAX_IO_BUFS (OPE_OUT_RES_MAX + OPE_IN_RES_MAX)
#define OPE_MAX_PASS 1
#define OPE_MAX_PLANES 2
#define OPE_MAX_STRIPES 48
#define OPE_MAX_STRIPES 64
#define OPE_MAX_BATCH_SIZE 16
/**