| // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note |
| /* |
| * |
| * (C) COPYRIGHT 2019-2021 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; |
| } |