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