msm: camera: common: Merge camera-kernel.3.1 changes in camera-kernel.4.0

msm: camera: cdm: Fix dangling pointer issue
msm: camera: cdm: change work record to atomic variable
msm: camera: utils: Adding device type to track device handles
msm: camera: tfe: Reduce stack footprint during bw vote
msm: camera: req_mgr: Thread switch delay detection mechanisms
msm: camera: cdm: Avoid submitting BL if FIFO is full
msm: camera: tfe: check cdm hang in the tfe config timeout
msm: camera: req_mgr: Delay detection mechanism
msm: camera: cdm: Debug info in case of cdm page fault
msm: camera: isp: Max context reduction for TFE in isp driver
msm: camera: ope: Maintain current clock value during acquire
msm: camera: req_mgr: Limit CAM_ERR log in case of no empty task
msm: camera: cdm: Decrement write-count only after Bl commit
msm: camera: isp: Added CSID recovery mechanism.

CRs-Fixed: 2792394
Change-Id: I1c7a903ae15b572acf3f6318cda7394cb6549c8d
Signed-off-by: Tejas Prajapati <tpraja@codeaurora.org>
Cette révision appartient à :
Tejas Prajapati
2020-10-07 12:54:08 +05:30
Parent fabd1f7b0a
révision 4574450a12
46 fichiers modifiés avec 1134 ajouts et 256 suppressions

Voir le fichier

