// 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 #include 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; }