247 lines
9.2 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright(c) 2020 - 2023 Allwinner Technology Co.,Ltd. All rights reserved. */
/*
* Allwinner's errcode
*
* Copyright (c) 2023, lvda <lvda@allwinnertech.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef __SUNXI_ERR_H__
#define __SUNXI_ERR_H__
/*
* SUNXI ERRCODE format:
* | bit31 | bit30:bit20 | bit19:bit16 | bit15:bit0 |
* |------------|-----------------------|-----------------------|-----------------------|
* | 1 | MOD + SUBMOD | BUG TYPE | USER-DEF |
*/
#define E_MOD_OFFSET 20
#define E_TYPE_OFFSET 16
#define E_USER_OFFSET 0
/* Error code is negative */
#define E_MOD(mod) (BIT(31) | ((mod & 0x7FF) << E_MOD_OFFSET))
#define E_TYPE(type) ((type & 0xF) << E_TYPE_OFFSET)
#define E_USER(user) ((user & 0xFFFF) << E_USER_OFFSET)
/*
* SUNXI ERR type:
* E_TYPE_HW: IP error, include abnormal interruption
* E_TYPE_SW_DEP: The module that it depends on has issues
* E_TYPE_SW_SYS: The system interface has error
* E_TYPE_SW_ARG: The parameter passing error, including system call parameter, DTS parameters
*
*/
enum sunxi_err_type {
E_TYPE_HW = 0,
E_TYPE_SW_DEP,
E_TYPE_SW_SYS,
E_TYPE_SW_ARG,
E_TYPE_OTHER = 15,
};
/*
* SUNXI module names
*/
enum sunxi_err_mod {
/* basic-system */
E_MOD_SYS = 0x0,
E_MOD_CLK = 0x40,
E_MOD_CLK_NG,
E_MOD_PIN = 0x50,
E_MOD_INT = 0x60,
E_MOD_UART = 0x70,
E_MOD_UART_NG,
E_MOD_TIMER = 0x80,
E_MOD_TIMER_HS,
E_MOD_WDT = 0x90,
E_MOD_DMA = 0xA0,
E_MOD_RTC = 0xB0,
E_MOD_PMIC = 0xC0,
E_MOD_PMIC_MFD = 0xC1,
E_MOD_PMIC_REGU = 0xC2,
E_MOD_PMIC_SUPPLY = 0xC3,
E_MOD_PMIC_KEY = 0xC4,
E_MOD_PMIC_TEMP = 0xC5,
E_MOD_PMIC_NOTIFIER = 0xC6,
/* highspeed-peripheral-system */
E_MOD_GMAC = 0x100,
E_MOD_PCIE = 0x140,
E_MOD_USB = 0x180,
E_MOD_MMC = 0x1C0,
/* lowspeed-peripheral-system */
E_MOD_PWM = 0x200,
E_MOD_IR = 0x210,
E_MOD_TWI = 0x220,
E_MOD_ADC = 0x230,
E_MOD_LEDC = 0x240,
E_MOD_SPI = 0x250,
/* AMP system */
E_MOD_HWLOCK = 0x260,
E_MOD_MSGBOX = 0x270,
/* secure system */
E_MOD_CE = 0x280,
E_MOD_SID = 0x2C0,
/* graphic system */
E_MOD_G2D = 0x300,
E_MOD_DE = 0x340,
E_MOD_GPU = 0x380,
/* multimedia system */
E_MOD_VE = 0x3C0,
E_MOD_CSI = 0x400,
E_MOD_ISP = 0x440,
/* audio system */
E_MOD_AUDIO = 0x480,
E_MOD_AUDIOCODEC = 0x481,
E_MOD_I2S = 0x482,
E_MOD_DMIC = 0x483,
E_MOD_OWA = 0x484,
E_MOD_AHUB = 0x485,
E_MOD_END = 0x800, /* Do not use */
};
enum sunxi_err_code {
E_SYS_HW_ERR0 = E_MOD(E_MOD_SYS) | E_TYPE(E_TYPE_HW) | 0x0,
E_CLK_HW_ERR0 = E_MOD(E_MOD_CLK) | E_TYPE(E_TYPE_HW) | 0x0,
E_PIN_HW_ERR0 = E_MOD(E_MOD_PIN) | E_TYPE(E_TYPE_HW) | 0x0,
E_INT_HW_ERR0 = E_MOD(E_MOD_INT) | E_TYPE(E_TYPE_HW) | 0x0,
E_UART_HW_ERR0 = E_MOD(E_MOD_UART) | E_TYPE(E_TYPE_HW) | 0x0,
E_UART_SW_DEP_ERR0 = E_MOD(E_MOD_UART) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_UART_SW_SYS_ERR0 = E_MOD(E_MOD_UART) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_UART_SW_ARG_ERR0 = E_MOD(E_MOD_UART) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_UART_NG_HW_ERR0 = E_MOD(E_MOD_UART_NG) | E_TYPE(E_TYPE_HW) | 0x0,
E_UART_NG_SW_DEP_ERR0 = E_MOD(E_MOD_UART_NG) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_UART_NG_SW_SYS_ERR0 = E_MOD(E_MOD_UART_NG) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_UART_NG_SW_ARG_ERR0 = E_MOD(E_MOD_UART_NG) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_TIMER_HW_ERR0 = E_MOD(E_MOD_TIMER) | E_TYPE(E_TYPE_HW) | 0x0,
E_WDT_HW_ERR0 = E_MOD(E_MOD_WDT) | E_TYPE(E_TYPE_HW) | 0x0,
E_DMA_HW_ERR0 = E_MOD(E_MOD_DMA) | E_TYPE(E_TYPE_HW) | 0x0,
E_RTC_HW_ERR0 = E_MOD(E_MOD_RTC) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_HW_ERR0 = E_MOD(E_MOD_PMIC) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_SW_DEP_ERR0 = E_MOD(E_MOD_PMIC) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_PMIC_SW_SYS_ERR0 = E_MOD(E_MOD_PMIC) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_PMIC_SW_ARG_ERR0 = E_MOD(E_MOD_PMIC) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_PMIC_MFD_HW_ERR0 = E_MOD(E_MOD_PMIC_MFD) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_MFD_SW_DEP_ERR0 = E_MOD(E_MOD_PMIC_MFD) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_PMIC_MFD_SW_SYS_ERR0 = E_MOD(E_MOD_PMIC_MFD) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_PMIC_MFD_SW_ARG_ERR0 = E_MOD(E_MOD_PMIC_MFD) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_PMIC_REGU_HW_ERR0 = E_MOD(E_MOD_PMIC_REGU) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_REGU_SW_DEP_ERR0 = E_MOD(E_MOD_PMIC_REGU) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_PMIC_REGU_SW_SYS_ERR0 = E_MOD(E_MOD_PMIC_REGU) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_PMIC_REGU_SW_ARG_ERR0 = E_MOD(E_MOD_PMIC_REGU) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_PMIC_SUPPLY_HW_ERR0 = E_MOD(E_MOD_PMIC_SUPPLY) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_SUPPLY_SW_DEP_ERR0 = E_MOD(E_MOD_PMIC_SUPPLY) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_PMIC_SUPPLY_SW_SYS_ERR0 = E_MOD(E_MOD_PMIC_SUPPLY) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_PMIC_SUPPLY_SW_ARG_ERR0 = E_MOD(E_MOD_PMIC_SUPPLY) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_PMIC_KEY_HW_ERR0 = E_MOD(E_MOD_PMIC_KEY) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_KEY_SW_DEP_ERR0 = E_MOD(E_MOD_PMIC_KEY) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_PMIC_KEY_SW_SYS_ERR0 = E_MOD(E_MOD_PMIC_KEY) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_PMIC_KEY_SW_ARG_ERR0 = E_MOD(E_MOD_PMIC_KEY) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_PMIC_TEMP_HW_ERR0 = E_MOD(E_MOD_PMIC_TEMP) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_TEMP_SW_DEP_ERR0 = E_MOD(E_MOD_PMIC_TEMP) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_PMIC_TEMP_SW_SYS_ERR0 = E_MOD(E_MOD_PMIC_TEMP) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_PMIC_TEMP_SW_ARG_ERR0 = E_MOD(E_MOD_PMIC_TEMP) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_PMIC_NOTIFIER_HW_ERR0 = E_MOD(E_MOD_PMIC_NOTIFIER) | E_TYPE(E_TYPE_HW) | 0x0,
E_PMIC_NOTIFIER_SW_DEP_ERR0 = E_MOD(E_MOD_PMIC_NOTIFIER) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_PMIC_NOTIFIER_SW_SYS_ERR0 = E_MOD(E_MOD_PMIC_NOTIFIER) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_PMIC_NOTIFIER_SW_ARG_ERR0 = E_MOD(E_MOD_PMIC_NOTIFIER) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_GMAC_HW_ERR0 = E_MOD(E_MOD_GMAC) | E_TYPE(E_TYPE_HW) | 0x0,
E_PCIE_HW_ERR0 = E_MOD(E_MOD_PCIE) | E_TYPE(E_TYPE_HW) | 0x0,
E_USB_HW_ERR0 = E_MOD(E_MOD_USB) | E_TYPE(E_TYPE_HW) | 0x0,
E_MMC_HW_ERR0 = E_MOD(E_MOD_MMC) | E_TYPE(E_TYPE_HW) | 0x0,
E_PWM_HW_ERR0 = E_MOD(E_MOD_PWM) | E_TYPE(E_TYPE_HW) | 0x0,
E_IR_HW_ERR0 = E_MOD(E_MOD_IR) | E_TYPE(E_TYPE_HW) | 0x0,
E_TWI_HW_ERR0 = E_MOD(E_MOD_TWI) | E_TYPE(E_TYPE_HW) | 0x0,
E_ADC_HW_ERR0 = E_MOD(E_MOD_ADC) | E_TYPE(E_TYPE_HW) | 0x0,
E_LEDC_HW_ERR0 = E_MOD(E_MOD_LEDC) | E_TYPE(E_TYPE_HW) | 0x0,
E_SPI_HW_ERR0 = E_MOD(E_MOD_SPI) | E_TYPE(E_TYPE_HW) | 0x0,
E_HWLOCK_HW_ERR0 = E_MOD(E_MOD_HWLOCK) | E_TYPE(E_TYPE_HW) | 0x0,
E_MSGBOX_HW_ERR0 = E_MOD(E_MOD_MSGBOX) | E_TYPE(E_TYPE_HW) | 0x0,
E_CE_HW_ERR0 = E_MOD(E_MOD_CE) | E_TYPE(E_TYPE_HW) | 0x0,
E_SID_HW_ERR0 = E_MOD(E_MOD_SID) | E_TYPE(E_TYPE_HW) | 0x0,
E_G2D_HW_ERR0 = E_MOD(E_MOD_G2D) | E_TYPE(E_TYPE_HW) | 0x0,
E_DE_HW_ERR0 = E_MOD(E_MOD_DE) | E_TYPE(E_TYPE_HW) | 0x0,
E_GPU_HW_ERR0 = E_MOD(E_MOD_GPU) | E_TYPE(E_TYPE_HW) | 0x0,
E_VE_HW_ERR0 = E_MOD(E_MOD_VE) | E_TYPE(E_TYPE_HW) | 0x0,
E_CSI_HW_ERR0 = E_MOD(E_MOD_CSI) | E_TYPE(E_TYPE_HW) | 0x0,
E_ISP_HW_ERR0 = E_MOD(E_MOD_ISP) | E_TYPE(E_TYPE_HW) | 0x0,
E_AUDIO_HW_ERR0 = E_MOD(E_MOD_AUDIO) | E_TYPE(E_TYPE_HW) | 0x0,
E_AUDIO_SW_DEP_ERR0 = E_MOD(E_MOD_AUDIO) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_AUDIO_SW_SYS_ERR0 = E_MOD(E_MOD_AUDIO) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_AUDIO_SW_ARG_ERR0 = E_MOD(E_MOD_AUDIO) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_AUDIOCODEC_HW_ERR0 = E_MOD(E_MOD_AUDIOCODEC) | E_TYPE(E_TYPE_HW) | 0x0,
E_AUDIOCODEC_SW_DEP_ERR0 = E_MOD(E_MOD_AUDIOCODEC) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_AUDIOCODEC_SW_SYS_ERR0 = E_MOD(E_MOD_AUDIOCODEC) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_AUDIOCODEC_SW_ARG_ERR0 = E_MOD(E_MOD_AUDIOCODEC) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_I2S_HW_ERR0 = E_MOD(E_MOD_I2S) | E_TYPE(E_TYPE_HW) | 0x0,
E_I2S_SW_DEP_ERR0 = E_MOD(E_MOD_I2S) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_I2S_SW_SYS_ERR0 = E_MOD(E_MOD_I2S) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_I2S_SW_ARG_ERR0 = E_MOD(E_MOD_I2S) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_DMIC_HW_ERR0 = E_MOD(E_MOD_DMIC) | E_TYPE(E_TYPE_HW) | 0x0,
E_DMIC_SW_DEP_ERR0 = E_MOD(E_MOD_DMIC) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_DMIC_SW_SYS_ERR0 = E_MOD(E_MOD_DMIC) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_DMIC_SW_ARG_ERR0 = E_MOD(E_MOD_DMIC) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_OWA_HW_ERR0 = E_MOD(E_MOD_OWA) | E_TYPE(E_TYPE_HW) | 0x0,
E_OWA_SW_DEP_ERR0 = E_MOD(E_MOD_OWA) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_OWA_SW_SYS_ERR0 = E_MOD(E_MOD_OWA) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_OWA_SW_ARG_ERR0 = E_MOD(E_MOD_OWA) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
E_AHUB_HW_ERR0 = E_MOD(E_MOD_AHUB) | E_TYPE(E_TYPE_HW) | 0x0,
E_AHUB_SW_DEP_ERR0 = E_MOD(E_MOD_AHUB) | E_TYPE(E_TYPE_SW_DEP) | 0x0,
E_AHUB_SW_SYS_ERR0 = E_MOD(E_MOD_AHUB) | E_TYPE(E_TYPE_SW_SYS) | 0x0,
E_AHUB_SW_ARG_ERR0 = E_MOD(E_MOD_AHUB) | E_TYPE(E_TYPE_SW_ARG) | 0x0,
};
#include "sunxi-err-audio.h"
// #include "sunxi-err-uart-ng.h"
// #include "sunxi-err-timer.h"
// #include "sunxi-err-rtc.h"
#include "sunxi-err-pmic.h"
#include "sunxi-err-uart-ng.h"
#endif