1 // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note 2 /* 3 * 4 * (C) COPYRIGHT 2019-2021 ARM Limited. All rights reserved. 5 * 6 * This program is free software and is provided to you under the terms of the 7 * GNU General Public License version 2 as published by the Free Software 8 * Foundation, and any use by you of this program is subject to the terms 9 * of such GNU license. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, you can access it online at 18 * http://www.gnu.org/licenses/gpl-2.0.html. 19 * 20 */ 21 22 #include <mali_kbase.h> 23 #include <uapi/gpu/arm/bifrost/csf/mali_gpu_csf_registers.h> 24 #include <gpu/mali_kbase_gpu_fault.h> 25 kbase_gpu_exception_name(u32 const exception_code)26const char *kbase_gpu_exception_name(u32 const exception_code) 27 { 28 const char *e; 29 30 switch (exception_code) { 31 /* CS exceptions */ 32 case CS_FAULT_EXCEPTION_TYPE_CS_RESOURCE_TERMINATED: 33 e = "CS_RESOURCE_TERMINATED"; 34 break; 35 case CS_FAULT_EXCEPTION_TYPE_CS_INHERIT_FAULT: 36 e = "CS_INHERIT_FAULT"; 37 break; 38 /* CS fatal exceptions */ 39 case CS_FATAL_EXCEPTION_TYPE_CS_CONFIG_FAULT: 40 e = "CS_CONFIG_FAULT"; 41 break; 42 case CS_FATAL_EXCEPTION_TYPE_CS_ENDPOINT_FAULT: 43 e = "FATAL_CS_ENDPOINT_FAULT"; 44 break; 45 case CS_FATAL_EXCEPTION_TYPE_CS_INVALID_INSTRUCTION: 46 e = "FATAL_CS_INVALID_INSTRUCTION"; 47 break; 48 case CS_FATAL_EXCEPTION_TYPE_CS_CALL_STACK_OVERFLOW: 49 e = "FATAL_CS_CALL_STACK_OVERFLOW"; 50 break; 51 /* 52 * CS_FAULT_EXCEPTION_TYPE_CS_BUS_FAULT and CS_FATAL_EXCEPTION_TYPE_CS_BUS_FAULT share the same error code 53 * Type of CS_BUS_FAULT will be differentiated by CSF exception handler 54 */ 55 case CS_FAULT_EXCEPTION_TYPE_CS_BUS_FAULT: 56 e = "CS_BUS_FAULT"; 57 break; 58 /* Shader exceptions */ 59 case CS_FAULT_EXCEPTION_TYPE_INSTR_INVALID_PC: 60 e = "INSTR_INVALID_PC"; 61 break; 62 case CS_FAULT_EXCEPTION_TYPE_INSTR_INVALID_ENC: 63 e = "INSTR_INVALID_ENC"; 64 break; 65 case CS_FAULT_EXCEPTION_TYPE_INSTR_BARRIER_FAULT: 66 e = "INSTR_BARRIER_FAULT"; 67 break; 68 /* Iterator exceptions */ 69 case CS_FAULT_EXCEPTION_TYPE_KABOOM: 70 e = "KABOOM"; 71 break; 72 /* Misc exceptions */ 73 case CS_FAULT_EXCEPTION_TYPE_DATA_INVALID_FAULT: 74 e = "DATA_INVALID_FAULT"; 75 break; 76 case CS_FAULT_EXCEPTION_TYPE_TILE_RANGE_FAULT: 77 e = "TILE_RANGE_FAULT"; 78 break; 79 case CS_FAULT_EXCEPTION_TYPE_ADDR_RANGE_FAULT: 80 e = "ADDR_RANGE_FAULT"; 81 break; 82 case CS_FAULT_EXCEPTION_TYPE_IMPRECISE_FAULT: 83 e = "IMPRECISE_FAULT"; 84 break; 85 /* FW exceptions */ 86 case CS_FATAL_EXCEPTION_TYPE_FIRMWARE_INTERNAL_ERROR: 87 e = "FIRMWARE_INTERNAL_ERROR"; 88 break; 89 case CS_FAULT_EXCEPTION_TYPE_RESOURCE_EVICTION_TIMEOUT: 90 e = "RESOURCE_EVICTION_TIMEOUT"; 91 break; 92 /* GPU Fault */ 93 case GPU_FAULTSTATUS_EXCEPTION_TYPE_GPU_BUS_FAULT: 94 e = "GPU_BUS_FAULT"; 95 break; 96 case GPU_FAULTSTATUS_EXCEPTION_TYPE_GPU_SHAREABILITY_FAULT: 97 e = "GPU_SHAREABILITY_FAULT"; 98 break; 99 case GPU_FAULTSTATUS_EXCEPTION_TYPE_SYSTEM_SHAREABILITY_FAULT: 100 e = "SYSTEM_SHAREABILITY_FAULT"; 101 break; 102 case GPU_FAULTSTATUS_EXCEPTION_TYPE_GPU_CACHEABILITY_FAULT: 103 e = "GPU_CACHEABILITY_FAULT"; 104 break; 105 /* Any other exception code is unknown */ 106 default: 107 e = "UNKNOWN"; 108 break; 109 } 110 111 return e; 112 } 113