Esempio n. 1
0
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;
}