// SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note
|
/*
|
*
|
* (C) COPYRIGHT 2019-2022 ARM Limited. All rights reserved.
|
*
|
* This program is free software and is provided to you under the terms of the
|
* GNU General Public License version 2 as published by the Free Software
|
* Foundation, and any use by you of this program is subject to the terms
|
* of such GNU license.
|
*
|
* 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.
|
*
|
* You should have received a copy of the GNU General Public License
|
* along with this program; if not, you can access it online at
|
* http://www.gnu.org/licenses/gpl-2.0.html.
|
*
|
*/
|
|
#include <mali_kbase.h>
|
|
#include <gpu/mali_kbase_gpu_fault.h>
|
|
const char *kbase_gpu_exception_name(u32 const exception_code)
|
{
|
const char *e;
|
|
switch (exception_code) {
|
/* Non-Fault Status code */
|
case 0x00:
|
e = "NOT_STARTED/IDLE/OK";
|
break;
|
case 0x01:
|
e = "DONE";
|
break;
|
case 0x02:
|
e = "INTERRUPTED";
|
break;
|
case 0x03:
|
e = "STOPPED";
|
break;
|
case 0x04:
|
e = "TERMINATED";
|
break;
|
case 0x08:
|
e = "ACTIVE";
|
break;
|
/* Job exceptions */
|
case 0x40:
|
e = "JOB_CONFIG_FAULT";
|
break;
|
case 0x41:
|
e = "JOB_POWER_FAULT";
|
break;
|
case 0x42:
|
e = "JOB_READ_FAULT";
|
break;
|
case 0x43:
|
e = "JOB_WRITE_FAULT";
|
break;
|
case 0x44:
|
e = "JOB_AFFINITY_FAULT";
|
break;
|
case 0x48:
|
e = "JOB_BUS_FAULT";
|
break;
|
case 0x50:
|
e = "INSTR_INVALID_PC";
|
break;
|
case 0x51:
|
e = "INSTR_INVALID_ENC";
|
break;
|
case 0x52:
|
e = "INSTR_TYPE_MISMATCH";
|
break;
|
case 0x53:
|
e = "INSTR_OPERAND_FAULT";
|
break;
|
case 0x54:
|
e = "INSTR_TLS_FAULT";
|
break;
|
case 0x55:
|
e = "INSTR_BARRIER_FAULT";
|
break;
|
case 0x56:
|
e = "INSTR_ALIGN_FAULT";
|
break;
|
case 0x58:
|
e = "DATA_INVALID_FAULT";
|
break;
|
case 0x59:
|
e = "TILE_RANGE_FAULT";
|
break;
|
case 0x5A:
|
e = "ADDR_RANGE_FAULT";
|
break;
|
case 0x60:
|
e = "OUT_OF_MEMORY";
|
break;
|
/* GPU exceptions */
|
case 0x80:
|
e = "DELAYED_BUS_FAULT";
|
break;
|
case 0x88:
|
e = "SHAREABILITY_FAULT";
|
break;
|
/* MMU exceptions */
|
case 0xC0:
|
case 0xC1:
|
case 0xC2:
|
case 0xC3:
|
case 0xC4:
|
case 0xC5:
|
case 0xC6:
|
case 0xC7:
|
e = "TRANSLATION_FAULT";
|
break;
|
case 0xC8:
|
case 0xC9:
|
case 0xCA:
|
case 0xCB:
|
case 0xCC:
|
case 0xCD:
|
case 0xCE:
|
case 0xCF:
|
e = "PERMISSION_FAULT";
|
break;
|
case 0xD0:
|
case 0xD1:
|
case 0xD2:
|
case 0xD3:
|
case 0xD4:
|
case 0xD5:
|
case 0xD6:
|
case 0xD7:
|
e = "TRANSTAB_BUS_FAULT";
|
break;
|
case 0xD8:
|
case 0xD9:
|
case 0xDA:
|
case 0xDB:
|
case 0xDC:
|
case 0xDD:
|
case 0xDE:
|
case 0xDF:
|
e = "ACCESS_FLAG";
|
break;
|
case 0xE0:
|
case 0xE1:
|
case 0xE2:
|
case 0xE3:
|
case 0xE4:
|
case 0xE5:
|
case 0xE6:
|
case 0xE7:
|
e = "ADDRESS_SIZE_FAULT";
|
break;
|
case 0xE8:
|
case 0xE9:
|
case 0xEA:
|
case 0xEB:
|
case 0xEC:
|
case 0xED:
|
case 0xEE:
|
case 0xEF:
|
e = "MEMORY_ATTRIBUTES_FAULT";
|
break;
|
default:
|
e = "UNKNOWN";
|
break;
|
}
|
|
return e;
|
}
|