1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * Copyright © 2024 Intel Corporation 4 */ 5 6 #ifndef _ABI_GUC_CAPTURE_ABI_H 7 #define _ABI_GUC_CAPTURE_ABI_H 8 9 #include <linux/types.h> 10 11 /* Capture List Index */ 12 enum guc_capture_list_index_type { 13 GUC_CAPTURE_LIST_INDEX_PF = 0, 14 GUC_CAPTURE_LIST_INDEX_VF = 1, 15 }; 16 17 #define GUC_CAPTURE_LIST_INDEX_MAX (GUC_CAPTURE_LIST_INDEX_VF + 1) 18 19 /* Register-types of GuC capture register lists */ 20 enum guc_state_capture_type { 21 GUC_STATE_CAPTURE_TYPE_GLOBAL = 0, 22 GUC_STATE_CAPTURE_TYPE_ENGINE_CLASS, 23 GUC_STATE_CAPTURE_TYPE_ENGINE_INSTANCE 24 }; 25 26 #define GUC_STATE_CAPTURE_TYPE_MAX (GUC_STATE_CAPTURE_TYPE_ENGINE_INSTANCE + 1) 27 28 /* Class indecies for capture_class and capture_instance arrays */ 29 enum guc_capture_list_class_type { 30 GUC_CAPTURE_LIST_CLASS_RENDER_COMPUTE = 0, 31 GUC_CAPTURE_LIST_CLASS_VIDEO = 1, 32 GUC_CAPTURE_LIST_CLASS_VIDEOENHANCE = 2, 33 GUC_CAPTURE_LIST_CLASS_BLITTER = 3, 34 GUC_CAPTURE_LIST_CLASS_GSC_OTHER = 4, 35 }; 36 37 #define GUC_CAPTURE_LIST_CLASS_MAX (GUC_CAPTURE_LIST_CLASS_GSC_OTHER + 1) 38 39 /** 40 * struct guc_mmio_reg - GuC MMIO reg state struct 41 * 42 * GuC MMIO reg state struct 43 */ 44 struct guc_mmio_reg { 45 /** @offset: MMIO Offset - filled in by Host */ 46 u32 offset; 47 /** @value: MMIO Value - Used by Firmware to store value */ 48 u32 value; 49 /** @flags: Flags for accessing the MMIO */ 50 u32 flags; 51 /** @mask: Value of a mask to apply if mask with value is set */ 52 u32 mask; 53 #define GUC_REGSET_MASKED BIT(0) 54 #define GUC_REGSET_STEERING_NEEDED BIT(1) 55 #define GUC_REGSET_MASKED_WITH_VALUE BIT(2) 56 #define GUC_REGSET_RESTORE_ONLY BIT(3) 57 #define GUC_REGSET_STEERING_GROUP GENMASK(16, 12) 58 #define GUC_REGSET_STEERING_INSTANCE GENMASK(23, 20) 59 } __packed; 60 61 /** 62 * struct guc_mmio_reg_set - GuC register sets 63 * 64 * GuC register sets 65 */ 66 struct guc_mmio_reg_set { 67 /** @address: register address */ 68 u32 address; 69 /** @count: register count */ 70 u16 count; 71 /** @reserved: reserved */ 72 u16 reserved; 73 } __packed; 74 75 /** 76 * struct guc_debug_capture_list_header - Debug capture list header. 77 * 78 * Debug capture list header. 79 */ 80 struct guc_debug_capture_list_header { 81 /** @info: contains number of MMIO descriptors in the capture list. */ 82 u32 info; 83 #define GUC_CAPTURELISTHDR_NUMDESCR GENMASK(15, 0) 84 } __packed; 85 86 /** 87 * struct guc_debug_capture_list - Debug capture list 88 * 89 * As part of ADS registration, these header structures (followed by 90 * an array of 'struct guc_mmio_reg' entries) are used to register with 91 * GuC microkernel the list of registers we want it to dump out prior 92 * to a engine reset. 93 */ 94 struct guc_debug_capture_list { 95 /** @header: Debug capture list header. */ 96 struct guc_debug_capture_list_header header; 97 /** @regs: MMIO descriptors in the capture list. */ 98 struct guc_mmio_reg regs[]; 99 } __packed; 100 101 /** 102 * struct guc_state_capture_header_t - State capture header. 103 * 104 * Prior to resetting engines that have hung or faulted, GuC microkernel 105 * reports the engine error-state (register values that was read) by 106 * logging them into the shared GuC log buffer using these hierarchy 107 * of structures. 108 */ 109 struct guc_state_capture_header_t { 110 /** 111 * @owner: VFID 112 * BR[ 7: 0] MBZ when SRIOV is disabled. When SRIOV is enabled 113 * VFID is an integer in range [0, 63] where 0 means the state capture 114 * is corresponding to the PF and an integer N in range [1, 63] means 115 * the state capture is for VF N. 116 */ 117 u32 owner; 118 #define GUC_STATE_CAPTURE_HEADER_VFID GENMASK(7, 0) 119 /** @info: Engine class/instance and capture type info */ 120 u32 info; 121 #define GUC_STATE_CAPTURE_HEADER_CAPTURE_TYPE GENMASK(3, 0) /* see guc_state_capture_type */ 122 #define GUC_STATE_CAPTURE_HEADER_ENGINE_CLASS GENMASK(7, 4) /* see guc_capture_list_class_type */ 123 #define GUC_STATE_CAPTURE_HEADER_ENGINE_INSTANCE GENMASK(11, 8) 124 /** 125 * @lrca: logical ring context address. 126 * if type-instance, LRCA (address) that hung, else set to ~0 127 */ 128 u32 lrca; 129 /** 130 * @guc_id: context_index. 131 * if type-instance, context index of hung context, else set to ~0 132 */ 133 u32 guc_id; 134 /** @num_mmio_entries: Number of captured MMIO entries. */ 135 u32 num_mmio_entries; 136 #define GUC_STATE_CAPTURE_HEADER_NUM_MMIO_ENTRIES GENMASK(9, 0) 137 } __packed; 138 139 /** 140 * struct guc_state_capture_t - State capture. 141 * 142 * State capture 143 */ 144 struct guc_state_capture_t { 145 /** @header: State capture header. */ 146 struct guc_state_capture_header_t header; 147 /** @mmio_entries: Array of captured guc_mmio_reg entries. */ 148 struct guc_mmio_reg mmio_entries[]; 149 } __packed; 150 151 /* State Capture Group Type */ 152 enum guc_state_capture_group_type { 153 GUC_STATE_CAPTURE_GROUP_TYPE_FULL = 0, 154 GUC_STATE_CAPTURE_GROUP_TYPE_PARTIAL 155 }; 156 157 #define GUC_STATE_CAPTURE_GROUP_TYPE_MAX (GUC_STATE_CAPTURE_GROUP_TYPE_PARTIAL + 1) 158 159 /** 160 * struct guc_state_capture_group_header_t - State capture group header 161 * 162 * State capture group header. 163 */ 164 struct guc_state_capture_group_header_t { 165 /** @owner: VFID */ 166 u32 owner; 167 #define GUC_STATE_CAPTURE_GROUP_HEADER_VFID GENMASK(7, 0) 168 /** @info: Engine class/instance and capture type info */ 169 u32 info; 170 #define GUC_STATE_CAPTURE_GROUP_HEADER_NUM_CAPTURES GENMASK(7, 0) 171 #define GUC_STATE_CAPTURE_GROUP_HEADER_CAPTURE_GROUP_TYPE GENMASK(15, 8) 172 } __packed; 173 174 /** 175 * struct guc_state_capture_group_t - State capture group. 176 * 177 * this is the top level structure where an error-capture dump starts 178 */ 179 struct guc_state_capture_group_t { 180 /** @grp_header: State capture group header. */ 181 struct guc_state_capture_group_header_t grp_header; 182 /** @capture_entries: Array of state captures */ 183 struct guc_state_capture_t capture_entries[]; 184 } __packed; 185 186 #endif 187