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>
Este commit está contenido en:
Ravikishore Pampana
2020-01-06 11:41:06 +05:30
cometido por Gerrit - the friendly Code Review server
padre a04ed17b0e
commit 4f1ba0f292
Se han modificado 3 ficheros con 37 adiciones y 1 borrados

Ver fichero

@@ -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",

Ver fichero

@@ -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);

Ver fichero

@@ -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;
};