u32 ddl_handle_core_errors(struct ddl_context_type *p_ddl_context) { struct ddl_client_context_type *p_ddl; u32 n_channel_inst_id, b_status = FALSE; if (!p_ddl_context->n_cmd_err_status && !p_ddl_context->n_disp_pic_err_status) { DDL_MSG_ERROR("VIDC_NO_ERROR"); } else { vidc_1080p_get_returned_channel_inst_id(&n_channel_inst_id); vidc_1080p_clear_returned_channel_inst_id(); p_ddl = ddl_get_current_ddl_client_for_channel_id(p_ddl_context, p_ddl_context->n_response_cmd_ch_id); if (!p_ddl) { DDL_MSG_ERROR("VIDC_SPURIOUS_INTERRUPT_ERROR"); b_status = TRUE; } else { u32 b_disp_status; if (p_ddl_context->n_cmd_err_status) print_core_errors( p_ddl_context->n_cmd_err_status); if (p_ddl_context->n_disp_pic_err_status) print_core_errors( p_ddl_context->n_disp_pic_err_status); b_status = ddl_handle_core_warnings( p_ddl_context->n_cmd_err_status); b_disp_status = ddl_handle_core_warnings( p_ddl_context->n_disp_pic_err_status); if (!b_status && !b_disp_status) { DDL_MSG_ERROR("ddl_warning:Unknown"); b_status = ddl_handle_hw_fatal_errors(p_ddl); if (!b_status) b_status = ddl_handle_core_recoverable_errors( p_ddl); if (!b_status) b_status = ddl_handle_client_fatal_errors(p_ddl); } } } return b_status; }
u32 ddl_handle_core_errors(struct ddl_context *ddl_context) { u32 status = false; if (!ddl_context->cmd_err_status && !ddl_context->disp_pic_err_status && !ddl_context->op_failed) return false; if (ddl_context->cmd_state == DDL_CMD_INVALID) { DBG("SPURIOUS_INTERRUPT_ERROR"); return true; } if (!ddl_context->op_failed) { u32 disp_status; status = ddl_handle_core_warnings(ddl_context-> cmd_err_status); disp_status = ddl_handle_core_warnings( ddl_context->disp_pic_err_status); if (!status && !disp_status) DBG("ddl_warning:Unknown"); return false; } ERR("\n %s(): OPFAILED!!", __func__); ERR("\n CMD_ERROR_STATUS = %u, DISP_ERR_STATUS = %u", ddl_context->cmd_err_status, ddl_context->disp_pic_err_status); status = ddl_handle_hw_fatal_errors(ddl_context); if (!status) status = ddl_handle_core_recoverable_errors(ddl_context); if (!status) status = ddl_handle_client_fatal_errors(ddl_context); return status; }