Subversion Repositories Kolibri OS

Rev

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,