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 à :
@@ -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);
|
||||
|
Référencer dans un nouveau ticket
Bloquer un utilisateur