@@ -689,25 +689,53 @@ int cam_cdm_util_cmd_buf_write(void __iomem **current_device_base,
return ret;
}
static long cam_cdm_util_dump_dmi_cmd(uint32_t *cmd_buf_addr)
static long cam_cdm_util_dump_dmi_cmd(uint32_t *cmd_buf_addr,
uint32_t *cmd_buf_addr_end)
{
long ret = 0;
struct cdm_dmi_cmd *p_dmi_cmd;
uint32_t *temp_ptr = cmd_buf_addr;
p_dmi_cmd = (struct cdm_dmi_cmd *)cmd_buf_addr;
temp_ptr += CDMCmdHeaderSizes[CAM_CDM_CMD_DMI];
ret += CDMCmdHeaderSizes[CAM_CDM_CMD_DMI];
CAM_INFO(CAM_CDM, "DMI");
if (temp_ptr > cmd_buf_addr_end)
CAM_ERR(CAM_CDM,
"Invalid cmd start addr:%pK end addr:%pK",
temp_ptr, cmd_buf_addr_end);
CAM_INFO(CAM_CDM,
"DMI: LEN: %u DMIAddr: 0x%X DMISel: 0x%X LUT_addr: 0x%X",
p_dmi_cmd->length, p_dmi_cmd->DMIAddr,
p_dmi_cmd->DMISel, p_dmi_cmd->addr);
return ret;
}
static long cam_cdm_util_dump_buff_indirect(uint32_t *cmd_buf_addr)
static long cam_cdm_util_dump_buff_indirect(uint32_t *cmd_buf_addr,
uint32_t *cmd_buf_addr_end)
{
long ret = 0;
struct cdm_indirect_cmd *p_indirect_cmd;
uint32_t *temp_ptr = cmd_buf_addr;
p_indirect_cmd = (struct cdm_indirect_cmd *)cmd_buf_addr;
temp_ptr += CDMCmdHeaderSizes[CAM_CDM_CMD_BUFF_INDIRECT];
ret += CDMCmdHeaderSizes[CAM_CDM_CMD_BUFF_INDIRECT];
CAM_INFO(CAM_CDM, "Buff Indirect");
if (temp_ptr > cmd_buf_addr_end)
CAM_ERR(CAM_CDM,
"Invalid cmd start addr:%pK end addr:%pK",
temp_ptr, cmd_buf_addr_end);
CAM_INFO(CAM_CDM,
"Buff Indirect: LEN: %u addr: 0x%X",
p_indirect_cmd->length, p_indirect_cmd->addr);
return ret;
}
static long cam_cdm_util_dump_reg_cont_cmd(uint32_t *cmd_buf_addr)
static long cam_cdm_util_dump_reg_cont_cmd(uint32_t *cmd_buf_addr,
uint32_t *cmd_buf_addr_end)
{
long ret = 0;
struct cdm_regcontinuous_cmd *p_regcont_cmd;
@@ -722,6 +750,12 @@ static long cam_cdm_util_dump_reg_cont_cmd(uint32_t *cmd_buf_addr)
p_regcont_cmd->count, p_regcont_cmd->offset);
for (i = 0; i < p_regcont_cmd->count; i++) {
if (temp_ptr > cmd_buf_addr_end) {
CAM_ERR(CAM_CDM,
"Invalid cmd(%d) start addr:%pK end addr:%pK",
i, temp_ptr, cmd_buf_addr_end);
break;
}
CAM_INFO(CAM_CDM, "DATA_%d: 0x%X", i,
*temp_ptr);
temp_ptr++;
@@ -731,7 +765,8 @@ static long cam_cdm_util_dump_reg_cont_cmd(uint32_t *cmd_buf_addr)
return ret;
}
static long cam_cdm_util_dump_reg_random_cmd(uint32_t *cmd_buf_addr)
static long cam_cdm_util_dump_reg_random_cmd(uint32_t *cmd_buf_addr,
uint32_t *cmd_buf_addr_end)
{
struct cdm_regrandom_cmd *p_regrand_cmd;
uint32_t *temp_ptr = cmd_buf_addr;
@@ -746,6 +781,12 @@ static long cam_cdm_util_dump_reg_random_cmd(uint32_t *cmd_buf_addr)
p_regrand_cmd->count);
for (i = 0; i < p_regrand_cmd->count; i++) {
if (temp_ptr > cmd_buf_addr_end) {
CAM_ERR(CAM_CDM,
"Invalid cmd(%d) start addr:%pK end addr:%pK",
i, temp_ptr, cmd_buf_addr_end);
break;
}
CAM_INFO(CAM_CDM, "OFFSET_%d: 0x%X DATA_%d: 0x%X",
i, *temp_ptr & CAM_CDM_REG_OFFSET_MASK, i,
*(temp_ptr + 1));
@@ -778,15 +819,22 @@ static long cam_cdm_util_dump_wait_event_cmd(uint32_t *cmd_buf_addr)
return ret;
}
static long cam_cdm_util_dump_change_base_cmd(uint32_t *cmd_buf_addr)
static long cam_cdm_util_dump_change_base_cmd(uint32_t *cmd_buf_addr,
uint32_t *cmd_buf_addr_end)
{
long ret = 0;
struct cdm_changebase_cmd *p_cbase_cmd;
uint32_t *temp_ptr = cmd_buf_addr;
p_cbase_cmd = (struct cdm_changebase_cmd *)temp_ptr;
temp_ptr += CDMCmdHeaderSizes[CAM_CDM_CMD_CHANGE_BASE];
ret += CDMCmdHeaderSizes[CAM_CDM_CMD_CHANGE_BASE];
if (temp_ptr > cmd_buf_addr_end)
CAM_ERR(CAM_CDM,
"Invalid cmd start addr:%pK end addr:%pK",
temp_ptr, cmd_buf_addr_end);
CAM_INFO(CAM_CDM, "CHANGE_BASE: 0x%X",
p_cbase_cmd->base);
@@ -819,6 +867,7 @@ void cam_cdm_util_dump_cmd_buf(
uint32_t *cmd_buf_start, uint32_t *cmd_buf_end)
{
uint32_t *buf_now = cmd_buf_start;
uint32_t *buf_end = cmd_buf_end;
uint32_t cmd = 0;
if (!cmd_buf_start || !cmd_buf_end) {
@@ -834,16 +883,20 @@ void cam_cdm_util_dump_cmd_buf(
case CAM_CDM_CMD_DMI:
case CAM_CDM_CMD_DMI_32:
case CAM_CDM_CMD_DMI_64:
buf_now += cam_cdm_util_dump_dmi_cmd(buf_now);
buf_now += cam_cdm_util_dump_dmi_cmd(buf_now,
buf_end);
break;
case CAM_CDM_CMD_REG_CONT:
buf_now += cam_cdm_util_dump_reg_cont_cmd(buf_now);
buf_now += cam_cdm_util_dump_reg_cont_cmd(buf_now,
buf_end);
break;
case CAM_CDM_CMD_REG_RANDOM:
buf_now += cam_cdm_util_dump_reg_random_cmd(buf_now);
buf_now += cam_cdm_util_dump_reg_random_cmd(buf_now,
buf_end);
break;
case CAM_CDM_CMD_BUFF_INDIRECT:
buf_now += cam_cdm_util_dump_buff_indirect(buf_now);
buf_now += cam_cdm_util_dump_buff_indirect(buf_now,
buf_end);
break;
case CAM_CDM_CMD_GEN_IRQ:
buf_now += cam_cdm_util_dump_gen_irq_cmd(buf_now);
@@ -852,7 +905,8 @@ void cam_cdm_util_dump_cmd_buf(
buf_now += cam_cdm_util_dump_wait_event_cmd(buf_now);
break;
case CAM_CDM_CMD_CHANGE_BASE:
buf_now += cam_cdm_util_dump_change_base_cmd(buf_now);
buf_now += cam_cdm_util_dump_change_base_cmd(buf_now,
buf_end);
break;
case CAM_CDM_CMD_PERF_CTRL:
buf_now += cam_cdm_util_dump_perf_ctrl_cmd(buf_now);