msm: camera: isp: Get packet opcode from hw manager
While processing the user space submitted isp packet, isp context need to know the packet opcode. Get the opcode from the hw manager than the direct accessing the opcode from packet. Ife umd sends different opcodes then tfe umd. Both ife and tfe kernel packet opcodes are same. So hw manager can consume this differences. CRs-Fixed: 2585713 Change-Id: I54813af233cd8bfa640f2688c1334510a5b85f1c Signed-off-by: Ravikishore Pampana <rpampana@codeaurora.org>
Цей коміт міститься в:

зафіксовано
Gerrit - the friendly Code Review server

джерело
a04ed17b0e
коміт
4f1ba0f292
@@ -3052,6 +3052,9 @@ static int __cam_isp_ctx_config_dev_in_top_state(
|
||||
struct cam_req_mgr_add_request add_req;
|
||||
struct cam_isp_context *ctx_isp =
|
||||
(struct cam_isp_context *) ctx->ctx_priv;
|
||||
struct cam_hw_cmd_args hw_cmd_args;
|
||||
struct cam_isp_hw_cmd_args isp_hw_cmd_args;
|
||||
uint32_t packet_opcode = 0;
|
||||
|
||||
CAM_DBG(CAM_ISP, "get free request object......");
|
||||
|
||||
@@ -3100,7 +3103,23 @@ static int __cam_isp_ctx_config_dev_in_top_state(
|
||||
CAM_DBG(CAM_ISP, "Packet size 0x%x", packet->header.size);
|
||||
CAM_DBG(CAM_ISP, "packet op %d", packet->header.op_code);
|
||||
|
||||
if ((((packet->header.op_code + 1) & 0xF) == CAM_ISP_PACKET_UPDATE_DEV)
|
||||
/* Query the packet opcode */
|
||||
hw_cmd_args.ctxt_to_hw_map = ctx_isp->hw_ctx;
|
||||
hw_cmd_args.cmd_type = CAM_HW_MGR_CMD_INTERNAL;
|
||||
isp_hw_cmd_args.cmd_type = CAM_ISP_HW_MGR_GET_PACKET_OPCODE;
|
||||
isp_hw_cmd_args.cmd_data = (void *)packet;
|
||||
hw_cmd_args.u.internal_args = (void *)&isp_hw_cmd_args;
|
||||
rc = ctx->hw_mgr_intf->hw_cmd(ctx->hw_mgr_intf->hw_mgr_priv,
|
||||
&hw_cmd_args);
|
||||
if (rc) {
|
||||
CAM_ERR(CAM_ISP, "HW command failed");
|
||||
goto free_req;
|
||||
}
|
||||
|
||||
packet_opcode = isp_hw_cmd_args.u.packet_op_code;
|
||||
CAM_DBG(CAM_ISP, "packet op %d", packet_opcode);
|
||||
|
||||
if ((packet_opcode == CAM_ISP_PACKET_UPDATE_DEV)
|
||||
&& (packet->header.request_id <= ctx->last_flush_req)) {
|
||||
CAM_INFO(CAM_ISP,
|
||||
"request %lld has been flushed, reject packet",
|
||||
|
@@ -5783,6 +5783,7 @@ static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args)
|
||||
struct cam_ife_hw_mgr_ctx *ctx = (struct cam_ife_hw_mgr_ctx *)
|
||||
hw_cmd_args->ctxt_to_hw_map;
|
||||
struct cam_isp_hw_cmd_args *isp_hw_cmd_args = NULL;
|
||||
struct cam_packet *packet;
|
||||
|
||||
if (!hw_mgr_priv || !cmd_args) {
|
||||
CAM_ERR(CAM_ISP, "Invalid arguments");
|
||||
@@ -5823,6 +5824,17 @@ static int cam_ife_mgr_cmd(void *hw_mgr_priv, void *cmd_args)
|
||||
else
|
||||
isp_hw_cmd_args->u.ctx_type = CAM_ISP_CTX_PIX;
|
||||
break;
|
||||
case CAM_ISP_HW_MGR_GET_PACKET_OPCODE:
|
||||
packet = (struct cam_packet *)
|
||||
isp_hw_cmd_args->cmd_data;
|
||||
if (((packet->header.op_code + 1) & 0xF) ==
|
||||
CAM_ISP_PACKET_INIT_DEV)
|
||||
isp_hw_cmd_args->u.packet_op_code =
|
||||
CAM_ISP_PACKET_INIT_DEV;
|
||||
else
|
||||
isp_hw_cmd_args->u.packet_op_code =
|
||||
CAM_ISP_PACKET_UPDATE_DEV;
|
||||
break;
|
||||
default:
|
||||
CAM_ERR(CAM_ISP, "Invalid HW mgr command:0x%x",
|
||||
hw_cmd_args->cmd_type);
|
||||
|
@@ -224,6 +224,7 @@ enum cam_isp_hw_mgr_command {
|
||||
CAM_ISP_HW_MGR_CMD_RESUME_HW,
|
||||
CAM_ISP_HW_MGR_CMD_SOF_DEBUG,
|
||||
CAM_ISP_HW_MGR_CMD_CTX_TYPE,
|
||||
CAM_ISP_HW_MGR_GET_PACKET_OPCODE,
|
||||
CAM_ISP_HW_MGR_CMD_MAX,
|
||||
};
|
||||
|
||||
@@ -237,14 +238,18 @@ enum cam_isp_ctx_type {
|
||||
* struct cam_isp_hw_cmd_args - Payload for hw manager command
|
||||
*
|
||||
* @cmd_type HW command type
|
||||
* @cmd_data command data
|
||||
* @sof_irq_enable To debug if SOF irq is enabled
|
||||
* @ctx_type RDI_ONLY, PIX and RDI, or FS2
|
||||
* @packet_op_code packet opcode
|
||||
*/
|
||||
struct cam_isp_hw_cmd_args {
|
||||
uint32_t cmd_type;
|
||||
void *cmd_data;
|
||||
union {
|
||||
uint32_t sof_irq_enable;
|
||||
uint32_t ctx_type;
|
||||
uint32_t packet_op_code;
|
||||
} u;
|
||||
};
|
||||
|
||||
|
Посилання в новій задачі
Заблокувати користувача