Rev 6937 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6937 | Rev 7144 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | 37 | ||
38 | #define GUC_CTX_PRIORITY_KMD_HIGH 0 |
38 | #define GUC_CTX_PRIORITY_KMD_HIGH 0 |
39 | #define GUC_CTX_PRIORITY_HIGH 1 |
39 | #define GUC_CTX_PRIORITY_HIGH 1 |
40 | #define GUC_CTX_PRIORITY_KMD_NORMAL 2 |
40 | #define GUC_CTX_PRIORITY_KMD_NORMAL 2 |
- | 41 | #define GUC_CTX_PRIORITY_NORMAL 3 |
|
Line 41... | Line 42... | ||
41 | #define GUC_CTX_PRIORITY_NORMAL 3 |
42 | #define GUC_CTX_PRIORITY_NUM 4 |
42 | 43 | ||
Line -... | Line 44... | ||
- | 44 | #define GUC_MAX_GPU_CONTEXTS 1024 |
|
- | 45 | #define GUC_INVALID_CTX_ID GUC_MAX_GPU_CONTEXTS |
|
- | 46 | ||
- | 47 | #define GUC_RENDER_ENGINE 0 |
|
- | 48 | #define GUC_VIDEO_ENGINE 1 |
|
- | 49 | #define GUC_BLITTER_ENGINE 2 |
|
- | 50 | #define GUC_VIDEOENHANCE_ENGINE 3 |
|
43 | #define GUC_MAX_GPU_CONTEXTS 1024 |
51 | #define GUC_VIDEO_ENGINE2 4 |
44 | #define GUC_INVALID_CTX_ID GUC_MAX_GPU_CONTEXTS |
52 | #define GUC_MAX_ENGINES_NUM (GUC_VIDEO_ENGINE2 + 1) |
45 | 53 | ||
46 | /* Work queue item header definitions */ |
54 | /* Work queue item header definitions */ |
47 | #define WQ_STATUS_ACTIVE 1 |
55 | #define WQ_STATUS_ACTIVE 1 |
Line 79... | Line 87... | ||
79 | 87 | ||
80 | /* The guc control data is 10 DWORDs */ |
88 | /* The guc control data is 10 DWORDs */ |
81 | #define GUC_CTL_CTXINFO 0 |
89 | #define GUC_CTL_CTXINFO 0 |
82 | #define GUC_CTL_CTXNUM_IN16_SHIFT 0 |
90 | #define GUC_CTL_CTXNUM_IN16_SHIFT 0 |
- | 91 | #define GUC_CTL_BASE_ADDR_SHIFT 12 |
|
83 | #define GUC_CTL_BASE_ADDR_SHIFT 12 |
92 | |
84 | #define GUC_CTL_ARAT_HIGH 1 |
93 | #define GUC_CTL_ARAT_HIGH 1 |
- | 94 | #define GUC_CTL_ARAT_LOW 2 |
|
85 | #define GUC_CTL_ARAT_LOW 2 |
95 | |
86 | #define GUC_CTL_DEVICE_INFO 3 |
96 | #define GUC_CTL_DEVICE_INFO 3 |
87 | #define GUC_CTL_GTTYPE_SHIFT 0 |
97 | #define GUC_CTL_GTTYPE_SHIFT 0 |
- | 98 | #define GUC_CTL_COREFAMILY_SHIFT 7 |
|
88 | #define GUC_CTL_COREFAMILY_SHIFT 7 |
99 | |
89 | #define GUC_CTL_LOG_PARAMS 4 |
100 | #define GUC_CTL_LOG_PARAMS 4 |
90 | #define GUC_LOG_VALID (1 << 0) |
101 | #define GUC_LOG_VALID (1 << 0) |
91 | #define GUC_LOG_NOTIFY_ON_HALF_FULL (1 << 1) |
102 | #define GUC_LOG_NOTIFY_ON_HALF_FULL (1 << 1) |
92 | #define GUC_LOG_ALLOC_IN_MEGABYTE (1 << 3) |
103 | #define GUC_LOG_ALLOC_IN_MEGABYTE (1 << 3) |
Line 95... | Line 106... | ||
95 | #define GUC_LOG_DPC_PAGES 3 |
106 | #define GUC_LOG_DPC_PAGES 3 |
96 | #define GUC_LOG_DPC_SHIFT 6 |
107 | #define GUC_LOG_DPC_SHIFT 6 |
97 | #define GUC_LOG_ISR_PAGES 3 |
108 | #define GUC_LOG_ISR_PAGES 3 |
98 | #define GUC_LOG_ISR_SHIFT 9 |
109 | #define GUC_LOG_ISR_SHIFT 9 |
99 | #define GUC_LOG_BUF_ADDR_SHIFT 12 |
110 | #define GUC_LOG_BUF_ADDR_SHIFT 12 |
- | 111 | ||
100 | #define GUC_CTL_PAGE_FAULT_CONTROL 5 |
112 | #define GUC_CTL_PAGE_FAULT_CONTROL 5 |
- | 113 | ||
101 | #define GUC_CTL_WA 6 |
114 | #define GUC_CTL_WA 6 |
102 | #define GUC_CTL_WA_UK_BY_DRIVER (1 << 3) |
115 | #define GUC_CTL_WA_UK_BY_DRIVER (1 << 3) |
- | 116 | ||
103 | #define GUC_CTL_FEATURE 7 |
117 | #define GUC_CTL_FEATURE 7 |
104 | #define GUC_CTL_VCS2_ENABLED (1 << 0) |
118 | #define GUC_CTL_VCS2_ENABLED (1 << 0) |
105 | #define GUC_CTL_KERNEL_SUBMISSIONS (1 << 1) |
119 | #define GUC_CTL_KERNEL_SUBMISSIONS (1 << 1) |
106 | #define GUC_CTL_FEATURE2 (1 << 2) |
120 | #define GUC_CTL_FEATURE2 (1 << 2) |
107 | #define GUC_CTL_POWER_GATING (1 << 3) |
121 | #define GUC_CTL_POWER_GATING (1 << 3) |
108 | #define GUC_CTL_DISABLE_SCHEDULER (1 << 4) |
122 | #define GUC_CTL_DISABLE_SCHEDULER (1 << 4) |
109 | #define GUC_CTL_PREEMPTION_LOG (1 << 5) |
123 | #define GUC_CTL_PREEMPTION_LOG (1 << 5) |
110 | #define GUC_CTL_ENABLE_SLPC (1 << 7) |
124 | #define GUC_CTL_ENABLE_SLPC (1 << 7) |
111 | #define GUC_CTL_RESET_ON_PREMPT_FAILURE (1 << 8) |
125 | #define GUC_CTL_RESET_ON_PREMPT_FAILURE (1 << 8) |
- | 126 | ||
112 | #define GUC_CTL_DEBUG 8 |
127 | #define GUC_CTL_DEBUG 8 |
113 | #define GUC_LOG_VERBOSITY_SHIFT 0 |
128 | #define GUC_LOG_VERBOSITY_SHIFT 0 |
114 | #define GUC_LOG_VERBOSITY_LOW (0 << GUC_LOG_VERBOSITY_SHIFT) |
129 | #define GUC_LOG_VERBOSITY_LOW (0 << GUC_LOG_VERBOSITY_SHIFT) |
115 | #define GUC_LOG_VERBOSITY_MED (1 << GUC_LOG_VERBOSITY_SHIFT) |
130 | #define GUC_LOG_VERBOSITY_MED (1 << GUC_LOG_VERBOSITY_SHIFT) |
116 | #define GUC_LOG_VERBOSITY_HIGH (2 << GUC_LOG_VERBOSITY_SHIFT) |
131 | #define GUC_LOG_VERBOSITY_HIGH (2 << GUC_LOG_VERBOSITY_SHIFT) |
117 | #define GUC_LOG_VERBOSITY_ULTRA (3 << GUC_LOG_VERBOSITY_SHIFT) |
132 | #define GUC_LOG_VERBOSITY_ULTRA (3 << GUC_LOG_VERBOSITY_SHIFT) |
118 | /* Verbosity range-check limits, without the shift */ |
133 | /* Verbosity range-check limits, without the shift */ |
119 | #define GUC_LOG_VERBOSITY_MIN 0 |
134 | #define GUC_LOG_VERBOSITY_MIN 0 |
120 | #define GUC_LOG_VERBOSITY_MAX 3 |
135 | #define GUC_LOG_VERBOSITY_MAX 3 |
- | 136 | #define GUC_LOG_VERBOSITY_MASK 0x0000000f |
|
- | 137 | #define GUC_LOG_DESTINATION_MASK (3 << 4) |
|
- | 138 | #define GUC_LOG_DISABLED (1 << 6) |
|
- | 139 | #define GUC_PROFILE_ENABLED (1 << 7) |
|
- | 140 | #define GUC_WQ_TRACK_ENABLED (1 << 8) |
|
- | 141 | #define GUC_ADS_ENABLED (1 << 9) |
|
- | 142 | #define GUC_DEBUG_RESERVED (1 << 10) |
|
- | 143 | #define GUC_ADS_ADDR_SHIFT 11 |
|
- | 144 | #define GUC_ADS_ADDR_MASK 0xfffff800 |
|
- | 145 | ||
121 | #define GUC_CTL_RSRVD 9 |
146 | #define GUC_CTL_RSRVD 9 |
Line 122... | Line 147... | ||
122 | 147 | ||
Line 123... | Line 148... | ||
123 | #define GUC_CTL_MAX_DWORDS (GUC_CTL_RSRVD + 1) |
148 | #define GUC_CTL_MAX_DWORDS (SOFT_SCRATCH_COUNT - 2) /* [1..14] */ |
124 | 149 | ||
125 | /** |
150 | /** |
126 | * DOC: GuC Firmware Layout |
151 | * DOC: GuC Firmware Layout |
Line 265... | Line 290... | ||
265 | u64 db_trigger_cpu; |
290 | u64 db_trigger_cpu; |
266 | u32 db_trigger_uk; |
291 | u32 db_trigger_uk; |
267 | u64 db_trigger_phy; |
292 | u64 db_trigger_phy; |
268 | u16 db_id; |
293 | u16 db_id; |
Line 269... | Line 294... | ||
269 | 294 | ||
Line 270... | Line 295... | ||
270 | struct guc_execlist_context lrc[I915_NUM_RINGS]; |
295 | struct guc_execlist_context lrc[GUC_MAX_ENGINES_NUM]; |
Line 271... | Line 296... | ||
271 | 296 | ||
Line 297... | Line 322... | ||
297 | #define GUC_POWER_D0 1 |
322 | #define GUC_POWER_D0 1 |
298 | #define GUC_POWER_D1 2 |
323 | #define GUC_POWER_D1 2 |
299 | #define GUC_POWER_D2 3 |
324 | #define GUC_POWER_D2 3 |
300 | #define GUC_POWER_D3 4 |
325 | #define GUC_POWER_D3 4 |
Line -... | Line 326... | ||
- | 326 | ||
- | 327 | /* Scheduling policy settings */ |
|
- | 328 | ||
- | 329 | /* Reset engine upon preempt failure */ |
|
- | 330 | #define POLICY_RESET_ENGINE (1<<0) |
|
- | 331 | /* Preempt to idle on quantum expiry */ |
|
- | 332 | #define POLICY_PREEMPT_TO_IDLE (1<<1) |
|
- | 333 | ||
- | 334 | #define POLICY_MAX_NUM_WI 15 |
|
- | 335 | ||
- | 336 | struct guc_policy { |
|
- | 337 | /* Time for one workload to execute. (in micro seconds) */ |
|
- | 338 | u32 execution_quantum; |
|
- | 339 | u32 reserved1; |
|
- | 340 | ||
- | 341 | /* Time to wait for a preemption request to completed before issuing a |
|
- | 342 | * reset. (in micro seconds). */ |
|
- | 343 | u32 preemption_time; |
|
- | 344 | ||
- | 345 | /* How much time to allow to run after the first fault is observed. |
|
- | 346 | * Then preempt afterwards. (in micro seconds) */ |
|
- | 347 | u32 fault_time; |
|
- | 348 | ||
- | 349 | u32 policy_flags; |
|
- | 350 | u32 reserved[2]; |
|
- | 351 | } __packed; |
|
- | 352 | ||
- | 353 | struct guc_policies { |
|
- | 354 | struct guc_policy policy[GUC_CTX_PRIORITY_NUM][GUC_MAX_ENGINES_NUM]; |
|
- | 355 | ||
- | 356 | /* In micro seconds. How much time to allow before DPC processing is |
|
- | 357 | * called back via interrupt (to prevent DPC queue drain starving). |
|
- | 358 | * Typically 1000s of micro seconds (example only, not granularity). */ |
|
- | 359 | u32 dpc_promote_time; |
|
- | 360 | ||
- | 361 | /* Must be set to take these new values. */ |
|
- | 362 | u32 is_valid; |
|
- | 363 | ||
- | 364 | /* Max number of WIs to process per call. A large value may keep CS |
|
- | 365 | * idle. */ |
|
- | 366 | u32 max_num_work_items; |
|
- | 367 | ||
- | 368 | u32 reserved[19]; |
|
- | 369 | } __packed; |
|
- | 370 | ||
- | 371 | /* GuC MMIO reg state struct */ |
|
- | 372 | ||
- | 373 | #define GUC_REGSET_FLAGS_NONE 0x0 |
|
- | 374 | #define GUC_REGSET_POWERCYCLE 0x1 |
|
- | 375 | #define GUC_REGSET_MASKED 0x2 |
|
- | 376 | #define GUC_REGSET_ENGINERESET 0x4 |
|
- | 377 | #define GUC_REGSET_SAVE_DEFAULT_VALUE 0x8 |
|
- | 378 | #define GUC_REGSET_SAVE_CURRENT_VALUE 0x10 |
|
- | 379 | ||
- | 380 | #define GUC_REGSET_MAX_REGISTERS 25 |
|
- | 381 | #define GUC_MMIO_WHITE_LIST_START 0x24d0 |
|
- | 382 | #define GUC_MMIO_WHITE_LIST_MAX 12 |
|
- | 383 | #define GUC_S3_SAVE_SPACE_PAGES 10 |
|
- | 384 | ||
- | 385 | struct guc_mmio_regset { |
|
- | 386 | struct __packed { |
|
- | 387 | u32 offset; |
|
- | 388 | u32 value; |
|
- | 389 | u32 flags; |
|
- | 390 | } registers[GUC_REGSET_MAX_REGISTERS]; |
|
- | 391 | ||
- | 392 | u32 values_valid; |
|
- | 393 | u32 number_of_registers; |
|
- | 394 | } __packed; |
|
- | 395 | ||
- | 396 | struct guc_mmio_reg_state { |
|
- | 397 | struct guc_mmio_regset global_reg; |
|
- | 398 | struct guc_mmio_regset engine_reg[GUC_MAX_ENGINES_NUM]; |
|
- | 399 | ||
- | 400 | /* MMIO registers that are set as non privileged */ |
|
- | 401 | struct __packed { |
|
- | 402 | u32 mmio_start; |
|
- | 403 | u32 offsets[GUC_MMIO_WHITE_LIST_MAX]; |
|
- | 404 | u32 count; |
|
- | 405 | } mmio_white_list[GUC_MAX_ENGINES_NUM]; |
|
- | 406 | } __packed; |
|
- | 407 | ||
- | 408 | /* GuC Additional Data Struct */ |
|
- | 409 | ||
- | 410 | struct guc_ads { |
|
- | 411 | u32 reg_state_addr; |
|
- | 412 | u32 reg_state_buffer; |
|
- | 413 | u32 golden_context_lrca; |
|
- | 414 | u32 scheduler_policies; |
|
- | 415 | u32 reserved0[3]; |
|
- | 416 | u32 eng_state_size[GUC_MAX_ENGINES_NUM]; |
|
- | 417 | u32 reserved2[4]; |
|
- | 418 | } __packed; |
|
301 | 419 | ||
302 | /* This Action will be programmed in C180 - SOFT_SCRATCH_O_REG */ |
420 | /* This Action will be programmed in C180 - SOFT_SCRATCH_O_REG */ |
303 | enum host2guc_action { |
421 | enum host2guc_action { |
304 | HOST2GUC_ACTION_DEFAULT = 0x0, |
422 | HOST2GUC_ACTION_DEFAULT = 0x0, |
305 | HOST2GUC_ACTION_SAMPLE_FORCEWAKE = 0x6, |
423 | HOST2GUC_ACTION_SAMPLE_FORCEWAKE = 0x6, |