Subversion Repositories Kolibri OS

Rev

Rev 4560 | Rev 5128 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4560 Rev 5060
1
/*
1
/*
2
 * Copyright © 2008-2010 Intel Corporation
2
 * Copyright © 2008-2010 Intel Corporation
3
 *
3
 *
4
 * Permission is hereby granted, free of charge, to any person obtaining a
4
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * copy of this software and associated documentation files (the "Software"),
5
 * copy of this software and associated documentation files (the "Software"),
6
 * to deal in the Software without restriction, including without limitation
6
 * to deal in the Software without restriction, including without limitation
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
7
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * and/or sell copies of the Software, and to permit persons to whom the
8
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * Software is furnished to do so, subject to the following conditions:
9
 * Software is furnished to do so, subject to the following conditions:
10
 *
10
 *
11
 * The above copyright notice and this permission notice (including the next
11
 * The above copyright notice and this permission notice (including the next
12
 * paragraph) shall be included in all copies or substantial portions of the
12
 * paragraph) shall be included in all copies or substantial portions of the
13
 * Software.
13
 * Software.
14
 *
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21
 * IN THE SOFTWARE.
21
 * IN THE SOFTWARE.
22
 *
22
 *
23
 * Authors:
23
 * Authors:
24
 *    Eric Anholt 
24
 *    Eric Anholt 
25
 *    Zou Nan hai 
25
 *    Zou Nan hai 
26
 *    Xiang Hai hao
26
 *    Xiang Hai hao
27
 *
27
 *
28
 */
28
 */
29
 
29
 
30
#include 
30
#include 
31
#include "i915_drv.h"
31
#include "i915_drv.h"
32
#include 
32
#include 
33
#include "i915_trace.h"
33
#include "i915_trace.h"
34
#include "intel_drv.h"
34
#include "intel_drv.h"
-
 
35
 
-
 
36
/* Early gen2 devices have a cacheline of just 32 bytes, using 64 is overkill,
-
 
37
 * but keeps the logic simple. Indeed, the whole purpose of this macro is just
-
 
38
 * to give some inclination as to some of the magic values used in the various
-
 
39
 * workarounds!
-
 
40
 */
-
 
41
#define CACHELINE_BYTES 64
35
 
42
 
36
static inline int ring_space(struct intel_ring_buffer *ring)
43
static inline int __ring_space(int head, int tail, int size)
37
{
44
{
38
	int space = (ring->head & HEAD_ADDR) - (ring->tail + I915_RING_FREE_SPACE);
45
	int space = head - (tail + I915_RING_FREE_SPACE);
39
	if (space < 0)
46
	if (space < 0)
40
		space += ring->size;
47
		space += size;
41
	return space;
48
	return space;
42
}
49
}
43
 
50
 
-
 
51
static inline int ring_space(struct intel_ringbuffer *ringbuf)
-
 
52
{
-
 
53
	return __ring_space(ringbuf->head & HEAD_ADDR, ringbuf->tail, ringbuf->size);
-
 
54
}
-
 
55
 
44
void __intel_ring_advance(struct intel_ring_buffer *ring)
56
static bool intel_ring_stopped(struct intel_engine_cs *ring)
45
{
57
{
-
 
58
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
-
 
59
	return dev_priv->gpu_error.stop_rings & intel_ring_flag(ring);
-
 
60
}
-
 
61
 
-
 
62
void __intel_ring_advance(struct intel_engine_cs *ring)
46
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
63
{
47
 
64
	struct intel_ringbuffer *ringbuf = ring->buffer;
48
	ring->tail &= ring->size - 1;
65
	ringbuf->tail &= ringbuf->size - 1;
49
	if (dev_priv->gpu_error.stop_rings & intel_ring_flag(ring))
66
	if (intel_ring_stopped(ring))
50
		return;
67
		return;
51
	ring->write_tail(ring, ring->tail);
68
	ring->write_tail(ring, ringbuf->tail);
52
}
69
}
53
 
70
 
54
static int
71
static int
55
gen2_render_ring_flush(struct intel_ring_buffer *ring,
72
gen2_render_ring_flush(struct intel_engine_cs *ring,
56
		       u32	invalidate_domains,
73
		       u32	invalidate_domains,
57
		       u32	flush_domains)
74
		       u32	flush_domains)
58
{
75
{
59
	u32 cmd;
76
	u32 cmd;
60
	int ret;
77
	int ret;
61
 
78
 
62
	cmd = MI_FLUSH;
79
	cmd = MI_FLUSH;
63
	if (((invalidate_domains|flush_domains) & I915_GEM_DOMAIN_RENDER) == 0)
80
	if (((invalidate_domains|flush_domains) & I915_GEM_DOMAIN_RENDER) == 0)
64
		cmd |= MI_NO_WRITE_FLUSH;
81
		cmd |= MI_NO_WRITE_FLUSH;
65
 
82
 
66
	if (invalidate_domains & I915_GEM_DOMAIN_SAMPLER)
83
	if (invalidate_domains & I915_GEM_DOMAIN_SAMPLER)
67
		cmd |= MI_READ_FLUSH;
84
		cmd |= MI_READ_FLUSH;
68
 
85
 
69
	ret = intel_ring_begin(ring, 2);
86
	ret = intel_ring_begin(ring, 2);
70
	if (ret)
87
	if (ret)
71
		return ret;
88
		return ret;
72
 
89
 
73
	intel_ring_emit(ring, cmd);
90
	intel_ring_emit(ring, cmd);
74
	intel_ring_emit(ring, MI_NOOP);
91
	intel_ring_emit(ring, MI_NOOP);
75
	intel_ring_advance(ring);
92
	intel_ring_advance(ring);
76
 
93
 
77
	return 0;
94
	return 0;
78
}
95
}
79
 
96
 
80
static int
97
static int
81
gen4_render_ring_flush(struct intel_ring_buffer *ring,
98
gen4_render_ring_flush(struct intel_engine_cs *ring,
82
		  u32	invalidate_domains,
99
		  u32	invalidate_domains,
83
		  u32	flush_domains)
100
		  u32	flush_domains)
84
{
101
{
85
	struct drm_device *dev = ring->dev;
102
	struct drm_device *dev = ring->dev;
86
	u32 cmd;
103
	u32 cmd;
87
	int ret;
104
	int ret;
88
 
105
 
89
	/*
106
	/*
90
	 * read/write caches:
107
	 * read/write caches:
91
	 *
108
	 *
92
	 * I915_GEM_DOMAIN_RENDER is always invalidated, but is
109
	 * I915_GEM_DOMAIN_RENDER is always invalidated, but is
93
	 * only flushed if MI_NO_WRITE_FLUSH is unset.  On 965, it is
110
	 * only flushed if MI_NO_WRITE_FLUSH is unset.  On 965, it is
94
	 * also flushed at 2d versus 3d pipeline switches.
111
	 * also flushed at 2d versus 3d pipeline switches.
95
	 *
112
	 *
96
	 * read-only caches:
113
	 * read-only caches:
97
	 *
114
	 *
98
	 * I915_GEM_DOMAIN_SAMPLER is flushed on pre-965 if
115
	 * I915_GEM_DOMAIN_SAMPLER is flushed on pre-965 if
99
	 * MI_READ_FLUSH is set, and is always flushed on 965.
116
	 * MI_READ_FLUSH is set, and is always flushed on 965.
100
	 *
117
	 *
101
	 * I915_GEM_DOMAIN_COMMAND may not exist?
118
	 * I915_GEM_DOMAIN_COMMAND may not exist?
102
	 *
119
	 *
103
	 * I915_GEM_DOMAIN_INSTRUCTION, which exists on 965, is
120
	 * I915_GEM_DOMAIN_INSTRUCTION, which exists on 965, is
104
	 * invalidated when MI_EXE_FLUSH is set.
121
	 * invalidated when MI_EXE_FLUSH is set.
105
	 *
122
	 *
106
	 * I915_GEM_DOMAIN_VERTEX, which exists on 965, is
123
	 * I915_GEM_DOMAIN_VERTEX, which exists on 965, is
107
	 * invalidated with every MI_FLUSH.
124
	 * invalidated with every MI_FLUSH.
108
	 *
125
	 *
109
	 * TLBs:
126
	 * TLBs:
110
	 *
127
	 *
111
	 * On 965, TLBs associated with I915_GEM_DOMAIN_COMMAND
128
	 * On 965, TLBs associated with I915_GEM_DOMAIN_COMMAND
112
	 * and I915_GEM_DOMAIN_CPU in are invalidated at PTE write and
129
	 * and I915_GEM_DOMAIN_CPU in are invalidated at PTE write and
113
	 * I915_GEM_DOMAIN_RENDER and I915_GEM_DOMAIN_SAMPLER
130
	 * I915_GEM_DOMAIN_RENDER and I915_GEM_DOMAIN_SAMPLER
114
	 * are flushed at any MI_FLUSH.
131
	 * are flushed at any MI_FLUSH.
115
	 */
132
	 */
116
 
133
 
117
	cmd = MI_FLUSH | MI_NO_WRITE_FLUSH;
134
	cmd = MI_FLUSH | MI_NO_WRITE_FLUSH;
118
	if ((invalidate_domains|flush_domains) & I915_GEM_DOMAIN_RENDER)
135
	if ((invalidate_domains|flush_domains) & I915_GEM_DOMAIN_RENDER)
119
		cmd &= ~MI_NO_WRITE_FLUSH;
136
		cmd &= ~MI_NO_WRITE_FLUSH;
120
	if (invalidate_domains & I915_GEM_DOMAIN_INSTRUCTION)
137
	if (invalidate_domains & I915_GEM_DOMAIN_INSTRUCTION)
121
		cmd |= MI_EXE_FLUSH;
138
		cmd |= MI_EXE_FLUSH;
122
 
139
 
123
	if (invalidate_domains & I915_GEM_DOMAIN_COMMAND &&
140
	if (invalidate_domains & I915_GEM_DOMAIN_COMMAND &&
124
	    (IS_G4X(dev) || IS_GEN5(dev)))
141
	    (IS_G4X(dev) || IS_GEN5(dev)))
125
		cmd |= MI_INVALIDATE_ISP;
142
		cmd |= MI_INVALIDATE_ISP;
126
 
143
 
127
	ret = intel_ring_begin(ring, 2);
144
	ret = intel_ring_begin(ring, 2);
128
	if (ret)
145
	if (ret)
129
		return ret;
146
		return ret;
130
 
147
 
131
	intel_ring_emit(ring, cmd);
148
	intel_ring_emit(ring, cmd);
132
	intel_ring_emit(ring, MI_NOOP);
149
	intel_ring_emit(ring, MI_NOOP);
133
	intel_ring_advance(ring);
150
	intel_ring_advance(ring);
134
 
151
 
135
	return 0;
152
	return 0;
136
}
153
}
137
 
154
 
138
/**
155
/**
139
 * Emits a PIPE_CONTROL with a non-zero post-sync operation, for
156
 * Emits a PIPE_CONTROL with a non-zero post-sync operation, for
140
 * implementing two workarounds on gen6.  From section 1.4.7.1
157
 * implementing two workarounds on gen6.  From section 1.4.7.1
141
 * "PIPE_CONTROL" of the Sandy Bridge PRM volume 2 part 1:
158
 * "PIPE_CONTROL" of the Sandy Bridge PRM volume 2 part 1:
142
 *
159
 *
143
 * [DevSNB-C+{W/A}] Before any depth stall flush (including those
160
 * [DevSNB-C+{W/A}] Before any depth stall flush (including those
144
 * produced by non-pipelined state commands), software needs to first
161
 * produced by non-pipelined state commands), software needs to first
145
 * send a PIPE_CONTROL with no bits set except Post-Sync Operation !=
162
 * send a PIPE_CONTROL with no bits set except Post-Sync Operation !=
146
 * 0.
163
 * 0.
147
 *
164
 *
148
 * [Dev-SNB{W/A}]: Before a PIPE_CONTROL with Write Cache Flush Enable
165
 * [Dev-SNB{W/A}]: Before a PIPE_CONTROL with Write Cache Flush Enable
149
 * =1, a PIPE_CONTROL with any non-zero post-sync-op is required.
166
 * =1, a PIPE_CONTROL with any non-zero post-sync-op is required.
150
 *
167
 *
151
 * And the workaround for these two requires this workaround first:
168
 * And the workaround for these two requires this workaround first:
152
 *
169
 *
153
 * [Dev-SNB{W/A}]: Pipe-control with CS-stall bit set must be sent
170
 * [Dev-SNB{W/A}]: Pipe-control with CS-stall bit set must be sent
154
 * BEFORE the pipe-control with a post-sync op and no write-cache
171
 * BEFORE the pipe-control with a post-sync op and no write-cache
155
 * flushes.
172
 * flushes.
156
 *
173
 *
157
 * And this last workaround is tricky because of the requirements on
174
 * And this last workaround is tricky because of the requirements on
158
 * that bit.  From section 1.4.7.2.3 "Stall" of the Sandy Bridge PRM
175
 * that bit.  From section 1.4.7.2.3 "Stall" of the Sandy Bridge PRM
159
 * volume 2 part 1:
176
 * volume 2 part 1:
160
 *
177
 *
161
 *     "1 of the following must also be set:
178
 *     "1 of the following must also be set:
162
 *      - Render Target Cache Flush Enable ([12] of DW1)
179
 *      - Render Target Cache Flush Enable ([12] of DW1)
163
 *      - Depth Cache Flush Enable ([0] of DW1)
180
 *      - Depth Cache Flush Enable ([0] of DW1)
164
 *      - Stall at Pixel Scoreboard ([1] of DW1)
181
 *      - Stall at Pixel Scoreboard ([1] of DW1)
165
 *      - Depth Stall ([13] of DW1)
182
 *      - Depth Stall ([13] of DW1)
166
 *      - Post-Sync Operation ([13] of DW1)
183
 *      - Post-Sync Operation ([13] of DW1)
167
 *      - Notify Enable ([8] of DW1)"
184
 *      - Notify Enable ([8] of DW1)"
168
 *
185
 *
169
 * The cache flushes require the workaround flush that triggered this
186
 * The cache flushes require the workaround flush that triggered this
170
 * one, so we can't use it.  Depth stall would trigger the same.
187
 * one, so we can't use it.  Depth stall would trigger the same.
171
 * Post-sync nonzero is what triggered this second workaround, so we
188
 * Post-sync nonzero is what triggered this second workaround, so we
172
 * can't use that one either.  Notify enable is IRQs, which aren't
189
 * can't use that one either.  Notify enable is IRQs, which aren't
173
 * really our business.  That leaves only stall at scoreboard.
190
 * really our business.  That leaves only stall at scoreboard.
174
 */
191
 */
175
static int
192
static int
176
intel_emit_post_sync_nonzero_flush(struct intel_ring_buffer *ring)
193
intel_emit_post_sync_nonzero_flush(struct intel_engine_cs *ring)
177
{
194
{
178
	u32 scratch_addr = ring->scratch.gtt_offset + 128;
195
	u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES;
179
	int ret;
196
	int ret;
180
 
197
 
181
 
198
 
182
	ret = intel_ring_begin(ring, 6);
199
	ret = intel_ring_begin(ring, 6);
183
	if (ret)
200
	if (ret)
184
		return ret;
201
		return ret;
185
 
202
 
186
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
203
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
187
	intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
204
	intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
188
			PIPE_CONTROL_STALL_AT_SCOREBOARD);
205
			PIPE_CONTROL_STALL_AT_SCOREBOARD);
189
	intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
206
	intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
190
	intel_ring_emit(ring, 0); /* low dword */
207
	intel_ring_emit(ring, 0); /* low dword */
191
	intel_ring_emit(ring, 0); /* high dword */
208
	intel_ring_emit(ring, 0); /* high dword */
192
	intel_ring_emit(ring, MI_NOOP);
209
	intel_ring_emit(ring, MI_NOOP);
193
	intel_ring_advance(ring);
210
	intel_ring_advance(ring);
194
 
211
 
195
	ret = intel_ring_begin(ring, 6);
212
	ret = intel_ring_begin(ring, 6);
196
	if (ret)
213
	if (ret)
197
		return ret;
214
		return ret;
198
 
215
 
199
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
216
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(5));
200
	intel_ring_emit(ring, PIPE_CONTROL_QW_WRITE);
217
	intel_ring_emit(ring, PIPE_CONTROL_QW_WRITE);
201
	intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
218
	intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT); /* address */
202
	intel_ring_emit(ring, 0);
219
	intel_ring_emit(ring, 0);
203
	intel_ring_emit(ring, 0);
220
	intel_ring_emit(ring, 0);
204
	intel_ring_emit(ring, MI_NOOP);
221
	intel_ring_emit(ring, MI_NOOP);
205
	intel_ring_advance(ring);
222
	intel_ring_advance(ring);
206
 
223
 
207
	return 0;
224
	return 0;
208
}
225
}
209
 
226
 
210
static int
227
static int
211
gen6_render_ring_flush(struct intel_ring_buffer *ring,
228
gen6_render_ring_flush(struct intel_engine_cs *ring,
212
                         u32 invalidate_domains, u32 flush_domains)
229
                         u32 invalidate_domains, u32 flush_domains)
213
{
230
{
214
	u32 flags = 0;
231
	u32 flags = 0;
215
	u32 scratch_addr = ring->scratch.gtt_offset + 128;
232
	u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES;
216
	int ret;
233
	int ret;
217
 
234
 
218
	/* Force SNB workarounds for PIPE_CONTROL flushes */
235
	/* Force SNB workarounds for PIPE_CONTROL flushes */
219
	ret = intel_emit_post_sync_nonzero_flush(ring);
236
	ret = intel_emit_post_sync_nonzero_flush(ring);
220
	if (ret)
237
	if (ret)
221
		return ret;
238
		return ret;
222
 
239
 
223
	/* Just flush everything.  Experiments have shown that reducing the
240
	/* Just flush everything.  Experiments have shown that reducing the
224
	 * number of bits based on the write domains has little performance
241
	 * number of bits based on the write domains has little performance
225
	 * impact.
242
	 * impact.
226
	 */
243
	 */
227
	if (flush_domains) {
244
	if (flush_domains) {
228
		flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
245
		flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
229
		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
246
		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
230
		/*
247
		/*
231
		 * Ensure that any following seqno writes only happen
248
		 * Ensure that any following seqno writes only happen
232
		 * when the render cache is indeed flushed.
249
		 * when the render cache is indeed flushed.
233
		 */
250
		 */
234
		flags |= PIPE_CONTROL_CS_STALL;
251
		flags |= PIPE_CONTROL_CS_STALL;
235
	}
252
	}
236
	if (invalidate_domains) {
253
	if (invalidate_domains) {
237
		flags |= PIPE_CONTROL_TLB_INVALIDATE;
254
		flags |= PIPE_CONTROL_TLB_INVALIDATE;
238
		flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
255
		flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
239
		flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
256
		flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
240
		flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
257
		flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
241
		flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
258
		flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
242
		flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
259
		flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
243
		/*
260
		/*
244
		 * TLB invalidate requires a post-sync write.
261
		 * TLB invalidate requires a post-sync write.
245
		 */
262
		 */
246
		flags |= PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_CS_STALL;
263
		flags |= PIPE_CONTROL_QW_WRITE | PIPE_CONTROL_CS_STALL;
247
	}
264
	}
248
 
265
 
249
	ret = intel_ring_begin(ring, 4);
266
	ret = intel_ring_begin(ring, 4);
250
	if (ret)
267
	if (ret)
251
		return ret;
268
		return ret;
252
 
269
 
253
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
270
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
254
	intel_ring_emit(ring, flags);
271
	intel_ring_emit(ring, flags);
255
	intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT);
272
	intel_ring_emit(ring, scratch_addr | PIPE_CONTROL_GLOBAL_GTT);
256
	intel_ring_emit(ring, 0);
273
	intel_ring_emit(ring, 0);
257
	intel_ring_advance(ring);
274
	intel_ring_advance(ring);
258
 
275
 
259
	return 0;
276
	return 0;
260
}
277
}
261
 
278
 
262
static int
279
static int
263
gen7_render_ring_cs_stall_wa(struct intel_ring_buffer *ring)
280
gen7_render_ring_cs_stall_wa(struct intel_engine_cs *ring)
264
{
281
{
265
	int ret;
282
	int ret;
266
 
283
 
267
	ret = intel_ring_begin(ring, 4);
284
	ret = intel_ring_begin(ring, 4);
268
	if (ret)
285
	if (ret)
269
		return ret;
286
		return ret;
270
 
287
 
271
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
288
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
272
	intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
289
	intel_ring_emit(ring, PIPE_CONTROL_CS_STALL |
273
			      PIPE_CONTROL_STALL_AT_SCOREBOARD);
290
			      PIPE_CONTROL_STALL_AT_SCOREBOARD);
274
	intel_ring_emit(ring, 0);
291
	intel_ring_emit(ring, 0);
275
	intel_ring_emit(ring, 0);
292
	intel_ring_emit(ring, 0);
276
	intel_ring_advance(ring);
293
	intel_ring_advance(ring);
277
 
294
 
278
	return 0;
295
	return 0;
279
}
296
}
280
 
297
 
281
static int gen7_ring_fbc_flush(struct intel_ring_buffer *ring, u32 value)
298
static int gen7_ring_fbc_flush(struct intel_engine_cs *ring, u32 value)
282
{
299
{
283
	int ret;
300
	int ret;
284
 
301
 
285
	if (!ring->fbc_dirty)
302
	if (!ring->fbc_dirty)
286
		return 0;
303
		return 0;
287
 
304
 
288
	ret = intel_ring_begin(ring, 6);
305
	ret = intel_ring_begin(ring, 6);
289
	if (ret)
306
	if (ret)
290
		return ret;
307
		return ret;
291
	/* WaFbcNukeOn3DBlt:ivb/hsw */
308
	/* WaFbcNukeOn3DBlt:ivb/hsw */
292
	intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
309
	intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
293
	intel_ring_emit(ring, MSG_FBC_REND_STATE);
310
	intel_ring_emit(ring, MSG_FBC_REND_STATE);
294
	intel_ring_emit(ring, value);
311
	intel_ring_emit(ring, value);
295
	intel_ring_emit(ring, MI_STORE_REGISTER_MEM(1) | MI_SRM_LRM_GLOBAL_GTT);
312
	intel_ring_emit(ring, MI_STORE_REGISTER_MEM(1) | MI_SRM_LRM_GLOBAL_GTT);
296
	intel_ring_emit(ring, MSG_FBC_REND_STATE);
313
	intel_ring_emit(ring, MSG_FBC_REND_STATE);
297
	intel_ring_emit(ring, ring->scratch.gtt_offset + 256);
314
	intel_ring_emit(ring, ring->scratch.gtt_offset + 256);
298
	intel_ring_advance(ring);
315
	intel_ring_advance(ring);
299
 
316
 
300
	ring->fbc_dirty = false;
317
	ring->fbc_dirty = false;
301
	return 0;
318
	return 0;
302
}
319
}
303
 
320
 
304
static int
321
static int
305
gen7_render_ring_flush(struct intel_ring_buffer *ring,
322
gen7_render_ring_flush(struct intel_engine_cs *ring,
306
		       u32 invalidate_domains, u32 flush_domains)
323
		       u32 invalidate_domains, u32 flush_domains)
307
{
324
{
308
	u32 flags = 0;
325
	u32 flags = 0;
309
	u32 scratch_addr = ring->scratch.gtt_offset + 128;
326
	u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES;
310
	int ret;
327
	int ret;
311
 
328
 
312
	/*
329
	/*
313
	 * Ensure that any following seqno writes only happen when the render
330
	 * Ensure that any following seqno writes only happen when the render
314
	 * cache is indeed flushed.
331
	 * cache is indeed flushed.
315
	 *
332
	 *
316
	 * Workaround: 4th PIPE_CONTROL command (except the ones with only
333
	 * Workaround: 4th PIPE_CONTROL command (except the ones with only
317
	 * read-cache invalidate bits set) must have the CS_STALL bit set. We
334
	 * read-cache invalidate bits set) must have the CS_STALL bit set. We
318
	 * don't try to be clever and just set it unconditionally.
335
	 * don't try to be clever and just set it unconditionally.
319
	 */
336
	 */
320
	flags |= PIPE_CONTROL_CS_STALL;
337
	flags |= PIPE_CONTROL_CS_STALL;
321
 
338
 
322
	/* Just flush everything.  Experiments have shown that reducing the
339
	/* Just flush everything.  Experiments have shown that reducing the
323
	 * number of bits based on the write domains has little performance
340
	 * number of bits based on the write domains has little performance
324
	 * impact.
341
	 * impact.
325
	 */
342
	 */
326
	if (flush_domains) {
343
	if (flush_domains) {
327
	flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
344
	flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
328
		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
345
		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
329
	}
346
	}
330
	if (invalidate_domains) {
347
	if (invalidate_domains) {
331
		flags |= PIPE_CONTROL_TLB_INVALIDATE;
348
		flags |= PIPE_CONTROL_TLB_INVALIDATE;
332
	flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
349
	flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
333
	flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
350
	flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
334
	flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
351
	flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
335
	flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
352
	flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
336
	flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
353
	flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
337
		/*
354
		/*
338
		 * TLB invalidate requires a post-sync write.
355
		 * TLB invalidate requires a post-sync write.
339
		 */
356
		 */
340
		flags |= PIPE_CONTROL_QW_WRITE;
357
		flags |= PIPE_CONTROL_QW_WRITE;
341
		flags |= PIPE_CONTROL_GLOBAL_GTT_IVB;
358
		flags |= PIPE_CONTROL_GLOBAL_GTT_IVB;
342
 
359
 
343
		/* Workaround: we must issue a pipe_control with CS-stall bit
360
		/* Workaround: we must issue a pipe_control with CS-stall bit
344
		 * set before a pipe_control command that has the state cache
361
		 * set before a pipe_control command that has the state cache
345
		 * invalidate bit set. */
362
		 * invalidate bit set. */
346
		gen7_render_ring_cs_stall_wa(ring);
363
		gen7_render_ring_cs_stall_wa(ring);
347
	}
364
	}
348
 
365
 
349
	ret = intel_ring_begin(ring, 4);
366
	ret = intel_ring_begin(ring, 4);
350
	if (ret)
367
	if (ret)
351
		return ret;
368
		return ret;
352
 
369
 
353
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
370
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4));
354
	intel_ring_emit(ring, flags);
371
	intel_ring_emit(ring, flags);
355
	intel_ring_emit(ring, scratch_addr);
372
	intel_ring_emit(ring, scratch_addr);
356
	intel_ring_emit(ring, 0);
373
	intel_ring_emit(ring, 0);
357
	intel_ring_advance(ring);
374
	intel_ring_advance(ring);
358
 
375
 
359
	if (!invalidate_domains && flush_domains)
376
	if (!invalidate_domains && flush_domains)
360
		return gen7_ring_fbc_flush(ring, FBC_REND_NUKE);
377
		return gen7_ring_fbc_flush(ring, FBC_REND_NUKE);
361
 
378
 
362
	return 0;
379
	return 0;
363
}
380
}
364
 
381
 
365
static int
382
static int
-
 
383
gen8_emit_pipe_control(struct intel_engine_cs *ring,
-
 
384
		       u32 flags, u32 scratch_addr)
-
 
385
{
-
 
386
	int ret;
-
 
387
 
-
 
388
	ret = intel_ring_begin(ring, 6);
-
 
389
	if (ret)
-
 
390
		return ret;
-
 
391
 
-
 
392
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(6));
-
 
393
	intel_ring_emit(ring, flags);
-
 
394
	intel_ring_emit(ring, scratch_addr);
-
 
395
	intel_ring_emit(ring, 0);
-
 
396
	intel_ring_emit(ring, 0);
-
 
397
	intel_ring_emit(ring, 0);
-
 
398
	intel_ring_advance(ring);
-
 
399
 
-
 
400
	return 0;
-
 
401
}
-
 
402
 
-
 
403
static int
366
gen8_render_ring_flush(struct intel_ring_buffer *ring,
404
gen8_render_ring_flush(struct intel_engine_cs *ring,
367
		       u32 invalidate_domains, u32 flush_domains)
405
		       u32 invalidate_domains, u32 flush_domains)
368
{
406
{
369
	u32 flags = 0;
407
	u32 flags = 0;
370
	u32 scratch_addr = ring->scratch.gtt_offset + 128;
408
	u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES;
371
	int ret;
409
	int ret;
372
 
410
 
373
	flags |= PIPE_CONTROL_CS_STALL;
411
	flags |= PIPE_CONTROL_CS_STALL;
374
 
412
 
375
	if (flush_domains) {
413
	if (flush_domains) {
376
		flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
414
		flags |= PIPE_CONTROL_RENDER_TARGET_CACHE_FLUSH;
377
		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
415
		flags |= PIPE_CONTROL_DEPTH_CACHE_FLUSH;
378
	}
416
	}
379
	if (invalidate_domains) {
417
	if (invalidate_domains) {
380
		flags |= PIPE_CONTROL_TLB_INVALIDATE;
418
		flags |= PIPE_CONTROL_TLB_INVALIDATE;
381
		flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
419
		flags |= PIPE_CONTROL_INSTRUCTION_CACHE_INVALIDATE;
382
		flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
420
		flags |= PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE;
383
		flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
421
		flags |= PIPE_CONTROL_VF_CACHE_INVALIDATE;
384
		flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
422
		flags |= PIPE_CONTROL_CONST_CACHE_INVALIDATE;
385
		flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
423
		flags |= PIPE_CONTROL_STATE_CACHE_INVALIDATE;
386
		flags |= PIPE_CONTROL_QW_WRITE;
424
		flags |= PIPE_CONTROL_QW_WRITE;
387
		flags |= PIPE_CONTROL_GLOBAL_GTT_IVB;
425
		flags |= PIPE_CONTROL_GLOBAL_GTT_IVB;
388
	}
-
 
-
 
426
 
389
 
427
		/* WaCsStallBeforeStateCacheInvalidate:bdw,chv */
-
 
428
		ret = gen8_emit_pipe_control(ring,
-
 
429
					     PIPE_CONTROL_CS_STALL |
-
 
430
					     PIPE_CONTROL_STALL_AT_SCOREBOARD,
390
	ret = intel_ring_begin(ring, 6);
431
					     0);
391
	if (ret)
432
	if (ret)
-
 
433
		return ret;
392
		return ret;
-
 
393
 
-
 
394
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(6));
434
	}
395
	intel_ring_emit(ring, flags);
-
 
396
	intel_ring_emit(ring, scratch_addr);
-
 
397
	intel_ring_emit(ring, 0);
-
 
398
	intel_ring_emit(ring, 0);
-
 
399
	intel_ring_emit(ring, 0);
-
 
400
	intel_ring_advance(ring);
-
 
401
 
-
 
402
	return 0;
435
 
403
 
436
	return gen8_emit_pipe_control(ring, flags, scratch_addr);
404
}
437
}
405
 
438
 
406
static void ring_write_tail(struct intel_ring_buffer *ring,
439
static void ring_write_tail(struct intel_engine_cs *ring,
407
			    u32 value)
440
			    u32 value)
408
{
441
{
409
	drm_i915_private_t *dev_priv = ring->dev->dev_private;
442
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
410
	I915_WRITE_TAIL(ring, value);
443
	I915_WRITE_TAIL(ring, value);
411
}
444
}
412
 
445
 
413
u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
446
u64 intel_ring_get_active_head(struct intel_engine_cs *ring)
414
{
447
{
415
	drm_i915_private_t *dev_priv = ring->dev->dev_private;
448
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
416
	u32 acthd_reg = INTEL_INFO(ring->dev)->gen >= 4 ?
-
 
-
 
449
	u64 acthd;
-
 
450
 
-
 
451
	if (INTEL_INFO(ring->dev)->gen >= 8)
-
 
452
		acthd = I915_READ64_2x32(RING_ACTHD(ring->mmio_base),
-
 
453
					 RING_ACTHD_UDW(ring->mmio_base));
-
 
454
	else if (INTEL_INFO(ring->dev)->gen >= 4)
417
			RING_ACTHD(ring->mmio_base) : ACTHD;
455
		acthd = I915_READ(RING_ACTHD(ring->mmio_base));
-
 
456
	else
-
 
457
		acthd = I915_READ(ACTHD);
418
 
458
 
419
	return I915_READ(acthd_reg);
459
	return acthd;
420
}
460
}
421
 
461
 
422
static void ring_setup_phys_status_page(struct intel_ring_buffer *ring)
462
static void ring_setup_phys_status_page(struct intel_engine_cs *ring)
423
{
463
{
424
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
464
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
425
	u32 addr;
465
	u32 addr;
426
 
466
 
427
	addr = dev_priv->status_page_dmah->busaddr;
467
	addr = dev_priv->status_page_dmah->busaddr;
428
	if (INTEL_INFO(ring->dev)->gen >= 4)
468
	if (INTEL_INFO(ring->dev)->gen >= 4)
429
		addr |= (dev_priv->status_page_dmah->busaddr >> 28) & 0xf0;
469
		addr |= (dev_priv->status_page_dmah->busaddr >> 28) & 0xf0;
430
	I915_WRITE(HWS_PGA, addr);
470
	I915_WRITE(HWS_PGA, addr);
431
}
471
}
432
 
472
 
433
static int init_ring_common(struct intel_ring_buffer *ring)
473
static bool stop_ring(struct intel_engine_cs *ring)
434
{
-
 
435
	struct drm_device *dev = ring->dev;
474
{
436
	drm_i915_private_t *dev_priv = dev->dev_private;
-
 
437
	struct drm_i915_gem_object *obj = ring->obj;
-
 
438
	int ret = 0;
-
 
-
 
475
	struct drm_i915_private *dev_priv = to_i915(ring->dev);
439
	u32 head;
476
 
440
 
-
 
441
	gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
477
	if (!IS_GEN2(ring->dev)) {
442
 
478
		I915_WRITE_MODE(ring, _MASKED_BIT_ENABLE(STOP_RING));
-
 
479
		if (wait_for_atomic((I915_READ_MODE(ring) & MODE_IDLE) != 0, 1000)) {
443
	if (I915_NEED_GFX_HWS(dev))
480
			DRM_ERROR("%s :timed out trying to stop ring\n", ring->name);
444
		intel_ring_setup_status_page(ring);
-
 
-
 
481
			return false;
445
	else
-
 
446
		ring_setup_phys_status_page(ring);
482
		}
447
 
483
	}
448
	/* Stop the ring if it's running. */
484
 
449
	I915_WRITE_CTL(ring, 0);
485
	I915_WRITE_CTL(ring, 0);
450
	I915_WRITE_HEAD(ring, 0);
486
	I915_WRITE_HEAD(ring, 0);
451
	ring->write_tail(ring, 0);
487
	ring->write_tail(ring, 0);
-
 
488
 
-
 
489
	if (!IS_GEN2(ring->dev)) {
-
 
490
		(void)I915_READ_CTL(ring);
-
 
491
		I915_WRITE_MODE(ring, _MASKED_BIT_DISABLE(STOP_RING));
-
 
492
	}
452
 
493
 
-
 
494
	return (I915_READ_HEAD(ring) & HEAD_ADDR) == 0;
-
 
495
}
-
 
496
 
-
 
497
static int init_ring_common(struct intel_engine_cs *ring)
-
 
498
{
-
 
499
	struct drm_device *dev = ring->dev;
-
 
500
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
501
	struct intel_ringbuffer *ringbuf = ring->buffer;
-
 
502
	struct drm_i915_gem_object *obj = ringbuf->obj;
-
 
503
	int ret = 0;
-
 
504
 
-
 
505
	gen6_gt_force_wake_get(dev_priv, FORCEWAKE_ALL);
453
	head = I915_READ_HEAD(ring) & HEAD_ADDR;
506
 
454
 
-
 
455
	/* G45 ring initialization fails to reset head to zero */
507
	if (!stop_ring(ring)) {
456
	if (head != 0) {
508
		/* G45 ring initialization often fails to reset head to zero */
457
		DRM_DEBUG_KMS("%s head not reset to zero "
509
		DRM_DEBUG_KMS("%s head not reset to zero "
458
			      "ctl %08x head %08x tail %08x start %08x\n",
510
			      "ctl %08x head %08x tail %08x start %08x\n",
459
			      ring->name,
511
			      ring->name,
460
			      I915_READ_CTL(ring),
512
			      I915_READ_CTL(ring),
461
			      I915_READ_HEAD(ring),
513
			      I915_READ_HEAD(ring),
462
			      I915_READ_TAIL(ring),
514
			      I915_READ_TAIL(ring),
463
			      I915_READ_START(ring));
515
			      I915_READ_START(ring));
464
 
516
 
465
		I915_WRITE_HEAD(ring, 0);
-
 
466
 
-
 
467
		if (I915_READ_HEAD(ring) & HEAD_ADDR) {
517
		if (!stop_ring(ring)) {
468
			DRM_ERROR("failed to set %s head to zero "
518
			DRM_ERROR("failed to set %s head to zero "
469
				  "ctl %08x head %08x tail %08x start %08x\n",
519
				  "ctl %08x head %08x tail %08x start %08x\n",
470
				  ring->name,
520
				  ring->name,
471
				  I915_READ_CTL(ring),
521
				  I915_READ_CTL(ring),
472
				  I915_READ_HEAD(ring),
522
				  I915_READ_HEAD(ring),
473
				  I915_READ_TAIL(ring),
523
				  I915_READ_TAIL(ring),
474
				  I915_READ_START(ring));
524
				  I915_READ_START(ring));
-
 
525
			ret = -EIO;
-
 
526
			goto out;
475
		}
527
		}
476
	}
528
	}
-
 
529
 
-
 
530
	if (I915_NEED_GFX_HWS(dev))
-
 
531
		intel_ring_setup_status_page(ring);
-
 
532
	else
-
 
533
		ring_setup_phys_status_page(ring);
-
 
534
 
-
 
535
	/* Enforce ordering by reading HEAD register back */
-
 
536
	I915_READ_HEAD(ring);
477
 
537
 
478
	/* Initialize the ring. This must happen _after_ we've cleared the ring
538
	/* Initialize the ring. This must happen _after_ we've cleared the ring
479
	 * registers with the above sequence (the readback of the HEAD registers
539
	 * registers with the above sequence (the readback of the HEAD registers
480
	 * also enforces ordering), otherwise the hw might lose the new ring
540
	 * also enforces ordering), otherwise the hw might lose the new ring
481
	 * register values. */
541
	 * register values. */
482
	I915_WRITE_START(ring, i915_gem_obj_ggtt_offset(obj));
542
	I915_WRITE_START(ring, i915_gem_obj_ggtt_offset(obj));
483
	I915_WRITE_CTL(ring,
543
	I915_WRITE_CTL(ring,
484
			((ring->size - PAGE_SIZE) & RING_NR_PAGES)
544
			((ringbuf->size - PAGE_SIZE) & RING_NR_PAGES)
485
			| RING_VALID);
545
			| RING_VALID);
486
 
546
 
487
	/* If the head is still not zero, the ring is dead */
547
	/* If the head is still not zero, the ring is dead */
488
	if (wait_for((I915_READ_CTL(ring) & RING_VALID) != 0 &&
548
	if (wait_for((I915_READ_CTL(ring) & RING_VALID) != 0 &&
489
		     I915_READ_START(ring) == i915_gem_obj_ggtt_offset(obj) &&
549
		     I915_READ_START(ring) == i915_gem_obj_ggtt_offset(obj) &&
490
		     (I915_READ_HEAD(ring) & HEAD_ADDR) == 0, 50)) {
550
		     (I915_READ_HEAD(ring) & HEAD_ADDR) == 0, 50)) {
491
		DRM_ERROR("%s initialization failed "
551
		DRM_ERROR("%s initialization failed "
492
				"ctl %08x head %08x tail %08x start %08x\n",
552
			  "ctl %08x (valid? %d) head %08x tail %08x start %08x [expected %08lx]\n",
493
				ring->name,
553
				ring->name,
494
				I915_READ_CTL(ring),
-
 
495
				I915_READ_HEAD(ring),
554
			  I915_READ_CTL(ring), I915_READ_CTL(ring) & RING_VALID,
496
				I915_READ_TAIL(ring),
555
			  I915_READ_HEAD(ring), I915_READ_TAIL(ring),
497
				I915_READ_START(ring));
556
			  I915_READ_START(ring), (unsigned long)i915_gem_obj_ggtt_offset(obj));
498
		ret = -EIO;
557
		ret = -EIO;
499
		goto out;
558
		goto out;
500
	}
559
	}
-
 
560
 
501
 
561
 
502
		ring->head = I915_READ_HEAD(ring);
562
		ringbuf->head = I915_READ_HEAD(ring);
503
		ring->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
563
		ringbuf->tail = I915_READ_TAIL(ring) & TAIL_ADDR;
504
		ring->space = ring_space(ring);
564
		ringbuf->space = ring_space(ringbuf);
505
		ring->last_retired_head = -1;
565
		ringbuf->last_retired_head = -1;
506
 
566
 
507
	memset(&ring->hangcheck, 0, sizeof(ring->hangcheck));
567
	memset(&ring->hangcheck, 0, sizeof(ring->hangcheck));
508
 
568
 
509
out:
569
out:
510
	gen6_gt_force_wake_put(dev_priv, FORCEWAKE_ALL);
570
	gen6_gt_force_wake_put(dev_priv, FORCEWAKE_ALL);
511
 
571
 
512
	return ret;
572
	return ret;
513
}
573
}
514
 
574
 
515
static int
575
static int
516
init_pipe_control(struct intel_ring_buffer *ring)
576
init_pipe_control(struct intel_engine_cs *ring)
517
{
577
{
518
	int ret;
578
	int ret;
519
 
579
 
520
	if (ring->scratch.obj)
580
	if (ring->scratch.obj)
521
		return 0;
581
		return 0;
522
 
582
 
523
	ring->scratch.obj = i915_gem_alloc_object(ring->dev, 4096);
583
	ring->scratch.obj = i915_gem_alloc_object(ring->dev, 4096);
524
	if (ring->scratch.obj == NULL) {
584
	if (ring->scratch.obj == NULL) {
525
		DRM_ERROR("Failed to allocate seqno page\n");
585
		DRM_ERROR("Failed to allocate seqno page\n");
526
		ret = -ENOMEM;
586
		ret = -ENOMEM;
527
		goto err;
587
		goto err;
528
	}
588
	}
529
 
589
 
-
 
590
	ret = i915_gem_object_set_cache_level(ring->scratch.obj, I915_CACHE_LLC);
-
 
591
	if (ret)
530
	i915_gem_object_set_cache_level(ring->scratch.obj, I915_CACHE_LLC);
592
		goto err_unref;
531
 
593
 
532
	ret = i915_gem_obj_ggtt_pin(ring->scratch.obj, 4096, true, false);
594
	ret = i915_gem_obj_ggtt_pin(ring->scratch.obj, 4096, 0);
533
	if (ret)
595
	if (ret)
534
		goto err_unref;
596
		goto err_unref;
535
 
597
 
536
	ring->scratch.gtt_offset = i915_gem_obj_ggtt_offset(ring->scratch.obj);
598
	ring->scratch.gtt_offset = i915_gem_obj_ggtt_offset(ring->scratch.obj);
537
    ring->scratch.cpu_page = (void*)MapIoMem((addr_t)sg_page(ring->scratch.obj->pages->sgl),4096, PG_SW|0x100);
599
    ring->scratch.cpu_page = (void*)MapIoMem((addr_t)sg_page(ring->scratch.obj->pages->sgl),4096, PG_SW|0x100);
538
	if (ring->scratch.cpu_page == NULL) {
600
	if (ring->scratch.cpu_page == NULL) {
539
		ret = -ENOMEM;
601
		ret = -ENOMEM;
540
		goto err_unpin;
602
		goto err_unpin;
541
	}
603
	}
542
 
604
 
543
	DRM_DEBUG_DRIVER("%s pipe control offset: 0x%08x\n",
605
	DRM_DEBUG_DRIVER("%s pipe control offset: 0x%08x\n",
544
			 ring->name, ring->scratch.gtt_offset);
606
			 ring->name, ring->scratch.gtt_offset);
545
	return 0;
607
	return 0;
546
 
608
 
547
err_unpin:
609
err_unpin:
548
	i915_gem_object_unpin(ring->scratch.obj);
610
	i915_gem_object_ggtt_unpin(ring->scratch.obj);
549
err_unref:
611
err_unref:
550
	drm_gem_object_unreference(&ring->scratch.obj->base);
612
	drm_gem_object_unreference(&ring->scratch.obj->base);
551
err:
613
err:
552
	return ret;
614
	return ret;
553
}
615
}
554
 
616
 
555
static int init_render_ring(struct intel_ring_buffer *ring)
617
static int init_render_ring(struct intel_engine_cs *ring)
556
{
618
{
557
	struct drm_device *dev = ring->dev;
619
	struct drm_device *dev = ring->dev;
558
	struct drm_i915_private *dev_priv = dev->dev_private;
620
	struct drm_i915_private *dev_priv = dev->dev_private;
559
	int ret = init_ring_common(ring);
621
	int ret = init_ring_common(ring);
-
 
622
	if (ret)
-
 
623
		return ret;
-
 
624
 
560
 
625
	/* WaTimedSingleVertexDispatch:cl,bw,ctg,elk,ilk,snb */
561
	if (INTEL_INFO(dev)->gen > 3)
626
	if (INTEL_INFO(dev)->gen >= 4 && INTEL_INFO(dev)->gen < 7)
562
		I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH));
627
		I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(VS_TIMER_DISPATCH));
563
 
628
 
564
	/* We need to disable the AsyncFlip performance optimisations in order
629
	/* We need to disable the AsyncFlip performance optimisations in order
565
	 * to use MI_WAIT_FOR_EVENT within the CS. It should already be
630
	 * to use MI_WAIT_FOR_EVENT within the CS. It should already be
566
	 * programmed to '1' on all products.
631
	 * programmed to '1' on all products.
567
	 *
632
	 *
568
	 * WaDisableAsyncFlipPerfMode:snb,ivb,hsw,vlv
633
	 * WaDisableAsyncFlipPerfMode:snb,ivb,hsw,vlv,bdw,chv
569
	 */
634
	 */
570
	if (INTEL_INFO(dev)->gen >= 6)
635
	if (INTEL_INFO(dev)->gen >= 6)
571
		I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE));
636
		I915_WRITE(MI_MODE, _MASKED_BIT_ENABLE(ASYNC_FLIP_PERF_DISABLE));
572
 
637
 
573
	/* Required for the hardware to program scanline values for waiting */
638
	/* Required for the hardware to program scanline values for waiting */
-
 
639
	/* WaEnableFlushTlbInvalidationMode:snb */
574
	if (INTEL_INFO(dev)->gen == 6)
640
	if (INTEL_INFO(dev)->gen == 6)
575
		I915_WRITE(GFX_MODE,
641
		I915_WRITE(GFX_MODE,
576
			   _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_ALWAYS));
642
			   _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_EXPLICIT));
-
 
643
 
577
 
644
	/* WaBCSVCSTlbInvalidationMode:ivb,vlv,hsw */
578
		if (IS_GEN7(dev))
645
		if (IS_GEN7(dev))
579
			I915_WRITE(GFX_MODE_GEN7,
646
			I915_WRITE(GFX_MODE_GEN7,
580
				   _MASKED_BIT_DISABLE(GFX_TLB_INVALIDATE_ALWAYS) |
647
			   _MASKED_BIT_ENABLE(GFX_TLB_INVALIDATE_EXPLICIT) |
581
				   _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
648
				   _MASKED_BIT_ENABLE(GFX_REPLAY_MODE));
582
 
649
 
583
	if (INTEL_INFO(dev)->gen >= 5) {
650
	if (INTEL_INFO(dev)->gen >= 5) {
584
		ret = init_pipe_control(ring);
651
		ret = init_pipe_control(ring);
585
		if (ret)
652
		if (ret)
586
			return ret;
653
			return ret;
587
	}
654
	}
588
 
655
 
589
	if (IS_GEN6(dev)) {
656
	if (IS_GEN6(dev)) {
590
		/* From the Sandybridge PRM, volume 1 part 3, page 24:
657
		/* From the Sandybridge PRM, volume 1 part 3, page 24:
591
		 * "If this bit is set, STCunit will have LRA as replacement
658
		 * "If this bit is set, STCunit will have LRA as replacement
592
		 *  policy. [...] This bit must be reset.  LRA replacement
659
		 *  policy. [...] This bit must be reset.  LRA replacement
593
		 *  policy is not supported."
660
		 *  policy is not supported."
594
		 */
661
		 */
595
		I915_WRITE(CACHE_MODE_0,
662
		I915_WRITE(CACHE_MODE_0,
596
			   _MASKED_BIT_DISABLE(CM0_STC_EVICT_DISABLE_LRA_SNB));
663
			   _MASKED_BIT_DISABLE(CM0_STC_EVICT_DISABLE_LRA_SNB));
597
 
-
 
598
		/* This is not explicitly set for GEN6, so read the register.
-
 
599
		 * see intel_ring_mi_set_context() for why we care.
-
 
600
		 * TODO: consider explicitly setting the bit for GEN5
-
 
601
		 */
-
 
602
		ring->itlb_before_ctx_switch =
-
 
603
			!!(I915_READ(GFX_MODE) & GFX_TLB_INVALIDATE_ALWAYS);
-
 
604
	}
664
	}
605
 
665
 
606
	if (INTEL_INFO(dev)->gen >= 6)
666
	if (INTEL_INFO(dev)->gen >= 6)
607
		I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING));
667
		I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_FORCE_ORDERING));
608
 
668
 
609
	if (HAS_L3_DPF(dev))
669
	if (HAS_L3_DPF(dev))
610
		I915_WRITE_IMR(ring, ~GT_PARITY_ERROR(dev));
670
		I915_WRITE_IMR(ring, ~GT_PARITY_ERROR(dev));
611
 
671
 
612
	return ret;
672
	return ret;
613
}
673
}
614
 
674
 
615
static void render_ring_cleanup(struct intel_ring_buffer *ring)
675
static void render_ring_cleanup(struct intel_engine_cs *ring)
616
{
676
{
617
	struct drm_device *dev = ring->dev;
677
	struct drm_device *dev = ring->dev;
618
 
678
 
619
	if (ring->scratch.obj == NULL)
679
	if (ring->scratch.obj == NULL)
620
		return;
680
		return;
621
 
681
 
622
	if (INTEL_INFO(dev)->gen >= 5) {
682
	if (INTEL_INFO(dev)->gen >= 5) {
623
//       kunmap(sg_page(ring->scratch.obj->pages->sgl));
683
//		kunmap(sg_page(ring->scratch.obj->pages->sgl));
624
		i915_gem_object_unpin(ring->scratch.obj);
684
		i915_gem_object_ggtt_unpin(ring->scratch.obj);
625
	}
685
	}
626
 
686
 
627
	drm_gem_object_unreference(&ring->scratch.obj->base);
687
	drm_gem_object_unreference(&ring->scratch.obj->base);
628
	ring->scratch.obj = NULL;
688
	ring->scratch.obj = NULL;
629
}
689
}
630
 
-
 
631
static void
690
 
632
update_mboxes(struct intel_ring_buffer *ring,
691
static int gen8_rcs_signal(struct intel_engine_cs *signaller,
633
	    u32 mmio_offset)
692
			   unsigned int num_dwords)
-
 
693
{
-
 
694
#define MBOX_UPDATE_DWORDS 8
-
 
695
	struct drm_device *dev = signaller->dev;
-
 
696
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
697
	struct intel_engine_cs *waiter;
-
 
698
	int i, ret, num_rings;
-
 
699
 
-
 
700
	num_rings = hweight32(INTEL_INFO(dev)->ring_mask);
-
 
701
	num_dwords += (num_rings-1) * MBOX_UPDATE_DWORDS;
-
 
702
#undef MBOX_UPDATE_DWORDS
-
 
703
 
-
 
704
	ret = intel_ring_begin(signaller, num_dwords);
-
 
705
	if (ret)
-
 
706
		return ret;
-
 
707
 
634
{
708
	for_each_ring(waiter, dev_priv, i) {
-
 
709
		u64 gtt_offset = signaller->semaphore.signal_ggtt[i];
-
 
710
		if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID)
-
 
711
			continue;
-
 
712
 
-
 
713
		intel_ring_emit(signaller, GFX_OP_PIPE_CONTROL(6));
-
 
714
		intel_ring_emit(signaller, PIPE_CONTROL_GLOBAL_GTT_IVB |
-
 
715
					   PIPE_CONTROL_QW_WRITE |
-
 
716
					   PIPE_CONTROL_FLUSH_ENABLE);
-
 
717
		intel_ring_emit(signaller, lower_32_bits(gtt_offset));
635
/* NB: In order to be able to do semaphore MBOX updates for varying number
718
		intel_ring_emit(signaller, upper_32_bits(gtt_offset));
-
 
719
		intel_ring_emit(signaller, signaller->outstanding_lazy_seqno);
-
 
720
		intel_ring_emit(signaller, 0);
-
 
721
		intel_ring_emit(signaller, MI_SEMAPHORE_SIGNAL |
-
 
722
					   MI_SEMAPHORE_TARGET(waiter->id));
-
 
723
		intel_ring_emit(signaller, 0);
-
 
724
	}
-
 
725
 
-
 
726
	return 0;
-
 
727
}
636
 * of rings, it's easiest if we round up each individual update to a
728
 
-
 
729
static int gen8_xcs_signal(struct intel_engine_cs *signaller,
-
 
730
			   unsigned int num_dwords)
-
 
731
{
-
 
732
#define MBOX_UPDATE_DWORDS 6
-
 
733
	struct drm_device *dev = signaller->dev;
-
 
734
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
735
	struct intel_engine_cs *waiter;
-
 
736
	int i, ret, num_rings;
-
 
737
 
-
 
738
	num_rings = hweight32(INTEL_INFO(dev)->ring_mask);
-
 
739
	num_dwords += (num_rings-1) * MBOX_UPDATE_DWORDS;
-
 
740
#undef MBOX_UPDATE_DWORDS
-
 
741
 
-
 
742
	ret = intel_ring_begin(signaller, num_dwords);
-
 
743
	if (ret)
-
 
744
		return ret;
-
 
745
 
637
 * multiple of 2 (since ring updates must always be a multiple of 2)
746
	for_each_ring(waiter, dev_priv, i) {
-
 
747
		u64 gtt_offset = signaller->semaphore.signal_ggtt[i];
-
 
748
		if (gtt_offset == MI_SEMAPHORE_SYNC_INVALID)
-
 
749
			continue;
-
 
750
 
-
 
751
		intel_ring_emit(signaller, (MI_FLUSH_DW + 1) |
-
 
752
					   MI_FLUSH_DW_OP_STOREDW);
-
 
753
		intel_ring_emit(signaller, lower_32_bits(gtt_offset) |
-
 
754
					   MI_FLUSH_DW_USE_GTT);
-
 
755
		intel_ring_emit(signaller, upper_32_bits(gtt_offset));
-
 
756
		intel_ring_emit(signaller, signaller->outstanding_lazy_seqno);
-
 
757
		intel_ring_emit(signaller, MI_SEMAPHORE_SIGNAL |
-
 
758
					   MI_SEMAPHORE_TARGET(waiter->id));
638
 * even though the actual update only requires 3 dwords.
759
		intel_ring_emit(signaller, 0);
-
 
760
	}
-
 
761
 
-
 
762
	return 0;
-
 
763
}
-
 
764
 
-
 
765
static int gen6_signal(struct intel_engine_cs *signaller,
-
 
766
		       unsigned int num_dwords)
-
 
767
{
-
 
768
	struct drm_device *dev = signaller->dev;
-
 
769
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
770
	struct intel_engine_cs *useless;
-
 
771
	int i, ret, num_rings;
639
 */
772
 
-
 
773
#define MBOX_UPDATE_DWORDS 3
-
 
774
	num_rings = hweight32(INTEL_INFO(dev)->ring_mask);
-
 
775
	num_dwords += round_up((num_rings-1) * MBOX_UPDATE_DWORDS, 2);
-
 
776
#undef MBOX_UPDATE_DWORDS
-
 
777
 
-
 
778
	ret = intel_ring_begin(signaller, num_dwords);
-
 
779
	if (ret)
-
 
780
		return ret;
-
 
781
 
-
 
782
	for_each_ring(useless, dev_priv, i) {
-
 
783
		u32 mbox_reg = signaller->semaphore.mbox.signal[i];
640
#define MBOX_UPDATE_DWORDS 4
784
		if (mbox_reg != GEN6_NOSYNC) {
641
	intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
785
			intel_ring_emit(signaller, MI_LOAD_REGISTER_IMM(1));
642
	intel_ring_emit(ring, mmio_offset);
786
			intel_ring_emit(signaller, mbox_reg);
-
 
787
			intel_ring_emit(signaller, signaller->outstanding_lazy_seqno);
-
 
788
		}
-
 
789
	}
-
 
790
 
-
 
791
	/* If num_dwords was rounded, make sure the tail pointer is correct */
643
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
792
	if (num_rings % 2 == 0)
-
 
793
		intel_ring_emit(signaller, MI_NOOP);
-
 
794
 
644
	intel_ring_emit(ring, MI_NOOP);
795
	return 0;
645
}
796
}
646
 
797
 
647
/**
798
/**
648
 * gen6_add_request - Update the semaphore mailbox registers
799
 * gen6_add_request - Update the semaphore mailbox registers
649
 *
800
 *
650
 * @ring - ring that is adding a request
801
 * @ring - ring that is adding a request
651
 * @seqno - return seqno stuck into the ring
802
 * @seqno - return seqno stuck into the ring
652
 *
803
 *
653
 * Update the mailbox registers in the *other* rings with the current seqno.
804
 * Update the mailbox registers in the *other* rings with the current seqno.
654
 * This acts like a signal in the canonical semaphore.
805
 * This acts like a signal in the canonical semaphore.
655
 */
806
 */
656
static int
807
static int
657
gen6_add_request(struct intel_ring_buffer *ring)
808
gen6_add_request(struct intel_engine_cs *ring)
658
{
809
{
659
	struct drm_device *dev = ring->dev;
-
 
660
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
661
	struct intel_ring_buffer *useless;
-
 
662
	int i, ret, num_dwords = 4;
810
	int ret;
663
 
811
 
664
	if (i915_semaphore_is_enabled(dev))
812
	if (ring->semaphore.signal)
-
 
813
	ret = ring->semaphore.signal(ring, 4);
665
		num_dwords += ((I915_NUM_RINGS-1) * MBOX_UPDATE_DWORDS);
814
	else
666
#undef MBOX_UPDATE_DWORDS
-
 
667
 
815
		ret = intel_ring_begin(ring, 4);
668
	ret = intel_ring_begin(ring, num_dwords);
816
 
669
	if (ret)
817
	if (ret)
670
		return ret;
818
		return ret;
671
 
-
 
672
	if (i915_semaphore_is_enabled(dev)) {
-
 
673
	for_each_ring(useless, dev_priv, i) {
-
 
674
		u32 mbox_reg = ring->signal_mbox[i];
-
 
675
		if (mbox_reg != GEN6_NOSYNC)
-
 
676
			update_mboxes(ring, mbox_reg);
-
 
677
	}
-
 
678
	}
-
 
679
 
819
 
680
	intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
820
	intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
681
	intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
821
	intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
682
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
822
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
683
	intel_ring_emit(ring, MI_USER_INTERRUPT);
823
	intel_ring_emit(ring, MI_USER_INTERRUPT);
684
	__intel_ring_advance(ring);
824
	__intel_ring_advance(ring);
685
 
825
 
686
	return 0;
826
	return 0;
687
}
827
}
688
 
828
 
689
static inline bool i915_gem_has_seqno_wrapped(struct drm_device *dev,
829
static inline bool i915_gem_has_seqno_wrapped(struct drm_device *dev,
690
					      u32 seqno)
830
					      u32 seqno)
691
{
831
{
692
	struct drm_i915_private *dev_priv = dev->dev_private;
832
	struct drm_i915_private *dev_priv = dev->dev_private;
693
	return dev_priv->last_seqno < seqno;
833
	return dev_priv->last_seqno < seqno;
694
}
834
}
695
 
835
 
696
/**
836
/**
697
 * intel_ring_sync - sync the waiter to the signaller on seqno
837
 * intel_ring_sync - sync the waiter to the signaller on seqno
698
 *
838
 *
699
 * @waiter - ring that is waiting
839
 * @waiter - ring that is waiting
700
 * @signaller - ring which has, or will signal
840
 * @signaller - ring which has, or will signal
701
 * @seqno - seqno which the waiter will block on
841
 * @seqno - seqno which the waiter will block on
702
 */
842
 */
-
 
843
 
703
static int
844
static int
704
gen6_ring_sync(struct intel_ring_buffer *waiter,
845
gen8_ring_sync(struct intel_engine_cs *waiter,
705
		struct intel_ring_buffer *signaller,
846
	       struct intel_engine_cs *signaller,
706
		u32 seqno)
847
	       u32 seqno)
707
{
848
{
-
 
849
	struct drm_i915_private *dev_priv = waiter->dev->dev_private;
708
	int ret;
850
	int ret;
-
 
851
 
-
 
852
	ret = intel_ring_begin(waiter, 4);
-
 
853
	if (ret)
-
 
854
		return ret;
-
 
855
 
-
 
856
	intel_ring_emit(waiter, MI_SEMAPHORE_WAIT |
-
 
857
				MI_SEMAPHORE_GLOBAL_GTT |
-
 
858
				MI_SEMAPHORE_POLL |
-
 
859
				MI_SEMAPHORE_SAD_GTE_SDD);
-
 
860
	intel_ring_emit(waiter, seqno);
-
 
861
	intel_ring_emit(waiter,
-
 
862
			lower_32_bits(GEN8_WAIT_OFFSET(waiter, signaller->id)));
-
 
863
	intel_ring_emit(waiter,
-
 
864
			upper_32_bits(GEN8_WAIT_OFFSET(waiter, signaller->id)));
-
 
865
	intel_ring_advance(waiter);
-
 
866
	return 0;
-
 
867
}
-
 
868
 
-
 
869
static int
-
 
870
gen6_ring_sync(struct intel_engine_cs *waiter,
-
 
871
	       struct intel_engine_cs *signaller,
-
 
872
		u32 seqno)
-
 
873
{
709
	u32 dw1 = MI_SEMAPHORE_MBOX |
874
	u32 dw1 = MI_SEMAPHORE_MBOX |
710
		  MI_SEMAPHORE_COMPARE |
875
		  MI_SEMAPHORE_COMPARE |
711
		  MI_SEMAPHORE_REGISTER;
876
		  MI_SEMAPHORE_REGISTER;
-
 
877
	u32 wait_mbox = signaller->semaphore.mbox.wait[waiter->id];
-
 
878
	int ret;
712
 
879
 
713
	/* Throughout all of the GEM code, seqno passed implies our current
880
	/* Throughout all of the GEM code, seqno passed implies our current
714
	 * seqno is >= the last seqno executed. However for hardware the
881
	 * seqno is >= the last seqno executed. However for hardware the
715
	 * comparison is strictly greater than.
882
	 * comparison is strictly greater than.
716
	 */
883
	 */
717
	seqno -= 1;
884
	seqno -= 1;
718
 
-
 
719
	WARN_ON(signaller->semaphore_register[waiter->id] ==
885
 
720
		MI_SEMAPHORE_SYNC_INVALID);
886
	WARN_ON(wait_mbox == MI_SEMAPHORE_SYNC_INVALID);
721
 
887
 
722
	ret = intel_ring_begin(waiter, 4);
888
	ret = intel_ring_begin(waiter, 4);
723
	if (ret)
889
	if (ret)
724
		return ret;
890
		return ret;
725
 
891
 
726
	/* If seqno wrap happened, omit the wait with no-ops */
892
	/* If seqno wrap happened, omit the wait with no-ops */
727
	if (likely(!i915_gem_has_seqno_wrapped(waiter->dev, seqno))) {
893
	if (likely(!i915_gem_has_seqno_wrapped(waiter->dev, seqno))) {
728
	intel_ring_emit(waiter,
894
		intel_ring_emit(waiter, dw1 | wait_mbox);
729
				dw1 |
-
 
730
				signaller->semaphore_register[waiter->id]);
-
 
731
	intel_ring_emit(waiter, seqno);
895
	intel_ring_emit(waiter, seqno);
732
	intel_ring_emit(waiter, 0);
896
	intel_ring_emit(waiter, 0);
733
	intel_ring_emit(waiter, MI_NOOP);
897
	intel_ring_emit(waiter, MI_NOOP);
734
	} else {
898
	} else {
735
		intel_ring_emit(waiter, MI_NOOP);
899
		intel_ring_emit(waiter, MI_NOOP);
736
		intel_ring_emit(waiter, MI_NOOP);
900
		intel_ring_emit(waiter, MI_NOOP);
737
		intel_ring_emit(waiter, MI_NOOP);
901
		intel_ring_emit(waiter, MI_NOOP);
738
		intel_ring_emit(waiter, MI_NOOP);
902
		intel_ring_emit(waiter, MI_NOOP);
739
	}
903
	}
740
	intel_ring_advance(waiter);
904
	intel_ring_advance(waiter);
741
 
905
 
742
	return 0;
906
	return 0;
743
}
907
}
744
 
908
 
745
#define PIPE_CONTROL_FLUSH(ring__, addr__)					\
909
#define PIPE_CONTROL_FLUSH(ring__, addr__)					\
746
do {									\
910
do {									\
747
	intel_ring_emit(ring__, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |		\
911
	intel_ring_emit(ring__, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |		\
748
		 PIPE_CONTROL_DEPTH_STALL);				\
912
		 PIPE_CONTROL_DEPTH_STALL);				\
749
	intel_ring_emit(ring__, (addr__) | PIPE_CONTROL_GLOBAL_GTT);			\
913
	intel_ring_emit(ring__, (addr__) | PIPE_CONTROL_GLOBAL_GTT);			\
750
	intel_ring_emit(ring__, 0);							\
914
	intel_ring_emit(ring__, 0);							\
751
	intel_ring_emit(ring__, 0);							\
915
	intel_ring_emit(ring__, 0);							\
752
} while (0)
916
} while (0)
753
 
917
 
754
static int
918
static int
755
pc_render_add_request(struct intel_ring_buffer *ring)
919
pc_render_add_request(struct intel_engine_cs *ring)
756
{
920
{
757
	u32 scratch_addr = ring->scratch.gtt_offset + 128;
921
	u32 scratch_addr = ring->scratch.gtt_offset + 2 * CACHELINE_BYTES;
758
	int ret;
922
	int ret;
759
 
923
 
760
	/* For Ironlake, MI_USER_INTERRUPT was deprecated and apparently
924
	/* For Ironlake, MI_USER_INTERRUPT was deprecated and apparently
761
	 * incoherent with writes to memory, i.e. completely fubar,
925
	 * incoherent with writes to memory, i.e. completely fubar,
762
	 * so we need to use PIPE_NOTIFY instead.
926
	 * so we need to use PIPE_NOTIFY instead.
763
	 *
927
	 *
764
	 * However, we also need to workaround the qword write
928
	 * However, we also need to workaround the qword write
765
	 * incoherence by flushing the 6 PIPE_NOTIFY buffers out to
929
	 * incoherence by flushing the 6 PIPE_NOTIFY buffers out to
766
	 * memory before requesting an interrupt.
930
	 * memory before requesting an interrupt.
767
	 */
931
	 */
768
	ret = intel_ring_begin(ring, 32);
932
	ret = intel_ring_begin(ring, 32);
769
	if (ret)
933
	if (ret)
770
		return ret;
934
		return ret;
771
 
935
 
772
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
936
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
773
			PIPE_CONTROL_WRITE_FLUSH |
937
			PIPE_CONTROL_WRITE_FLUSH |
774
			PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
938
			PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
775
	intel_ring_emit(ring, ring->scratch.gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
939
	intel_ring_emit(ring, ring->scratch.gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
776
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
940
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
777
	intel_ring_emit(ring, 0);
941
	intel_ring_emit(ring, 0);
778
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
942
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
779
	scratch_addr += 128; /* write to separate cachelines */
943
	scratch_addr += 2 * CACHELINE_BYTES; /* write to separate cachelines */
780
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
944
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
781
	scratch_addr += 128;
945
	scratch_addr += 2 * CACHELINE_BYTES;
782
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
946
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
783
	scratch_addr += 128;
947
	scratch_addr += 2 * CACHELINE_BYTES;
784
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
948
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
785
	scratch_addr += 128;
949
	scratch_addr += 2 * CACHELINE_BYTES;
786
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
950
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
787
	scratch_addr += 128;
951
	scratch_addr += 2 * CACHELINE_BYTES;
788
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
952
	PIPE_CONTROL_FLUSH(ring, scratch_addr);
789
 
953
 
790
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
954
	intel_ring_emit(ring, GFX_OP_PIPE_CONTROL(4) | PIPE_CONTROL_QW_WRITE |
791
			PIPE_CONTROL_WRITE_FLUSH |
955
			PIPE_CONTROL_WRITE_FLUSH |
792
			PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
956
			PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
793
			PIPE_CONTROL_NOTIFY);
957
			PIPE_CONTROL_NOTIFY);
794
	intel_ring_emit(ring, ring->scratch.gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
958
	intel_ring_emit(ring, ring->scratch.gtt_offset | PIPE_CONTROL_GLOBAL_GTT);
795
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
959
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
796
	intel_ring_emit(ring, 0);
960
	intel_ring_emit(ring, 0);
797
	__intel_ring_advance(ring);
961
	__intel_ring_advance(ring);
798
 
962
 
799
	return 0;
963
	return 0;
800
}
964
}
801
 
965
 
802
static u32
966
static u32
803
gen6_ring_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
967
gen6_ring_get_seqno(struct intel_engine_cs *ring, bool lazy_coherency)
804
{
968
{
805
	/* Workaround to force correct ordering between irq and seqno writes on
969
	/* Workaround to force correct ordering between irq and seqno writes on
806
	 * ivb (and maybe also on snb) by reading from a CS register (like
970
	 * ivb (and maybe also on snb) by reading from a CS register (like
807
	 * ACTHD) before reading the status page. */
971
	 * ACTHD) before reading the status page. */
808
	if (!lazy_coherency)
972
	if (!lazy_coherency) {
-
 
973
		struct drm_i915_private *dev_priv = ring->dev->dev_private;
809
		intel_ring_get_active_head(ring);
974
		POSTING_READ(RING_ACTHD(ring->mmio_base));
-
 
975
	}
-
 
976
 
810
	return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
977
	return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
811
}
978
}
812
 
979
 
813
static u32
980
static u32
814
ring_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
981
ring_get_seqno(struct intel_engine_cs *ring, bool lazy_coherency)
815
{
982
{
816
	return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
983
	return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
817
}
984
}
818
 
985
 
819
static void
986
static void
820
ring_set_seqno(struct intel_ring_buffer *ring, u32 seqno)
987
ring_set_seqno(struct intel_engine_cs *ring, u32 seqno)
821
{
988
{
822
	intel_write_status_page(ring, I915_GEM_HWS_INDEX, seqno);
989
	intel_write_status_page(ring, I915_GEM_HWS_INDEX, seqno);
823
}
990
}
824
 
991
 
825
static u32
992
static u32
826
pc_render_get_seqno(struct intel_ring_buffer *ring, bool lazy_coherency)
993
pc_render_get_seqno(struct intel_engine_cs *ring, bool lazy_coherency)
827
{
994
{
828
	return ring->scratch.cpu_page[0];
995
	return ring->scratch.cpu_page[0];
829
}
996
}
830
 
997
 
831
static void
998
static void
832
pc_render_set_seqno(struct intel_ring_buffer *ring, u32 seqno)
999
pc_render_set_seqno(struct intel_engine_cs *ring, u32 seqno)
833
{
1000
{
834
	ring->scratch.cpu_page[0] = seqno;
1001
	ring->scratch.cpu_page[0] = seqno;
835
}
1002
}
836
 
1003
 
837
static bool
1004
static bool
838
gen5_ring_get_irq(struct intel_ring_buffer *ring)
1005
gen5_ring_get_irq(struct intel_engine_cs *ring)
839
{
1006
{
840
	struct drm_device *dev = ring->dev;
1007
	struct drm_device *dev = ring->dev;
841
	drm_i915_private_t *dev_priv = dev->dev_private;
1008
	struct drm_i915_private *dev_priv = dev->dev_private;
842
	unsigned long flags;
1009
	unsigned long flags;
843
 
1010
 
844
	if (!dev->irq_enabled)
1011
	if (!dev->irq_enabled)
845
		return false;
1012
		return false;
846
 
1013
 
847
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1014
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
848
	if (ring->irq_refcount++ == 0)
1015
	if (ring->irq_refcount++ == 0)
849
		ilk_enable_gt_irq(dev_priv, ring->irq_enable_mask);
1016
		gen5_enable_gt_irq(dev_priv, ring->irq_enable_mask);
850
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1017
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
851
 
1018
 
852
	return true;
1019
	return true;
853
}
1020
}
854
 
1021
 
855
static void
1022
static void
856
gen5_ring_put_irq(struct intel_ring_buffer *ring)
1023
gen5_ring_put_irq(struct intel_engine_cs *ring)
857
{
1024
{
858
	struct drm_device *dev = ring->dev;
1025
	struct drm_device *dev = ring->dev;
859
	drm_i915_private_t *dev_priv = dev->dev_private;
1026
	struct drm_i915_private *dev_priv = dev->dev_private;
860
	unsigned long flags;
1027
	unsigned long flags;
861
 
1028
 
862
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1029
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
863
	if (--ring->irq_refcount == 0)
1030
	if (--ring->irq_refcount == 0)
864
		ilk_disable_gt_irq(dev_priv, ring->irq_enable_mask);
1031
		gen5_disable_gt_irq(dev_priv, ring->irq_enable_mask);
865
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1032
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
866
}
1033
}
867
 
1034
 
868
static bool
1035
static bool
869
i9xx_ring_get_irq(struct intel_ring_buffer *ring)
1036
i9xx_ring_get_irq(struct intel_engine_cs *ring)
870
{
1037
{
871
	struct drm_device *dev = ring->dev;
1038
	struct drm_device *dev = ring->dev;
872
	drm_i915_private_t *dev_priv = dev->dev_private;
1039
	struct drm_i915_private *dev_priv = dev->dev_private;
873
	unsigned long flags;
1040
	unsigned long flags;
874
 
1041
 
875
	if (!dev->irq_enabled)
1042
	if (!dev->irq_enabled)
876
		return false;
1043
		return false;
877
 
1044
 
878
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1045
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
879
	if (ring->irq_refcount++ == 0) {
1046
	if (ring->irq_refcount++ == 0) {
880
		dev_priv->irq_mask &= ~ring->irq_enable_mask;
1047
		dev_priv->irq_mask &= ~ring->irq_enable_mask;
881
	I915_WRITE(IMR, dev_priv->irq_mask);
1048
	I915_WRITE(IMR, dev_priv->irq_mask);
882
	POSTING_READ(IMR);
1049
	POSTING_READ(IMR);
883
	}
1050
	}
884
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1051
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
885
 
1052
 
886
	return true;
1053
	return true;
887
}
1054
}
888
 
1055
 
889
static void
1056
static void
890
i9xx_ring_put_irq(struct intel_ring_buffer *ring)
1057
i9xx_ring_put_irq(struct intel_engine_cs *ring)
891
{
1058
{
892
	struct drm_device *dev = ring->dev;
1059
	struct drm_device *dev = ring->dev;
893
	drm_i915_private_t *dev_priv = dev->dev_private;
1060
	struct drm_i915_private *dev_priv = dev->dev_private;
894
	unsigned long flags;
1061
	unsigned long flags;
895
 
1062
 
896
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1063
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
897
	if (--ring->irq_refcount == 0) {
1064
	if (--ring->irq_refcount == 0) {
898
		dev_priv->irq_mask |= ring->irq_enable_mask;
1065
		dev_priv->irq_mask |= ring->irq_enable_mask;
899
	I915_WRITE(IMR, dev_priv->irq_mask);
1066
	I915_WRITE(IMR, dev_priv->irq_mask);
900
	POSTING_READ(IMR);
1067
	POSTING_READ(IMR);
901
	}
1068
	}
902
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1069
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
903
}
1070
}
904
 
1071
 
905
static bool
1072
static bool
906
i8xx_ring_get_irq(struct intel_ring_buffer *ring)
1073
i8xx_ring_get_irq(struct intel_engine_cs *ring)
907
{
1074
{
908
	struct drm_device *dev = ring->dev;
1075
	struct drm_device *dev = ring->dev;
909
	drm_i915_private_t *dev_priv = dev->dev_private;
1076
	struct drm_i915_private *dev_priv = dev->dev_private;
910
	unsigned long flags;
1077
	unsigned long flags;
911
 
1078
 
912
	if (!dev->irq_enabled)
1079
	if (!dev->irq_enabled)
913
		return false;
1080
		return false;
914
 
1081
 
915
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1082
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
916
	if (ring->irq_refcount++ == 0) {
1083
	if (ring->irq_refcount++ == 0) {
917
		dev_priv->irq_mask &= ~ring->irq_enable_mask;
1084
		dev_priv->irq_mask &= ~ring->irq_enable_mask;
918
		I915_WRITE16(IMR, dev_priv->irq_mask);
1085
		I915_WRITE16(IMR, dev_priv->irq_mask);
919
		POSTING_READ16(IMR);
1086
		POSTING_READ16(IMR);
920
	}
1087
	}
921
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1088
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
922
 
1089
 
923
	return true;
1090
	return true;
924
}
1091
}
925
 
1092
 
926
static void
1093
static void
927
i8xx_ring_put_irq(struct intel_ring_buffer *ring)
1094
i8xx_ring_put_irq(struct intel_engine_cs *ring)
928
{
1095
{
929
	struct drm_device *dev = ring->dev;
1096
	struct drm_device *dev = ring->dev;
930
	drm_i915_private_t *dev_priv = dev->dev_private;
1097
	struct drm_i915_private *dev_priv = dev->dev_private;
931
	unsigned long flags;
1098
	unsigned long flags;
932
 
1099
 
933
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1100
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
934
	if (--ring->irq_refcount == 0) {
1101
	if (--ring->irq_refcount == 0) {
935
		dev_priv->irq_mask |= ring->irq_enable_mask;
1102
		dev_priv->irq_mask |= ring->irq_enable_mask;
936
		I915_WRITE16(IMR, dev_priv->irq_mask);
1103
		I915_WRITE16(IMR, dev_priv->irq_mask);
937
		POSTING_READ16(IMR);
1104
		POSTING_READ16(IMR);
938
	}
1105
	}
939
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1106
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
940
}
1107
}
941
 
1108
 
942
void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
1109
void intel_ring_setup_status_page(struct intel_engine_cs *ring)
943
{
1110
{
944
	struct drm_device *dev = ring->dev;
1111
	struct drm_device *dev = ring->dev;
945
	drm_i915_private_t *dev_priv = ring->dev->dev_private;
1112
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
946
	u32 mmio = 0;
1113
	u32 mmio = 0;
947
 
1114
 
948
	/* The ring status page addresses are no longer next to the rest of
1115
	/* The ring status page addresses are no longer next to the rest of
949
	 * the ring registers as of gen7.
1116
	 * the ring registers as of gen7.
950
	 */
1117
	 */
951
	if (IS_GEN7(dev)) {
1118
	if (IS_GEN7(dev)) {
952
		switch (ring->id) {
1119
		switch (ring->id) {
953
		case RCS:
1120
		case RCS:
954
			mmio = RENDER_HWS_PGA_GEN7;
1121
			mmio = RENDER_HWS_PGA_GEN7;
955
			break;
1122
			break;
956
		case BCS:
1123
		case BCS:
957
			mmio = BLT_HWS_PGA_GEN7;
1124
			mmio = BLT_HWS_PGA_GEN7;
958
			break;
1125
			break;
-
 
1126
		/*
-
 
1127
		 * VCS2 actually doesn't exist on Gen7. Only shut up
-
 
1128
		 * gcc switch check warning
-
 
1129
		 */
-
 
1130
		case VCS2:
959
		case VCS:
1131
		case VCS:
960
			mmio = BSD_HWS_PGA_GEN7;
1132
			mmio = BSD_HWS_PGA_GEN7;
961
			break;
1133
			break;
962
		case VECS:
1134
		case VECS:
963
			mmio = VEBOX_HWS_PGA_GEN7;
1135
			mmio = VEBOX_HWS_PGA_GEN7;
964
			break;
1136
			break;
965
		}
1137
		}
966
	} else if (IS_GEN6(ring->dev)) {
1138
	} else if (IS_GEN6(ring->dev)) {
967
		mmio = RING_HWS_PGA_GEN6(ring->mmio_base);
1139
		mmio = RING_HWS_PGA_GEN6(ring->mmio_base);
968
	} else {
1140
	} else {
969
		/* XXX: gen8 returns to sanity */
1141
		/* XXX: gen8 returns to sanity */
970
		mmio = RING_HWS_PGA(ring->mmio_base);
1142
		mmio = RING_HWS_PGA(ring->mmio_base);
971
	}
1143
	}
972
 
1144
 
973
	I915_WRITE(mmio, (u32)ring->status_page.gfx_addr);
1145
	I915_WRITE(mmio, (u32)ring->status_page.gfx_addr);
974
	POSTING_READ(mmio);
1146
	POSTING_READ(mmio);
-
 
1147
 
975
 
1148
	/*
-
 
1149
	 * Flush the TLB for this page
-
 
1150
	 *
-
 
1151
	 * FIXME: These two bits have disappeared on gen8, so a question
-
 
1152
	 * arises: do we still need this and if so how should we go about
-
 
1153
	 * invalidating the TLB?
976
	/* Flush the TLB for this page */
1154
	 */
977
	if (INTEL_INFO(dev)->gen >= 6) {
1155
	if (INTEL_INFO(dev)->gen >= 6 && INTEL_INFO(dev)->gen < 8) {
-
 
1156
		u32 reg = RING_INSTPM(ring->mmio_base);
-
 
1157
 
-
 
1158
		/* ring should be idle before issuing a sync flush*/
-
 
1159
		WARN_ON((I915_READ_MODE(ring) & MODE_IDLE) == 0);
978
		u32 reg = RING_INSTPM(ring->mmio_base);
1160
 
979
		I915_WRITE(reg,
1161
		I915_WRITE(reg,
980
			   _MASKED_BIT_ENABLE(INSTPM_TLB_INVALIDATE |
1162
			   _MASKED_BIT_ENABLE(INSTPM_TLB_INVALIDATE |
981
					      INSTPM_SYNC_FLUSH));
1163
					      INSTPM_SYNC_FLUSH));
982
		if (wait_for((I915_READ(reg) & INSTPM_SYNC_FLUSH) == 0,
1164
		if (wait_for((I915_READ(reg) & INSTPM_SYNC_FLUSH) == 0,
983
			     1000))
1165
			     1000))
984
			DRM_ERROR("%s: wait for SyncFlush to complete for TLB invalidation timed out\n",
1166
			DRM_ERROR("%s: wait for SyncFlush to complete for TLB invalidation timed out\n",
985
				  ring->name);
1167
				  ring->name);
986
	}
1168
	}
987
}
1169
}
988
 
1170
 
989
static int
1171
static int
990
bsd_ring_flush(struct intel_ring_buffer *ring,
1172
bsd_ring_flush(struct intel_engine_cs *ring,
991
	       u32     invalidate_domains,
1173
	       u32     invalidate_domains,
992
	       u32     flush_domains)
1174
	       u32     flush_domains)
993
{
1175
{
994
	int ret;
1176
	int ret;
995
 
1177
 
996
	ret = intel_ring_begin(ring, 2);
1178
	ret = intel_ring_begin(ring, 2);
997
	if (ret)
1179
	if (ret)
998
		return ret;
1180
		return ret;
999
 
1181
 
1000
	intel_ring_emit(ring, MI_FLUSH);
1182
	intel_ring_emit(ring, MI_FLUSH);
1001
	intel_ring_emit(ring, MI_NOOP);
1183
	intel_ring_emit(ring, MI_NOOP);
1002
	intel_ring_advance(ring);
1184
	intel_ring_advance(ring);
1003
	return 0;
1185
	return 0;
1004
}
1186
}
1005
 
1187
 
1006
static int
1188
static int
1007
i9xx_add_request(struct intel_ring_buffer *ring)
1189
i9xx_add_request(struct intel_engine_cs *ring)
1008
{
1190
{
1009
	int ret;
1191
	int ret;
1010
 
1192
 
1011
	ret = intel_ring_begin(ring, 4);
1193
	ret = intel_ring_begin(ring, 4);
1012
	if (ret)
1194
	if (ret)
1013
		return ret;
1195
		return ret;
1014
 
1196
 
1015
	intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
1197
	intel_ring_emit(ring, MI_STORE_DWORD_INDEX);
1016
	intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
1198
	intel_ring_emit(ring, I915_GEM_HWS_INDEX << MI_STORE_DWORD_INDEX_SHIFT);
1017
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
1199
	intel_ring_emit(ring, ring->outstanding_lazy_seqno);
1018
	intel_ring_emit(ring, MI_USER_INTERRUPT);
1200
	intel_ring_emit(ring, MI_USER_INTERRUPT);
1019
	__intel_ring_advance(ring);
1201
	__intel_ring_advance(ring);
1020
 
1202
 
1021
	return 0;
1203
	return 0;
1022
}
1204
}
1023
 
1205
 
1024
static bool
1206
static bool
1025
gen6_ring_get_irq(struct intel_ring_buffer *ring)
1207
gen6_ring_get_irq(struct intel_engine_cs *ring)
1026
{
1208
{
1027
	struct drm_device *dev = ring->dev;
1209
	struct drm_device *dev = ring->dev;
1028
	drm_i915_private_t *dev_priv = dev->dev_private;
1210
	struct drm_i915_private *dev_priv = dev->dev_private;
1029
	unsigned long flags;
1211
	unsigned long flags;
1030
 
1212
 
1031
	if (!dev->irq_enabled)
1213
	if (!dev->irq_enabled)
1032
	       return false;
1214
	       return false;
1033
 
1215
 
1034
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1216
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1035
	if (ring->irq_refcount++ == 0) {
1217
	if (ring->irq_refcount++ == 0) {
1036
		if (HAS_L3_DPF(dev) && ring->id == RCS)
1218
		if (HAS_L3_DPF(dev) && ring->id == RCS)
1037
			I915_WRITE_IMR(ring,
1219
			I915_WRITE_IMR(ring,
1038
				       ~(ring->irq_enable_mask |
1220
				       ~(ring->irq_enable_mask |
1039
					 GT_PARITY_ERROR(dev)));
1221
					 GT_PARITY_ERROR(dev)));
1040
		else
1222
		else
1041
			I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
1223
			I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
1042
		ilk_enable_gt_irq(dev_priv, ring->irq_enable_mask);
1224
		gen5_enable_gt_irq(dev_priv, ring->irq_enable_mask);
1043
	}
1225
	}
1044
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1226
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1045
 
1227
 
1046
    return true;
1228
    return true;
1047
}
1229
}
1048
 
1230
 
1049
static void
1231
static void
1050
gen6_ring_put_irq(struct intel_ring_buffer *ring)
1232
gen6_ring_put_irq(struct intel_engine_cs *ring)
1051
{
1233
{
1052
	struct drm_device *dev = ring->dev;
1234
	struct drm_device *dev = ring->dev;
1053
	drm_i915_private_t *dev_priv = dev->dev_private;
1235
	struct drm_i915_private *dev_priv = dev->dev_private;
1054
	unsigned long flags;
1236
	unsigned long flags;
1055
 
1237
 
1056
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1238
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1057
	if (--ring->irq_refcount == 0) {
1239
	if (--ring->irq_refcount == 0) {
1058
		if (HAS_L3_DPF(dev) && ring->id == RCS)
1240
		if (HAS_L3_DPF(dev) && ring->id == RCS)
1059
			I915_WRITE_IMR(ring, ~GT_PARITY_ERROR(dev));
1241
			I915_WRITE_IMR(ring, ~GT_PARITY_ERROR(dev));
1060
		else
1242
		else
1061
			I915_WRITE_IMR(ring, ~0);
1243
			I915_WRITE_IMR(ring, ~0);
1062
		ilk_disable_gt_irq(dev_priv, ring->irq_enable_mask);
1244
		gen5_disable_gt_irq(dev_priv, ring->irq_enable_mask);
1063
	}
1245
	}
1064
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1246
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1065
}
1247
}
1066
 
1248
 
1067
static bool
1249
static bool
1068
hsw_vebox_get_irq(struct intel_ring_buffer *ring)
1250
hsw_vebox_get_irq(struct intel_engine_cs *ring)
1069
{
1251
{
1070
	struct drm_device *dev = ring->dev;
1252
	struct drm_device *dev = ring->dev;
1071
	struct drm_i915_private *dev_priv = dev->dev_private;
1253
	struct drm_i915_private *dev_priv = dev->dev_private;
1072
	unsigned long flags;
1254
	unsigned long flags;
1073
 
1255
 
1074
	if (!dev->irq_enabled)
1256
	if (!dev->irq_enabled)
1075
		return false;
1257
		return false;
1076
 
1258
 
1077
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1259
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1078
	if (ring->irq_refcount++ == 0) {
1260
	if (ring->irq_refcount++ == 0) {
1079
		I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
1261
		I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
1080
		snb_enable_pm_irq(dev_priv, ring->irq_enable_mask);
1262
		gen6_enable_pm_irq(dev_priv, ring->irq_enable_mask);
1081
	}
1263
	}
1082
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1264
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1083
 
1265
 
1084
	return true;
1266
	return true;
1085
}
1267
}
1086
 
1268
 
1087
static void
1269
static void
1088
hsw_vebox_put_irq(struct intel_ring_buffer *ring)
1270
hsw_vebox_put_irq(struct intel_engine_cs *ring)
1089
{
1271
{
1090
	struct drm_device *dev = ring->dev;
1272
	struct drm_device *dev = ring->dev;
1091
	struct drm_i915_private *dev_priv = dev->dev_private;
1273
	struct drm_i915_private *dev_priv = dev->dev_private;
1092
	unsigned long flags;
1274
	unsigned long flags;
1093
 
1275
 
1094
	if (!dev->irq_enabled)
1276
	if (!dev->irq_enabled)
1095
		return;
1277
		return;
1096
 
1278
 
1097
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1279
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1098
	if (--ring->irq_refcount == 0) {
1280
	if (--ring->irq_refcount == 0) {
1099
		I915_WRITE_IMR(ring, ~0);
1281
		I915_WRITE_IMR(ring, ~0);
1100
		snb_disable_pm_irq(dev_priv, ring->irq_enable_mask);
1282
		gen6_disable_pm_irq(dev_priv, ring->irq_enable_mask);
1101
	}
1283
	}
1102
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1284
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1103
}
1285
}
1104
 
1286
 
1105
static bool
1287
static bool
1106
gen8_ring_get_irq(struct intel_ring_buffer *ring)
1288
gen8_ring_get_irq(struct intel_engine_cs *ring)
1107
{
1289
{
1108
	struct drm_device *dev = ring->dev;
1290
	struct drm_device *dev = ring->dev;
1109
	struct drm_i915_private *dev_priv = dev->dev_private;
1291
	struct drm_i915_private *dev_priv = dev->dev_private;
1110
	unsigned long flags;
1292
	unsigned long flags;
1111
 
1293
 
1112
	if (!dev->irq_enabled)
1294
	if (!dev->irq_enabled)
1113
		return false;
1295
		return false;
1114
 
1296
 
1115
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1297
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1116
	if (ring->irq_refcount++ == 0) {
1298
	if (ring->irq_refcount++ == 0) {
1117
		if (HAS_L3_DPF(dev) && ring->id == RCS) {
1299
		if (HAS_L3_DPF(dev) && ring->id == RCS) {
1118
			I915_WRITE_IMR(ring,
1300
			I915_WRITE_IMR(ring,
1119
				       ~(ring->irq_enable_mask |
1301
				       ~(ring->irq_enable_mask |
1120
					 GT_RENDER_L3_PARITY_ERROR_INTERRUPT));
1302
					 GT_RENDER_L3_PARITY_ERROR_INTERRUPT));
1121
		} else {
1303
		} else {
1122
			I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
1304
			I915_WRITE_IMR(ring, ~ring->irq_enable_mask);
1123
		}
1305
		}
1124
		POSTING_READ(RING_IMR(ring->mmio_base));
1306
		POSTING_READ(RING_IMR(ring->mmio_base));
1125
	}
1307
	}
1126
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1308
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1127
 
1309
 
1128
	return true;
1310
	return true;
1129
}
1311
}
1130
 
1312
 
1131
static void
1313
static void
1132
gen8_ring_put_irq(struct intel_ring_buffer *ring)
1314
gen8_ring_put_irq(struct intel_engine_cs *ring)
1133
{
1315
{
1134
	struct drm_device *dev = ring->dev;
1316
	struct drm_device *dev = ring->dev;
1135
	struct drm_i915_private *dev_priv = dev->dev_private;
1317
	struct drm_i915_private *dev_priv = dev->dev_private;
1136
	unsigned long flags;
1318
	unsigned long flags;
1137
 
1319
 
1138
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1320
	spin_lock_irqsave(&dev_priv->irq_lock, flags);
1139
	if (--ring->irq_refcount == 0) {
1321
	if (--ring->irq_refcount == 0) {
1140
		if (HAS_L3_DPF(dev) && ring->id == RCS) {
1322
		if (HAS_L3_DPF(dev) && ring->id == RCS) {
1141
			I915_WRITE_IMR(ring,
1323
			I915_WRITE_IMR(ring,
1142
				       ~GT_RENDER_L3_PARITY_ERROR_INTERRUPT);
1324
				       ~GT_RENDER_L3_PARITY_ERROR_INTERRUPT);
1143
		} else {
1325
		} else {
1144
			I915_WRITE_IMR(ring, ~0);
1326
			I915_WRITE_IMR(ring, ~0);
1145
		}
1327
		}
1146
		POSTING_READ(RING_IMR(ring->mmio_base));
1328
		POSTING_READ(RING_IMR(ring->mmio_base));
1147
	}
1329
	}
1148
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1330
	spin_unlock_irqrestore(&dev_priv->irq_lock, flags);
1149
}
1331
}
1150
 
1332
 
1151
static int
1333
static int
1152
i965_dispatch_execbuffer(struct intel_ring_buffer *ring,
1334
i965_dispatch_execbuffer(struct intel_engine_cs *ring,
1153
			 u32 offset, u32 length,
1335
			 u64 offset, u32 length,
1154
			 unsigned flags)
1336
			 unsigned flags)
1155
{
1337
{
1156
	int ret;
1338
	int ret;
1157
 
1339
 
1158
	ret = intel_ring_begin(ring, 2);
1340
	ret = intel_ring_begin(ring, 2);
1159
	if (ret)
1341
	if (ret)
1160
		return ret;
1342
		return ret;
1161
 
1343
 
1162
	intel_ring_emit(ring,
1344
	intel_ring_emit(ring,
1163
			MI_BATCH_BUFFER_START |
1345
			MI_BATCH_BUFFER_START |
1164
			MI_BATCH_GTT |
1346
			MI_BATCH_GTT |
1165
			(flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
1347
			(flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
1166
	intel_ring_emit(ring, offset);
1348
	intel_ring_emit(ring, offset);
1167
	intel_ring_advance(ring);
1349
	intel_ring_advance(ring);
1168
 
1350
 
1169
	return 0;
1351
	return 0;
1170
}
1352
}
1171
 
1353
 
1172
/* Just userspace ABI convention to limit the wa batch bo to a resonable size */
1354
/* Just userspace ABI convention to limit the wa batch bo to a resonable size */
1173
#define I830_BATCH_LIMIT (256*1024)
1355
#define I830_BATCH_LIMIT (256*1024)
1174
static int
1356
static int
1175
i830_dispatch_execbuffer(struct intel_ring_buffer *ring,
1357
i830_dispatch_execbuffer(struct intel_engine_cs *ring,
1176
				u32 offset, u32 len,
1358
				u64 offset, u32 len,
1177
				unsigned flags)
1359
				unsigned flags)
1178
{
1360
{
1179
	int ret;
1361
	int ret;
1180
 
1362
 
1181
	if (flags & I915_DISPATCH_PINNED) {
1363
	if (flags & I915_DISPATCH_PINNED) {
1182
		ret = intel_ring_begin(ring, 4);
1364
		ret = intel_ring_begin(ring, 4);
1183
		if (ret)
1365
		if (ret)
1184
			return ret;
1366
			return ret;
1185
 
1367
 
1186
		intel_ring_emit(ring, MI_BATCH_BUFFER);
1368
		intel_ring_emit(ring, MI_BATCH_BUFFER);
1187
		intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1369
		intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1188
		intel_ring_emit(ring, offset + len - 8);
1370
		intel_ring_emit(ring, offset + len - 8);
1189
		intel_ring_emit(ring, MI_NOOP);
1371
		intel_ring_emit(ring, MI_NOOP);
1190
		intel_ring_advance(ring);
1372
		intel_ring_advance(ring);
1191
	} else {
1373
	} else {
1192
		u32 cs_offset = ring->scratch.gtt_offset;
1374
		u32 cs_offset = ring->scratch.gtt_offset;
1193
 
1375
 
1194
		if (len > I830_BATCH_LIMIT)
1376
		if (len > I830_BATCH_LIMIT)
1195
			return -ENOSPC;
1377
			return -ENOSPC;
1196
 
1378
 
1197
		ret = intel_ring_begin(ring, 9+3);
1379
		ret = intel_ring_begin(ring, 9+3);
1198
		if (ret)
1380
		if (ret)
1199
			return ret;
1381
			return ret;
1200
		/* Blit the batch (which has now all relocs applied) to the stable batch
1382
		/* Blit the batch (which has now all relocs applied) to the stable batch
1201
		 * scratch bo area (so that the CS never stumbles over its tlb
1383
		 * scratch bo area (so that the CS never stumbles over its tlb
1202
		 * invalidation bug) ... */
1384
		 * invalidation bug) ... */
1203
		intel_ring_emit(ring, XY_SRC_COPY_BLT_CMD |
1385
		intel_ring_emit(ring, XY_SRC_COPY_BLT_CMD |
1204
				XY_SRC_COPY_BLT_WRITE_ALPHA |
1386
				XY_SRC_COPY_BLT_WRITE_ALPHA |
1205
				XY_SRC_COPY_BLT_WRITE_RGB);
1387
				XY_SRC_COPY_BLT_WRITE_RGB);
1206
		intel_ring_emit(ring, BLT_DEPTH_32 | BLT_ROP_GXCOPY | 4096);
1388
		intel_ring_emit(ring, BLT_DEPTH_32 | BLT_ROP_GXCOPY | 4096);
1207
		intel_ring_emit(ring, 0);
1389
		intel_ring_emit(ring, 0);
1208
		intel_ring_emit(ring, (DIV_ROUND_UP(len, 4096) << 16) | 1024);
1390
		intel_ring_emit(ring, (DIV_ROUND_UP(len, 4096) << 16) | 1024);
1209
		intel_ring_emit(ring, cs_offset);
1391
		intel_ring_emit(ring, cs_offset);
1210
		intel_ring_emit(ring, 0);
1392
		intel_ring_emit(ring, 0);
1211
		intel_ring_emit(ring, 4096);
1393
		intel_ring_emit(ring, 4096);
1212
		intel_ring_emit(ring, offset);
1394
		intel_ring_emit(ring, offset);
1213
		intel_ring_emit(ring, MI_FLUSH);
1395
		intel_ring_emit(ring, MI_FLUSH);
1214
 
1396
 
1215
		/* ... and execute it. */
1397
		/* ... and execute it. */
1216
		intel_ring_emit(ring, MI_BATCH_BUFFER);
1398
		intel_ring_emit(ring, MI_BATCH_BUFFER);
1217
		intel_ring_emit(ring, cs_offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1399
		intel_ring_emit(ring, cs_offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1218
		intel_ring_emit(ring, cs_offset + len - 8);
1400
		intel_ring_emit(ring, cs_offset + len - 8);
1219
	intel_ring_advance(ring);
1401
	intel_ring_advance(ring);
1220
	}
1402
	}
1221
 
1403
 
1222
	return 0;
1404
	return 0;
1223
}
1405
}
1224
 
1406
 
1225
static int
1407
static int
1226
i915_dispatch_execbuffer(struct intel_ring_buffer *ring,
1408
i915_dispatch_execbuffer(struct intel_engine_cs *ring,
1227
			 u32 offset, u32 len,
1409
			 u64 offset, u32 len,
1228
			 unsigned flags)
1410
			 unsigned flags)
1229
{
1411
{
1230
	int ret;
1412
	int ret;
1231
 
1413
 
1232
		ret = intel_ring_begin(ring, 2);
1414
		ret = intel_ring_begin(ring, 2);
1233
		if (ret)
1415
		if (ret)
1234
			return ret;
1416
			return ret;
1235
 
1417
 
1236
	intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_GTT);
1418
	intel_ring_emit(ring, MI_BATCH_BUFFER_START | MI_BATCH_GTT);
1237
	intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1419
	intel_ring_emit(ring, offset | (flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE));
1238
	intel_ring_advance(ring);
1420
	intel_ring_advance(ring);
1239
 
1421
 
1240
	return 0;
1422
	return 0;
1241
}
1423
}
1242
 
1424
 
1243
static void cleanup_status_page(struct intel_ring_buffer *ring)
1425
static void cleanup_status_page(struct intel_engine_cs *ring)
1244
{
1426
{
1245
	struct drm_i915_gem_object *obj;
1427
	struct drm_i915_gem_object *obj;
1246
 
1428
 
1247
	obj = ring->status_page.obj;
1429
	obj = ring->status_page.obj;
1248
	if (obj == NULL)
1430
	if (obj == NULL)
1249
		return;
1431
		return;
1250
 
1432
 
1251
//   kunmap(sg_page(obj->pages->sgl));
1433
//	kunmap(sg_page(obj->pages->sgl));
1252
    i915_gem_object_unpin(obj);
1434
	i915_gem_object_ggtt_unpin(obj);
1253
	drm_gem_object_unreference(&obj->base);
1435
	drm_gem_object_unreference(&obj->base);
1254
	ring->status_page.obj = NULL;
1436
	ring->status_page.obj = NULL;
1255
}
1437
}
1256
 
1438
 
1257
static int init_status_page(struct intel_ring_buffer *ring)
1439
static int init_status_page(struct intel_engine_cs *ring)
1258
{
-
 
1259
	struct drm_device *dev = ring->dev;
1440
{
-
 
1441
	struct drm_i915_gem_object *obj;
-
 
1442
 
-
 
1443
	if ((obj = ring->status_page.obj) == NULL) {
1260
	struct drm_i915_gem_object *obj;
1444
		unsigned flags;
1261
	int ret;
1445
	int ret;
1262
 
1446
 
1263
	obj = i915_gem_alloc_object(dev, 4096);
1447
		obj = i915_gem_alloc_object(ring->dev, 4096);
1264
	if (obj == NULL) {
1448
	if (obj == NULL) {
1265
		DRM_ERROR("Failed to allocate status page\n");
-
 
1266
		ret = -ENOMEM;
1449
		DRM_ERROR("Failed to allocate status page\n");
1267
		goto err;
1450
			return -ENOMEM;
1268
	}
-
 
1269
 
-
 
1270
	i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
1451
	}
1271
 
1452
 
-
 
1453
	ret = i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
-
 
1454
	if (ret)
-
 
1455
		goto err_unref;
-
 
1456
 
-
 
1457
		flags = 0;
-
 
1458
		if (!HAS_LLC(ring->dev))
-
 
1459
			/* On g33, we cannot place HWS above 256MiB, so
-
 
1460
			 * restrict its pinning to the low mappable arena.
-
 
1461
			 * Though this restriction is not documented for
-
 
1462
			 * gen4, gen5, or byt, they also behave similarly
-
 
1463
			 * and hang if the HWS is placed at the top of the
-
 
1464
			 * GTT. To generalise, it appears that all !llc
-
 
1465
			 * platforms have issues with us placing the HWS
-
 
1466
			 * above the mappable region (even though we never
-
 
1467
			 * actualy map it).
-
 
1468
			 */
-
 
1469
			flags |= PIN_MAPPABLE;
-
 
1470
		ret = i915_gem_obj_ggtt_pin(obj, 4096, flags);
-
 
1471
		if (ret) {
-
 
1472
err_unref:
-
 
1473
			drm_gem_object_unreference(&obj->base);
-
 
1474
			return ret;
1272
	ret = i915_gem_obj_ggtt_pin(obj, 4096, true, false);
1475
		}
1273
	if (ret != 0) {
1476
 
1274
		goto err_unref;
1477
		ring->status_page.obj = obj;
1275
	}
1478
	}
1276
 
1479
 
1277
	ring->status_page.gfx_addr = i915_gem_obj_ggtt_offset(obj);
1480
	ring->status_page.gfx_addr = i915_gem_obj_ggtt_offset(obj);
1278
    ring->status_page.page_addr = (void*)MapIoMem((addr_t)sg_page(obj->pages->sgl),4096,PG_SW|0x100);
1481
    ring->status_page.page_addr = (void*)MapIoMem((addr_t)sg_page(obj->pages->sgl),4096,PG_SW|0x100);
1279
	if (ring->status_page.page_addr == NULL) {
-
 
1280
		ret = -ENOMEM;
-
 
1281
		goto err_unpin;
-
 
1282
	}
-
 
1283
	ring->status_page.obj = obj;
-
 
1284
	memset(ring->status_page.page_addr, 0, PAGE_SIZE);
1482
	memset(ring->status_page.page_addr, 0, PAGE_SIZE);
1285
 
1483
 
1286
	DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n",
1484
	DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n",
1287
			ring->name, ring->status_page.gfx_addr);
1485
			ring->name, ring->status_page.gfx_addr);
1288
 
1486
 
1289
	return 0;
1487
	return 0;
1290
 
-
 
1291
err_unpin:
-
 
1292
	i915_gem_object_unpin(obj);
-
 
1293
err_unref:
-
 
1294
	drm_gem_object_unreference(&obj->base);
-
 
1295
err:
-
 
1296
	return ret;
-
 
1297
}
1488
}
1298
 
1489
 
1299
static int init_phys_status_page(struct intel_ring_buffer *ring)
1490
static int init_phys_status_page(struct intel_engine_cs *ring)
1300
{
1491
{
1301
    struct drm_i915_private *dev_priv = ring->dev->dev_private;
1492
    struct drm_i915_private *dev_priv = ring->dev->dev_private;
1302
 
1493
 
1303
    if (!dev_priv->status_page_dmah) {
1494
    if (!dev_priv->status_page_dmah) {
1304
        dev_priv->status_page_dmah =
1495
        dev_priv->status_page_dmah =
1305
            drm_pci_alloc(ring->dev, PAGE_SIZE, PAGE_SIZE);
1496
            drm_pci_alloc(ring->dev, PAGE_SIZE, PAGE_SIZE);
1306
        if (!dev_priv->status_page_dmah)
1497
        if (!dev_priv->status_page_dmah)
1307
            return -ENOMEM;
1498
            return -ENOMEM;
1308
    }
1499
    }
1309
 
1500
 
1310
    ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
1501
    ring->status_page.page_addr = dev_priv->status_page_dmah->vaddr;
1311
    memset(ring->status_page.page_addr, 0, PAGE_SIZE);
1502
    memset(ring->status_page.page_addr, 0, PAGE_SIZE);
1312
 
1503
 
1313
    return 0;
1504
    return 0;
1314
}
1505
}
1315
 
1506
 
1316
static int intel_init_ring_buffer(struct drm_device *dev,
-
 
1317
			   struct intel_ring_buffer *ring)
1507
static void intel_destroy_ringbuffer_obj(struct intel_ringbuffer *ringbuf)
1318
{
1508
{
1319
	struct drm_i915_gem_object *obj;
-
 
1320
	struct drm_i915_private *dev_priv = dev->dev_private;
1509
	if (!ringbuf->obj)
1321
	int ret;
1510
		return;
1322
 
1511
 
1323
	ring->dev = dev;
1512
	iounmap(ringbuf->virtual_start);
1324
	INIT_LIST_HEAD(&ring->active_list);
1513
	i915_gem_object_ggtt_unpin(ringbuf->obj);
1325
	INIT_LIST_HEAD(&ring->request_list);
-
 
-
 
1514
	drm_gem_object_unreference(&ringbuf->obj->base);
-
 
1515
	ringbuf->obj = NULL;
1326
	ring->size = 32 * PAGE_SIZE;
1516
}
-
 
1517
 
-
 
1518
static int intel_alloc_ringbuffer_obj(struct drm_device *dev,
-
 
1519
				      struct intel_ringbuffer *ringbuf)
-
 
1520
{
1327
	memset(ring->sync_seqno, 0, sizeof(ring->sync_seqno));
-
 
1328
 
-
 
1329
	init_waitqueue_head(&ring->irq_queue);
-
 
1330
 
-
 
1331
	if (I915_NEED_GFX_HWS(dev)) {
-
 
1332
       ret = init_status_page(ring);
-
 
1333
       if (ret)
-
 
1334
           return ret;
1521
	struct drm_i915_private *dev_priv = to_i915(dev);
1335
	} else {
1522
	struct drm_i915_gem_object *obj;
1336
		BUG_ON(ring->id != RCS);
-
 
1337
		ret = init_phys_status_page(ring);
1523
	int ret;
1338
		if (ret)
1524
 
1339
			return ret;
1525
	if (ringbuf->obj)
1340
	}
1526
		return 0;
1341
 
1527
 
1342
	obj = NULL;
1528
	obj = NULL;
1343
	if (!HAS_LLC(dev))
1529
	if (!HAS_LLC(dev))
1344
		obj = i915_gem_object_create_stolen(dev, ring->size);
1530
		obj = i915_gem_object_create_stolen(dev, ringbuf->size);
1345
	if (obj == NULL)
1531
	if (obj == NULL)
1346
        obj = i915_gem_alloc_object(dev, ring->size);
1532
		obj = i915_gem_alloc_object(dev, ringbuf->size);
1347
	if (obj == NULL) {
1533
	if (obj == NULL)
1348
		DRM_ERROR("Failed to allocate ringbuffer\n");
-
 
1349
		ret = -ENOMEM;
1534
		return -ENOMEM;
1350
		goto err_hws;
-
 
1351
	}
-
 
-
 
1535
 
1352
 
1536
	/* mark ring buffers as read-only from GPU side by default */
1353
	ring->obj = obj;
1537
	obj->gt_ro = 1;
1354
 
1538
 
1355
	ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, true, false);
1539
	ret = i915_gem_obj_ggtt_pin(obj, PAGE_SIZE, PIN_MAPPABLE);
1356
	if (ret)
1540
	if (ret)
1357
		goto err_unref;
1541
		goto err_unref;
1358
 
1542
 
1359
	ret = i915_gem_object_set_to_gtt_domain(obj, true);
1543
	ret = i915_gem_object_set_to_gtt_domain(obj, true);
1360
	if (ret)
1544
	if (ret)
1361
		goto err_unpin;
1545
		goto err_unpin;
1362
 
1546
 
1363
	ring->virtual_start =
1547
	ringbuf->virtual_start =
1364
		ioremap_wc(dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(obj),
1548
		ioremap_wc(dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(obj),
1365
			   ring->size);
1549
				ringbuf->size);
1366
	if (ring->virtual_start == NULL) {
-
 
1367
		DRM_ERROR("Failed to map ringbuffer.\n");
1550
	if (ringbuf->virtual_start == NULL) {
1368
		ret = -EINVAL;
1551
		ret = -EINVAL;
1369
		goto err_unpin;
1552
		goto err_unpin;
1370
	}
1553
	}
-
 
1554
 
-
 
1555
	ringbuf->obj = obj;
-
 
1556
	return 0;
-
 
1557
 
-
 
1558
err_unpin:
-
 
1559
	i915_gem_object_ggtt_unpin(obj);
-
 
1560
err_unref:
-
 
1561
	drm_gem_object_unreference(&obj->base);
-
 
1562
	return ret;
-
 
1563
}
-
 
1564
 
-
 
1565
static int intel_init_ring_buffer(struct drm_device *dev,
-
 
1566
				  struct intel_engine_cs *ring)
-
 
1567
{
-
 
1568
	struct intel_ringbuffer *ringbuf = ring->buffer;
-
 
1569
	int ret;
-
 
1570
 
-
 
1571
	if (ringbuf == NULL) {
-
 
1572
		ringbuf = kzalloc(sizeof(*ringbuf), GFP_KERNEL);
-
 
1573
		if (!ringbuf)
-
 
1574
			return -ENOMEM;
-
 
1575
		ring->buffer = ringbuf;
-
 
1576
	}
-
 
1577
 
-
 
1578
	ring->dev = dev;
-
 
1579
	INIT_LIST_HEAD(&ring->active_list);
-
 
1580
	INIT_LIST_HEAD(&ring->request_list);
-
 
1581
	ringbuf->size = 32 * PAGE_SIZE;
-
 
1582
	memset(ring->semaphore.sync_seqno, 0, sizeof(ring->semaphore.sync_seqno));
-
 
1583
 
-
 
1584
	init_waitqueue_head(&ring->irq_queue);
-
 
1585
 
1371
 
1586
	if (I915_NEED_GFX_HWS(dev)) {
-
 
1587
		ret = init_status_page(ring);
-
 
1588
		if (ret)
-
 
1589
			goto error;
-
 
1590
	} else {
-
 
1591
		BUG_ON(ring->id != RCS);
1372
	ret = ring->init(ring);
1592
		ret = init_phys_status_page(ring);
-
 
1593
	if (ret)
-
 
1594
			goto error;
-
 
1595
	}
-
 
1596
 
-
 
1597
	ret = intel_alloc_ringbuffer_obj(dev, ringbuf);
-
 
1598
	if (ret) {
1373
	if (ret)
1599
		DRM_ERROR("Failed to allocate ringbuffer %s: %d\n", ring->name, ret);
-
 
1600
		goto error;
1374
		goto err_unmap;
1601
	}
1375
 
1602
 
1376
	/* Workaround an erratum on the i830 which causes a hang if
1603
	/* Workaround an erratum on the i830 which causes a hang if
1377
	 * the TAIL pointer points to within the last 2 cachelines
1604
	 * the TAIL pointer points to within the last 2 cachelines
1378
	 * of the buffer.
1605
	 * of the buffer.
1379
	 */
1606
	 */
1380
	ring->effective_size = ring->size;
1607
	ringbuf->effective_size = ringbuf->size;
1381
	if (IS_I830(ring->dev) || IS_845G(ring->dev))
1608
	if (IS_I830(dev) || IS_845G(dev))
1382
		ring->effective_size -= 128;
1609
		ringbuf->effective_size -= 2 * CACHELINE_BYTES;
-
 
1610
 
-
 
1611
	ret = i915_cmd_parser_init_ring(ring);
-
 
1612
	if (ret)
-
 
1613
		goto error;
-
 
1614
 
-
 
1615
	ret = ring->init(ring);
-
 
1616
	if (ret)
-
 
1617
		goto error;
1383
 
1618
 
1384
	return 0;
1619
	return 0;
1385
 
1620
 
1386
err_unmap:
1621
error:
1387
	iounmap(ring->virtual_start);
-
 
1388
err_unpin:
-
 
1389
	i915_gem_object_unpin(obj);
-
 
1390
err_unref:
-
 
1391
	drm_gem_object_unreference(&obj->base);
1622
	kfree(ringbuf);
1392
	ring->obj = NULL;
-
 
1393
err_hws:
-
 
1394
//   cleanup_status_page(ring);
1623
	ring->buffer = NULL;
1395
	return ret;
1624
	return ret;
1396
}
1625
}
1397
 
1626
 
1398
void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
1627
void intel_cleanup_ring_buffer(struct intel_engine_cs *ring)
1399
{
1628
{
1400
	struct drm_i915_private *dev_priv;
1629
	struct drm_i915_private *dev_priv = to_i915(ring->dev);
1401
	int ret;
1630
	struct intel_ringbuffer *ringbuf = ring->buffer;
1402
 
1631
 
1403
	if (ring->obj == NULL)
-
 
1404
		return;
-
 
1405
 
1632
	if (!intel_ring_initialized(ring))
1406
	/* Disable the ring buffer. The ring must be idle at this point */
-
 
1407
	dev_priv = ring->dev->dev_private;
1633
		return;
1408
	ret = intel_ring_idle(ring);
-
 
1409
	if (ret && !i915_reset_in_progress(&dev_priv->gpu_error))
-
 
1410
		DRM_ERROR("failed to quiesce %s whilst cleaning up: %d\n",
-
 
1411
			  ring->name, ret);
-
 
1412
 
-
 
1413
	I915_WRITE_CTL(ring, 0);
-
 
1414
 
1634
 
1415
	iounmap(ring->virtual_start);
-
 
1416
 
1635
	intel_stop_ring_buffer(ring);
1417
    i915_gem_object_unpin(ring->obj);
1636
	WARN_ON(!IS_GEN2(ring->dev) && (I915_READ_MODE(ring) & MODE_IDLE) == 0);
1418
	drm_gem_object_unreference(&ring->obj->base);
1637
 
1419
	ring->obj = NULL;
1638
	intel_destroy_ringbuffer_obj(ringbuf);
1420
	ring->preallocated_lazy_request = NULL;
1639
	ring->preallocated_lazy_request = NULL;
1421
	ring->outstanding_lazy_seqno = 0;
1640
	ring->outstanding_lazy_seqno = 0;
1422
 
1641
 
1423
	if (ring->cleanup)
1642
	if (ring->cleanup)
1424
		ring->cleanup(ring);
1643
		ring->cleanup(ring);
1425
 
1644
 
1426
//   cleanup_status_page(ring);
1645
//	cleanup_status_page(ring);
1427
}
-
 
1428
 
1646
 
1429
static int intel_ring_wait_seqno(struct intel_ring_buffer *ring, u32 seqno)
-
 
1430
{
-
 
1431
	int ret;
-
 
1432
 
1647
	i915_cmd_parser_fini_ring(ring);
1433
	ret = i915_wait_seqno(ring, seqno);
-
 
1434
	if (!ret)
-
 
1435
		i915_gem_retire_requests_ring(ring);
1648
 
1436
 
1649
	kfree(ringbuf);
1437
	return ret;
1650
	ring->buffer = NULL;
1438
}
1651
}
-
 
1652
 
1439
 
1653
static int intel_ring_wait_request(struct intel_engine_cs *ring, int n)
1440
static int intel_ring_wait_request(struct intel_ring_buffer *ring, int n)
1654
{
1441
{
1655
	struct intel_ringbuffer *ringbuf = ring->buffer;
1442
	struct drm_i915_gem_request *request;
1656
	struct drm_i915_gem_request *request;
1443
	u32 seqno = 0;
1657
	u32 seqno = 0;
1444
	int ret;
1658
	int ret;
-
 
1659
 
-
 
1660
	if (ringbuf->last_retired_head != -1) {
1445
 
1661
		ringbuf->head = ringbuf->last_retired_head;
1446
	i915_gem_retire_requests_ring(ring);
-
 
1447
 
-
 
1448
	if (ring->last_retired_head != -1) {
-
 
1449
		ring->head = ring->last_retired_head;
1662
		ringbuf->last_retired_head = -1;
1450
		ring->last_retired_head = -1;
1663
 
1451
		ring->space = ring_space(ring);
1664
		ringbuf->space = ring_space(ringbuf);
1452
		if (ring->space >= n)
1665
		if (ringbuf->space >= n)
1453
			return 0;
1666
			return 0;
1454
	}
1667
	}
1455
 
1668
 
1456
	list_for_each_entry(request, &ring->request_list, list) {
1669
	list_for_each_entry(request, &ring->request_list, list) {
1457
		int space;
-
 
1458
 
-
 
1459
		if (request->tail == -1)
-
 
1460
			continue;
-
 
1461
 
-
 
1462
		space = request->tail - (ring->tail + I915_RING_FREE_SPACE);
1670
		if (__ring_space(request->tail, ringbuf->tail, ringbuf->size) >= n) {
1463
		if (space < 0)
-
 
1464
			space += ring->size;
-
 
1465
		if (space >= n) {
-
 
1466
			seqno = request->seqno;
1671
			seqno = request->seqno;
1467
			break;
1672
			break;
1468
		}
1673
		}
1469
 
-
 
1470
		/* Consume this request in case we need more space than
-
 
1471
		 * is available and so need to prevent a race between
-
 
1472
		 * updating last_retired_head and direct reads of
-
 
1473
		 * I915_RING_HEAD. It also provides a nice sanity check.
-
 
1474
		 */
-
 
1475
		request->tail = -1;
-
 
1476
	}
1674
	}
1477
 
1675
 
1478
	if (seqno == 0)
1676
	if (seqno == 0)
1479
		return -ENOSPC;
1677
		return -ENOSPC;
1480
 
1678
 
1481
	ret = intel_ring_wait_seqno(ring, seqno);
1679
	ret = i915_wait_seqno(ring, seqno);
1482
	if (ret)
1680
	if (ret)
1483
		return ret;
1681
		return ret;
1484
 
1682
 
1485
	if (WARN_ON(ring->last_retired_head == -1))
-
 
1486
		return -ENOSPC;
-
 
1487
 
1683
	i915_gem_retire_requests_ring(ring);
1488
	ring->head = ring->last_retired_head;
1684
	ringbuf->head = ringbuf->last_retired_head;
1489
	ring->last_retired_head = -1;
-
 
1490
	ring->space = ring_space(ring);
-
 
1491
	if (WARN_ON(ring->space < n))
-
 
-
 
1685
	ringbuf->last_retired_head = -1;
1492
		return -ENOSPC;
1686
 
1493
 
1687
	ringbuf->space = ring_space(ringbuf);
1494
	return 0;
1688
	return 0;
1495
}
1689
}
1496
 
1690
 
1497
static int ring_wait_for_space(struct intel_ring_buffer *ring, int n)
1691
static int ring_wait_for_space(struct intel_engine_cs *ring, int n)
1498
{
1692
{
1499
	struct drm_device *dev = ring->dev;
1693
	struct drm_device *dev = ring->dev;
1500
	struct drm_i915_private *dev_priv = dev->dev_private;
1694
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
1695
	struct intel_ringbuffer *ringbuf = ring->buffer;
1501
	unsigned long end;
1696
	unsigned long end;
1502
	int ret;
1697
	int ret;
1503
 
1698
 
1504
	ret = intel_ring_wait_request(ring, n);
1699
	ret = intel_ring_wait_request(ring, n);
1505
	if (ret != -ENOSPC)
1700
	if (ret != -ENOSPC)
1506
		return ret;
1701
		return ret;
1507
 
1702
 
1508
	/* force the tail write in case we have been skipping them */
1703
	/* force the tail write in case we have been skipping them */
1509
	__intel_ring_advance(ring);
1704
	__intel_ring_advance(ring);
1510
 
-
 
1511
	trace_i915_ring_wait_begin(ring);
1705
 
1512
	/* With GEM the hangcheck timer should kick us out of the loop,
1706
	/* With GEM the hangcheck timer should kick us out of the loop,
1513
	 * leaving it early runs the risk of corrupting GEM state (due
1707
	 * leaving it early runs the risk of corrupting GEM state (due
1514
	 * to running on almost untested codepaths). But on resume
1708
	 * to running on almost untested codepaths). But on resume
1515
	 * timers don't work yet, so prevent a complete hang in that
1709
	 * timers don't work yet, so prevent a complete hang in that
1516
	 * case by choosing an insanely large timeout. */
1710
	 * case by choosing an insanely large timeout. */
1517
	end = GetTimerTicks() + 60 * HZ;
1711
	end = jiffies + 60 * HZ;
-
 
1712
 
1518
 
1713
	trace_i915_ring_wait_begin(ring);
1519
	do {
1714
	do {
1520
		ring->head = I915_READ_HEAD(ring);
1715
		ringbuf->head = I915_READ_HEAD(ring);
1521
		ring->space = ring_space(ring);
1716
		ringbuf->space = ring_space(ringbuf);
1522
		if (ring->space >= n) {
1717
		if (ringbuf->space >= n) {
1523
			trace_i915_ring_wait_end(ring);
1718
			ret = 0;
1524
			return 0;
1719
			break;
-
 
1720
		}
1525
		}
1721
 
1526
 
1722
 
1527
		msleep(1);
1723
		msleep(1);
1528
 
1724
 
1529
		ret = i915_gem_check_wedge(&dev_priv->gpu_error,
1725
		ret = i915_gem_check_wedge(&dev_priv->gpu_error,
1530
					   dev_priv->mm.interruptible);
1726
					   dev_priv->mm.interruptible);
1531
		if (ret)
1727
		if (ret)
1532
			return ret;
1728
			break;
-
 
1729
 
1533
    } while (!time_after(GetTimerTicks(), end));
1730
		if (time_after(jiffies, end)) {
-
 
1731
			ret = -EBUSY;
-
 
1732
			break;
-
 
1733
		}
-
 
1734
	} while (1);
1534
	trace_i915_ring_wait_end(ring);
1735
	trace_i915_ring_wait_end(ring);
1535
	return -EBUSY;
1736
			return ret;
1536
}
1737
}
1537
 
1738
 
1538
static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
1739
static int intel_wrap_ring_buffer(struct intel_engine_cs *ring)
1539
{
1740
{
-
 
1741
	uint32_t __iomem *virt;
1540
	uint32_t __iomem *virt;
1742
	struct intel_ringbuffer *ringbuf = ring->buffer;
1541
	int rem = ring->size - ring->tail;
1743
	int rem = ringbuf->size - ringbuf->tail;
1542
 
1744
 
1543
	if (ring->space < rem) {
1745
	if (ringbuf->space < rem) {
1544
		int ret = ring_wait_for_space(ring, rem);
1746
		int ret = ring_wait_for_space(ring, rem);
1545
		if (ret)
1747
		if (ret)
1546
			return ret;
1748
			return ret;
1547
	}
1749
	}
1548
 
1750
 
1549
	virt = ring->virtual_start + ring->tail;
1751
	virt = ringbuf->virtual_start + ringbuf->tail;
1550
	rem /= 4;
1752
	rem /= 4;
1551
	while (rem--)
1753
	while (rem--)
1552
		iowrite32(MI_NOOP, virt++);
1754
		iowrite32(MI_NOOP, virt++);
1553
 
1755
 
1554
	ring->tail = 0;
1756
	ringbuf->tail = 0;
1555
	ring->space = ring_space(ring);
1757
	ringbuf->space = ring_space(ringbuf);
1556
 
1758
 
1557
	return 0;
1759
	return 0;
1558
}
1760
}
1559
 
1761
 
1560
int intel_ring_idle(struct intel_ring_buffer *ring)
1762
int intel_ring_idle(struct intel_engine_cs *ring)
1561
{
1763
{
1562
	u32 seqno;
1764
	u32 seqno;
1563
	int ret;
1765
	int ret;
1564
 
1766
 
1565
	/* We need to add any requests required to flush the objects and ring */
1767
	/* We need to add any requests required to flush the objects and ring */
1566
	if (ring->outstanding_lazy_seqno) {
1768
	if (ring->outstanding_lazy_seqno) {
1567
		ret = i915_add_request(ring, NULL);
1769
		ret = i915_add_request(ring, NULL);
1568
		if (ret)
1770
		if (ret)
1569
			return ret;
1771
			return ret;
1570
	}
1772
	}
1571
 
1773
 
1572
	/* Wait upon the last request to be completed */
1774
	/* Wait upon the last request to be completed */
1573
	if (list_empty(&ring->request_list))
1775
	if (list_empty(&ring->request_list))
1574
		return 0;
1776
		return 0;
1575
 
1777
 
1576
	seqno = list_entry(ring->request_list.prev,
1778
	seqno = list_entry(ring->request_list.prev,
1577
			   struct drm_i915_gem_request,
1779
			   struct drm_i915_gem_request,
1578
			   list)->seqno;
1780
			   list)->seqno;
1579
 
1781
 
1580
	return i915_wait_seqno(ring, seqno);
1782
	return i915_wait_seqno(ring, seqno);
1581
}
1783
}
1582
 
1784
 
1583
static int
1785
static int
1584
intel_ring_alloc_seqno(struct intel_ring_buffer *ring)
1786
intel_ring_alloc_seqno(struct intel_engine_cs *ring)
1585
{
1787
{
1586
	if (ring->outstanding_lazy_seqno)
1788
	if (ring->outstanding_lazy_seqno)
1587
		return 0;
1789
		return 0;
1588
 
1790
 
1589
	if (ring->preallocated_lazy_request == NULL) {
1791
	if (ring->preallocated_lazy_request == NULL) {
1590
		struct drm_i915_gem_request *request;
1792
		struct drm_i915_gem_request *request;
1591
 
1793
 
1592
		request = kmalloc(sizeof(*request), GFP_KERNEL);
1794
		request = kmalloc(sizeof(*request), GFP_KERNEL);
1593
		if (request == NULL)
1795
		if (request == NULL)
1594
			return -ENOMEM;
1796
			return -ENOMEM;
1595
 
1797
 
1596
		ring->preallocated_lazy_request = request;
1798
		ring->preallocated_lazy_request = request;
1597
	}
1799
	}
1598
 
1800
 
1599
	return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_seqno);
1801
	return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_seqno);
1600
}
1802
}
1601
 
1803
 
1602
static int __intel_ring_prepare(struct intel_ring_buffer *ring,
1804
static int __intel_ring_prepare(struct intel_engine_cs *ring,
1603
			      int bytes)
1805
			      int bytes)
-
 
1806
{
1604
{
1807
	struct intel_ringbuffer *ringbuf = ring->buffer;
1605
	int ret;
1808
	int ret;
1606
 
1809
 
1607
	if (unlikely(ring->tail + bytes > ring->effective_size)) {
1810
	if (unlikely(ringbuf->tail + bytes > ringbuf->effective_size)) {
1608
		ret = intel_wrap_ring_buffer(ring);
1811
		ret = intel_wrap_ring_buffer(ring);
1609
		if (unlikely(ret))
1812
		if (unlikely(ret))
1610
			return ret;
1813
			return ret;
1611
	}
1814
	}
1612
 
1815
 
1613
	if (unlikely(ring->space < bytes)) {
1816
	if (unlikely(ringbuf->space < bytes)) {
1614
		ret = ring_wait_for_space(ring, bytes);
1817
		ret = ring_wait_for_space(ring, bytes);
1615
		if (unlikely(ret))
1818
		if (unlikely(ret))
1616
			return ret;
1819
			return ret;
1617
	}
1820
	}
1618
 
1821
 
1619
	return 0;
1822
	return 0;
1620
}
1823
}
1621
 
1824
 
1622
int intel_ring_begin(struct intel_ring_buffer *ring,
1825
int intel_ring_begin(struct intel_engine_cs *ring,
1623
		     int num_dwords)
1826
		     int num_dwords)
1624
{
1827
{
1625
	drm_i915_private_t *dev_priv = ring->dev->dev_private;
1828
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
1626
	int ret;
1829
	int ret;
1627
 
1830
 
1628
	ret = i915_gem_check_wedge(&dev_priv->gpu_error,
1831
	ret = i915_gem_check_wedge(&dev_priv->gpu_error,
1629
				   dev_priv->mm.interruptible);
1832
				   dev_priv->mm.interruptible);
1630
	if (ret)
1833
	if (ret)
1631
		return ret;
1834
		return ret;
1632
 
1835
 
1633
	ret = __intel_ring_prepare(ring, num_dwords * sizeof(uint32_t));
1836
	ret = __intel_ring_prepare(ring, num_dwords * sizeof(uint32_t));
1634
	if (ret)
1837
	if (ret)
1635
		return ret;
1838
		return ret;
1636
 
1839
 
1637
	/* Preallocate the olr before touching the ring */
1840
	/* Preallocate the olr before touching the ring */
1638
	ret = intel_ring_alloc_seqno(ring);
1841
	ret = intel_ring_alloc_seqno(ring);
1639
	if (ret)
1842
	if (ret)
1640
		return ret;
1843
		return ret;
1641
 
1844
 
1642
	ring->space -= num_dwords * sizeof(uint32_t);
1845
	ring->buffer->space -= num_dwords * sizeof(uint32_t);
1643
	return 0;
1846
	return 0;
1644
}
1847
}
-
 
1848
 
1645
 
1849
/* Align the ring tail to a cacheline boundary */
1646
void intel_ring_init_seqno(struct intel_ring_buffer *ring, u32 seqno)
1850
int intel_ring_cacheline_align(struct intel_engine_cs *ring)
-
 
1851
{
-
 
1852
	int num_dwords = (ring->buffer->tail & (CACHELINE_BYTES - 1)) / sizeof(uint32_t);
-
 
1853
	int ret;
-
 
1854
 
-
 
1855
	if (num_dwords == 0)
-
 
1856
		return 0;
-
 
1857
 
-
 
1858
	num_dwords = CACHELINE_BYTES / sizeof(uint32_t) - num_dwords;
-
 
1859
	ret = intel_ring_begin(ring, num_dwords);
-
 
1860
	if (ret)
-
 
1861
		return ret;
-
 
1862
 
-
 
1863
	while (num_dwords--)
-
 
1864
		intel_ring_emit(ring, MI_NOOP);
-
 
1865
 
-
 
1866
	intel_ring_advance(ring);
-
 
1867
 
-
 
1868
	return 0;
-
 
1869
}
-
 
1870
 
-
 
1871
void intel_ring_init_seqno(struct intel_engine_cs *ring, u32 seqno)
-
 
1872
{
1647
{
1873
	struct drm_device *dev = ring->dev;
1648
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
1874
	struct drm_i915_private *dev_priv = dev->dev_private;
1649
 
1875
 
1650
	BUG_ON(ring->outstanding_lazy_seqno);
1876
	BUG_ON(ring->outstanding_lazy_seqno);
1651
 
1877
 
1652
	if (INTEL_INFO(ring->dev)->gen >= 6) {
1878
	if (INTEL_INFO(dev)->gen == 6 || INTEL_INFO(dev)->gen == 7) {
1653
		I915_WRITE(RING_SYNC_0(ring->mmio_base), 0);
1879
		I915_WRITE(RING_SYNC_0(ring->mmio_base), 0);
1654
		I915_WRITE(RING_SYNC_1(ring->mmio_base), 0);
1880
		I915_WRITE(RING_SYNC_1(ring->mmio_base), 0);
1655
		if (HAS_VEBOX(ring->dev))
1881
		if (HAS_VEBOX(dev))
1656
			I915_WRITE(RING_SYNC_2(ring->mmio_base), 0);
1882
			I915_WRITE(RING_SYNC_2(ring->mmio_base), 0);
1657
	}
1883
	}
1658
 
1884
 
1659
	ring->set_seqno(ring, seqno);
1885
	ring->set_seqno(ring, seqno);
1660
	ring->hangcheck.seqno = seqno;
1886
	ring->hangcheck.seqno = seqno;
1661
}
1887
}
1662
 
1888
 
1663
static void gen6_bsd_ring_write_tail(struct intel_ring_buffer *ring,
1889
static void gen6_bsd_ring_write_tail(struct intel_engine_cs *ring,
1664
				     u32 value)
1890
				     u32 value)
1665
{
1891
{
1666
       drm_i915_private_t *dev_priv = ring->dev->dev_private;
1892
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
1667
 
1893
 
1668
       /* Every tail move must follow the sequence below */
1894
       /* Every tail move must follow the sequence below */
1669
 
1895
 
1670
	/* Disable notification that the ring is IDLE. The GT
1896
	/* Disable notification that the ring is IDLE. The GT
1671
	 * will then assume that it is busy and bring it out of rc6.
1897
	 * will then assume that it is busy and bring it out of rc6.
1672
	 */
1898
	 */
1673
       I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
1899
       I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
1674
		   _MASKED_BIT_ENABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
1900
		   _MASKED_BIT_ENABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
1675
 
1901
 
1676
	/* Clear the context id. Here be magic! */
1902
	/* Clear the context id. Here be magic! */
1677
	I915_WRITE64(GEN6_BSD_RNCID, 0x0);
1903
	I915_WRITE64(GEN6_BSD_RNCID, 0x0);
1678
 
1904
 
1679
	/* Wait for the ring not to be idle, i.e. for it to wake up. */
1905
	/* Wait for the ring not to be idle, i.e. for it to wake up. */
1680
       if (wait_for((I915_READ(GEN6_BSD_SLEEP_PSMI_CONTROL) &
1906
       if (wait_for((I915_READ(GEN6_BSD_SLEEP_PSMI_CONTROL) &
1681
		      GEN6_BSD_SLEEP_INDICATOR) == 0,
1907
		      GEN6_BSD_SLEEP_INDICATOR) == 0,
1682
                       50))
1908
                       50))
1683
		DRM_ERROR("timed out waiting for the BSD ring to wake up\n");
1909
		DRM_ERROR("timed out waiting for the BSD ring to wake up\n");
1684
 
1910
 
1685
	/* Now that the ring is fully powered up, update the tail */
1911
	/* Now that the ring is fully powered up, update the tail */
1686
       I915_WRITE_TAIL(ring, value);
1912
       I915_WRITE_TAIL(ring, value);
1687
	POSTING_READ(RING_TAIL(ring->mmio_base));
1913
	POSTING_READ(RING_TAIL(ring->mmio_base));
1688
 
1914
 
1689
	/* Let the ring send IDLE messages to the GT again,
1915
	/* Let the ring send IDLE messages to the GT again,
1690
	 * and so let it sleep to conserve power when idle.
1916
	 * and so let it sleep to conserve power when idle.
1691
	 */
1917
	 */
1692
       I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
1918
       I915_WRITE(GEN6_BSD_SLEEP_PSMI_CONTROL,
1693
		   _MASKED_BIT_DISABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
1919
		   _MASKED_BIT_DISABLE(GEN6_BSD_SLEEP_MSG_DISABLE));
1694
}
1920
}
1695
 
1921
 
1696
static int gen6_bsd_ring_flush(struct intel_ring_buffer *ring,
1922
static int gen6_bsd_ring_flush(struct intel_engine_cs *ring,
1697
			   u32 invalidate, u32 flush)
1923
			   u32 invalidate, u32 flush)
1698
{
1924
{
1699
	uint32_t cmd;
1925
	uint32_t cmd;
1700
	int ret;
1926
	int ret;
1701
 
1927
 
1702
	ret = intel_ring_begin(ring, 4);
1928
	ret = intel_ring_begin(ring, 4);
1703
	if (ret)
1929
	if (ret)
1704
		return ret;
1930
		return ret;
1705
 
1931
 
1706
	cmd = MI_FLUSH_DW;
1932
	cmd = MI_FLUSH_DW;
1707
	if (INTEL_INFO(ring->dev)->gen >= 8)
1933
	if (INTEL_INFO(ring->dev)->gen >= 8)
1708
		cmd += 1;
1934
		cmd += 1;
1709
	/*
1935
	/*
1710
	 * Bspec vol 1c.5 - video engine command streamer:
1936
	 * Bspec vol 1c.5 - video engine command streamer:
1711
	 * "If ENABLED, all TLBs will be invalidated once the flush
1937
	 * "If ENABLED, all TLBs will be invalidated once the flush
1712
	 * operation is complete. This bit is only valid when the
1938
	 * operation is complete. This bit is only valid when the
1713
	 * Post-Sync Operation field is a value of 1h or 3h."
1939
	 * Post-Sync Operation field is a value of 1h or 3h."
1714
	 */
1940
	 */
1715
	if (invalidate & I915_GEM_GPU_DOMAINS)
1941
	if (invalidate & I915_GEM_GPU_DOMAINS)
1716
		cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD |
1942
		cmd |= MI_INVALIDATE_TLB | MI_INVALIDATE_BSD |
1717
			MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
1943
			MI_FLUSH_DW_STORE_INDEX | MI_FLUSH_DW_OP_STOREDW;
1718
	intel_ring_emit(ring, cmd);
1944
	intel_ring_emit(ring, cmd);
1719
	intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
1945
	intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
1720
	if (INTEL_INFO(ring->dev)->gen >= 8) {
1946
	if (INTEL_INFO(ring->dev)->gen >= 8) {
1721
		intel_ring_emit(ring, 0); /* upper addr */
1947
		intel_ring_emit(ring, 0); /* upper addr */
1722
		intel_ring_emit(ring, 0); /* value */
1948
		intel_ring_emit(ring, 0); /* value */
1723
	} else  {
1949
	} else  {
1724
	intel_ring_emit(ring, 0);
1950
	intel_ring_emit(ring, 0);
1725
	intel_ring_emit(ring, MI_NOOP);
1951
	intel_ring_emit(ring, MI_NOOP);
1726
	}
1952
	}
1727
	intel_ring_advance(ring);
1953
	intel_ring_advance(ring);
1728
	return 0;
1954
	return 0;
1729
}
1955
}
1730
 
1956
 
1731
static int
1957
static int
1732
gen8_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
1958
gen8_ring_dispatch_execbuffer(struct intel_engine_cs *ring,
1733
			      u32 offset, u32 len,
1959
			      u64 offset, u32 len,
1734
			      unsigned flags)
1960
			      unsigned flags)
1735
{
1961
{
1736
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
1962
	struct drm_i915_private *dev_priv = ring->dev->dev_private;
1737
	bool ppgtt = dev_priv->mm.aliasing_ppgtt != NULL &&
1963
	bool ppgtt = dev_priv->mm.aliasing_ppgtt != NULL &&
1738
		!(flags & I915_DISPATCH_SECURE);
1964
		!(flags & I915_DISPATCH_SECURE);
1739
	int ret;
1965
	int ret;
1740
 
1966
 
1741
	ret = intel_ring_begin(ring, 4);
1967
	ret = intel_ring_begin(ring, 4);
1742
	if (ret)
1968
	if (ret)
1743
		return ret;
1969
		return ret;
1744
 
1970
 
1745
	/* FIXME(BDW): Address space and security selectors. */
1971
	/* FIXME(BDW): Address space and security selectors. */
1746
	intel_ring_emit(ring, MI_BATCH_BUFFER_START_GEN8 | (ppgtt<<8));
1972
	intel_ring_emit(ring, MI_BATCH_BUFFER_START_GEN8 | (ppgtt<<8));
1747
	intel_ring_emit(ring, offset);
1973
	intel_ring_emit(ring, lower_32_bits(offset));
1748
	intel_ring_emit(ring, 0);
1974
	intel_ring_emit(ring, upper_32_bits(offset));
1749
	intel_ring_emit(ring, MI_NOOP);
1975
	intel_ring_emit(ring, MI_NOOP);
1750
	intel_ring_advance(ring);
1976
	intel_ring_advance(ring);
1751
 
1977
 
1752
	return 0;
1978
	return 0;
1753
}
1979
}
1754
 
1980
 
1755
static int
1981
static int
1756
hsw_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
1982
hsw_ring_dispatch_execbuffer(struct intel_engine_cs *ring,
1757
			      u32 offset, u32 len,
1983
			      u64 offset, u32 len,
1758
			      unsigned flags)
1984
			      unsigned flags)
1759
{
1985
{
1760
	int ret;
1986
	int ret;
1761
 
1987
 
1762
	ret = intel_ring_begin(ring, 2);
1988
	ret = intel_ring_begin(ring, 2);
1763
	if (ret)
1989
	if (ret)
1764
		return ret;
1990
		return ret;
1765
 
1991
 
1766
	intel_ring_emit(ring,
1992
	intel_ring_emit(ring,
1767
			MI_BATCH_BUFFER_START | MI_BATCH_PPGTT_HSW |
1993
			MI_BATCH_BUFFER_START | MI_BATCH_PPGTT_HSW |
1768
			(flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_HSW));
1994
			(flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_HSW));
1769
	/* bit0-7 is the length on GEN6+ */
1995
	/* bit0-7 is the length on GEN6+ */
1770
	intel_ring_emit(ring, offset);
1996
	intel_ring_emit(ring, offset);
1771
	intel_ring_advance(ring);
1997
	intel_ring_advance(ring);
1772
 
1998
 
1773
	return 0;
1999
	return 0;
1774
}
2000
}
1775
 
2001
 
1776
static int
2002
static int
1777
gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
2003
gen6_ring_dispatch_execbuffer(struct intel_engine_cs *ring,
1778
			      u32 offset, u32 len,
2004
			      u64 offset, u32 len,
1779
			      unsigned flags)
2005
			      unsigned flags)
1780
{
2006
{
1781
       int ret;
2007
       int ret;
1782
 
2008
 
1783
       ret = intel_ring_begin(ring, 2);
2009
       ret = intel_ring_begin(ring, 2);
1784
       if (ret)
2010
       if (ret)
1785
	       return ret;
2011
	       return ret;
1786
 
2012
 
1787
	intel_ring_emit(ring,
2013
	intel_ring_emit(ring,
1788
			MI_BATCH_BUFFER_START |
2014
			MI_BATCH_BUFFER_START |
1789
			(flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
2015
			(flags & I915_DISPATCH_SECURE ? 0 : MI_BATCH_NON_SECURE_I965));
1790
       /* bit0-7 is the length on GEN6+ */
2016
       /* bit0-7 is the length on GEN6+ */
1791
       intel_ring_emit(ring, offset);
2017
       intel_ring_emit(ring, offset);
1792
       intel_ring_advance(ring);
2018
       intel_ring_advance(ring);
1793
 
2019
 
1794
       return 0;
2020
       return 0;
1795
}
2021
}
1796
 
2022
 
1797
/* Blitter support (SandyBridge+) */
2023
/* Blitter support (SandyBridge+) */
1798
 
2024
 
1799
static int gen6_ring_flush(struct intel_ring_buffer *ring,
2025
static int gen6_ring_flush(struct intel_engine_cs *ring,
1800
			  u32 invalidate, u32 flush)
2026
			  u32 invalidate, u32 flush)
1801
{
2027
{
1802
	struct drm_device *dev = ring->dev;
2028
	struct drm_device *dev = ring->dev;
1803
	uint32_t cmd;
2029
	uint32_t cmd;
1804
	int ret;
2030
	int ret;
1805
 
2031
 
1806
	ret = intel_ring_begin(ring, 4);
2032
	ret = intel_ring_begin(ring, 4);
1807
	if (ret)
2033
	if (ret)
1808
		return ret;
2034
		return ret;
1809
 
2035
 
1810
	cmd = MI_FLUSH_DW;
2036
	cmd = MI_FLUSH_DW;
1811
	if (INTEL_INFO(ring->dev)->gen >= 8)
2037
	if (INTEL_INFO(ring->dev)->gen >= 8)
1812
		cmd += 1;
2038
		cmd += 1;
1813
	/*
2039
	/*
1814
	 * Bspec vol 1c.3 - blitter engine command streamer:
2040
	 * Bspec vol 1c.3 - blitter engine command streamer:
1815
	 * "If ENABLED, all TLBs will be invalidated once the flush
2041
	 * "If ENABLED, all TLBs will be invalidated once the flush
1816
	 * operation is complete. This bit is only valid when the
2042
	 * operation is complete. This bit is only valid when the
1817
	 * Post-Sync Operation field is a value of 1h or 3h."
2043
	 * Post-Sync Operation field is a value of 1h or 3h."
1818
	 */
2044
	 */
1819
	if (invalidate & I915_GEM_DOMAIN_RENDER)
2045
	if (invalidate & I915_GEM_DOMAIN_RENDER)
1820
		cmd |= MI_INVALIDATE_TLB | MI_FLUSH_DW_STORE_INDEX |
2046
		cmd |= MI_INVALIDATE_TLB | MI_FLUSH_DW_STORE_INDEX |
1821
			MI_FLUSH_DW_OP_STOREDW;
2047
			MI_FLUSH_DW_OP_STOREDW;
1822
	intel_ring_emit(ring, cmd);
2048
	intel_ring_emit(ring, cmd);
1823
	intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
2049
	intel_ring_emit(ring, I915_GEM_HWS_SCRATCH_ADDR | MI_FLUSH_DW_USE_GTT);
1824
	if (INTEL_INFO(ring->dev)->gen >= 8) {
2050
	if (INTEL_INFO(ring->dev)->gen >= 8) {
1825
		intel_ring_emit(ring, 0); /* upper addr */
2051
		intel_ring_emit(ring, 0); /* upper addr */
1826
		intel_ring_emit(ring, 0); /* value */
2052
		intel_ring_emit(ring, 0); /* value */
1827
	} else  {
2053
	} else  {
1828
	intel_ring_emit(ring, 0);
2054
	intel_ring_emit(ring, 0);
1829
	intel_ring_emit(ring, MI_NOOP);
2055
	intel_ring_emit(ring, MI_NOOP);
1830
	}
2056
	}
1831
	intel_ring_advance(ring);
2057
	intel_ring_advance(ring);
1832
 
2058
 
1833
	if (IS_GEN7(dev) && !invalidate && flush)
2059
	if (IS_GEN7(dev) && !invalidate && flush)
1834
		return gen7_ring_fbc_flush(ring, FBC_REND_CACHE_CLEAN);
2060
		return gen7_ring_fbc_flush(ring, FBC_REND_CACHE_CLEAN);
1835
 
2061
 
1836
	return 0;
2062
	return 0;
1837
}
2063
}
1838
 
2064
 
1839
int intel_init_render_ring_buffer(struct drm_device *dev)
2065
int intel_init_render_ring_buffer(struct drm_device *dev)
1840
{
2066
{
1841
	drm_i915_private_t *dev_priv = dev->dev_private;
2067
	struct drm_i915_private *dev_priv = dev->dev_private;
1842
	struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
2068
	struct intel_engine_cs *ring = &dev_priv->ring[RCS];
-
 
2069
	struct drm_i915_gem_object *obj;
-
 
2070
	int ret;
1843
 
2071
 
1844
	ring->name = "render ring";
2072
	ring->name = "render ring";
1845
	ring->id = RCS;
2073
	ring->id = RCS;
1846
	ring->mmio_base = RENDER_RING_BASE;
2074
	ring->mmio_base = RENDER_RING_BASE;
1847
 
-
 
1848
	if (INTEL_INFO(dev)->gen >= 6) {
-
 
1849
       ring->add_request = gen6_add_request;
-
 
1850
		ring->flush = gen7_render_ring_flush;
-
 
1851
		if (INTEL_INFO(dev)->gen == 6)
-
 
1852
		ring->flush = gen6_render_ring_flush;
2075
 
-
 
2076
	if (INTEL_INFO(dev)->gen >= 8) {
-
 
2077
		if (i915_semaphore_is_enabled(dev)) {
-
 
2078
			obj = i915_gem_alloc_object(dev, 4096);
-
 
2079
			if (obj == NULL) {
-
 
2080
				DRM_ERROR("Failed to allocate semaphore bo. Disabling semaphores\n");
-
 
2081
				i915.semaphores = 0;
-
 
2082
			} else {
-
 
2083
				i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
-
 
2084
				ret = i915_gem_obj_ggtt_pin(obj, 0, PIN_NONBLOCK);
-
 
2085
				if (ret != 0) {
-
 
2086
					drm_gem_object_unreference(&obj->base);
-
 
2087
					DRM_ERROR("Failed to pin semaphore bo. Disabling semaphores\n");
-
 
2088
					i915.semaphores = 0;
-
 
2089
				} else
-
 
2090
					dev_priv->semaphore_obj = obj;
-
 
2091
			}
-
 
2092
		}
1853
		if (INTEL_INFO(dev)->gen >= 8) {
2093
		ring->add_request = gen6_add_request;
1854
			ring->flush = gen8_render_ring_flush;
2094
		ring->flush = gen8_render_ring_flush;
1855
			ring->irq_get = gen8_ring_get_irq;
2095
		ring->irq_get = gen8_ring_get_irq;
1856
			ring->irq_put = gen8_ring_put_irq;
2096
		ring->irq_put = gen8_ring_put_irq;
-
 
2097
		ring->irq_enable_mask = GT_RENDER_USER_INTERRUPT;
-
 
2098
		ring->get_seqno = gen6_ring_get_seqno;
-
 
2099
		ring->set_seqno = ring_set_seqno;
-
 
2100
		if (i915_semaphore_is_enabled(dev)) {
-
 
2101
			WARN_ON(!dev_priv->semaphore_obj);
-
 
2102
			ring->semaphore.sync_to = gen8_ring_sync;
-
 
2103
			ring->semaphore.signal = gen8_rcs_signal;
-
 
2104
			GEN8_RING_SEMAPHORE_INIT;
1857
		} else {
2105
		}
-
 
2106
	} else if (INTEL_INFO(dev)->gen >= 6) {
-
 
2107
       ring->add_request = gen6_add_request;
-
 
2108
		ring->flush = gen7_render_ring_flush;
-
 
2109
		if (INTEL_INFO(dev)->gen == 6)
-
 
2110
		ring->flush = gen6_render_ring_flush;
1858
		ring->irq_get = gen6_ring_get_irq;
2111
		ring->irq_get = gen6_ring_get_irq;
1859
		ring->irq_put = gen6_ring_put_irq;
2112
		ring->irq_put = gen6_ring_put_irq;
1860
		}
-
 
1861
		ring->irq_enable_mask = GT_RENDER_USER_INTERRUPT;
2113
		ring->irq_enable_mask = GT_RENDER_USER_INTERRUPT;
1862
		ring->get_seqno = gen6_ring_get_seqno;
2114
		ring->get_seqno = gen6_ring_get_seqno;
1863
		ring->set_seqno = ring_set_seqno;
2115
		ring->set_seqno = ring_set_seqno;
-
 
2116
		if (i915_semaphore_is_enabled(dev)) {
1864
		ring->sync_to = gen6_ring_sync;
2117
		ring->semaphore.sync_to = gen6_ring_sync;
-
 
2118
		ring->semaphore.signal = gen6_signal;
-
 
2119
		/*
-
 
2120
			 * The current semaphore is only applied on pre-gen8
-
 
2121
			 * platform.  And there is no VCS2 ring on the pre-gen8
-
 
2122
			 * platform. So the semaphore between RCS and VCS2 is
-
 
2123
			 * initialized as INVALID.  Gen8 will initialize the
-
 
2124
			 * sema between VCS2 and RCS later.
-
 
2125
		 */
1865
		ring->semaphore_register[RCS] = MI_SEMAPHORE_SYNC_INVALID;
2126
		ring->semaphore.mbox.wait[RCS] = MI_SEMAPHORE_SYNC_INVALID;
1866
		ring->semaphore_register[VCS] = MI_SEMAPHORE_SYNC_RV;
2127
		ring->semaphore.mbox.wait[VCS] = MI_SEMAPHORE_SYNC_RV;
1867
		ring->semaphore_register[BCS] = MI_SEMAPHORE_SYNC_RB;
2128
		ring->semaphore.mbox.wait[BCS] = MI_SEMAPHORE_SYNC_RB;
1868
		ring->semaphore_register[VECS] = MI_SEMAPHORE_SYNC_RVE;
2129
		ring->semaphore.mbox.wait[VECS] = MI_SEMAPHORE_SYNC_RVE;
-
 
2130
		ring->semaphore.mbox.wait[VCS2] = MI_SEMAPHORE_SYNC_INVALID;
1869
		ring->signal_mbox[RCS] = GEN6_NOSYNC;
2131
		ring->semaphore.mbox.signal[RCS] = GEN6_NOSYNC;
1870
		ring->signal_mbox[VCS] = GEN6_VRSYNC;
2132
		ring->semaphore.mbox.signal[VCS] = GEN6_VRSYNC;
1871
		ring->signal_mbox[BCS] = GEN6_BRSYNC;
2133
		ring->semaphore.mbox.signal[BCS] = GEN6_BRSYNC;
1872
		ring->signal_mbox[VECS] = GEN6_VERSYNC;
2134
		ring->semaphore.mbox.signal[VECS] = GEN6_VERSYNC;
-
 
2135
		ring->semaphore.mbox.signal[VCS2] = GEN6_NOSYNC;
-
 
2136
		}
1873
	} else if (IS_GEN5(dev)) {
2137
	} else if (IS_GEN5(dev)) {
1874
       ring->add_request = pc_render_add_request;
2138
       ring->add_request = pc_render_add_request;
1875
		ring->flush = gen4_render_ring_flush;
2139
		ring->flush = gen4_render_ring_flush;
1876
		ring->get_seqno = pc_render_get_seqno;
2140
		ring->get_seqno = pc_render_get_seqno;
1877
		ring->set_seqno = pc_render_set_seqno;
2141
		ring->set_seqno = pc_render_set_seqno;
1878
		ring->irq_get = gen5_ring_get_irq;
2142
		ring->irq_get = gen5_ring_get_irq;
1879
		ring->irq_put = gen5_ring_put_irq;
2143
		ring->irq_put = gen5_ring_put_irq;
1880
		ring->irq_enable_mask = GT_RENDER_USER_INTERRUPT |
2144
		ring->irq_enable_mask = GT_RENDER_USER_INTERRUPT |
1881
					GT_RENDER_PIPECTL_NOTIFY_INTERRUPT;
2145
					GT_RENDER_PIPECTL_NOTIFY_INTERRUPT;
1882
	} else {
2146
	} else {
1883
		ring->add_request = i9xx_add_request;
2147
		ring->add_request = i9xx_add_request;
1884
		if (INTEL_INFO(dev)->gen < 4)
2148
		if (INTEL_INFO(dev)->gen < 4)
1885
			ring->flush = gen2_render_ring_flush;
2149
			ring->flush = gen2_render_ring_flush;
1886
		else
2150
		else
1887
			ring->flush = gen4_render_ring_flush;
2151
			ring->flush = gen4_render_ring_flush;
1888
		ring->get_seqno = ring_get_seqno;
2152
		ring->get_seqno = ring_get_seqno;
1889
		ring->set_seqno = ring_set_seqno;
2153
		ring->set_seqno = ring_set_seqno;
1890
		if (IS_GEN2(dev)) {
2154
		if (IS_GEN2(dev)) {
1891
			ring->irq_get = i8xx_ring_get_irq;
2155
			ring->irq_get = i8xx_ring_get_irq;
1892
			ring->irq_put = i8xx_ring_put_irq;
2156
			ring->irq_put = i8xx_ring_put_irq;
1893
		} else {
2157
		} else {
1894
			ring->irq_get = i9xx_ring_get_irq;
2158
			ring->irq_get = i9xx_ring_get_irq;
1895
			ring->irq_put = i9xx_ring_put_irq;
2159
			ring->irq_put = i9xx_ring_put_irq;
1896
		}
2160
		}
1897
		ring->irq_enable_mask = I915_USER_INTERRUPT;
2161
		ring->irq_enable_mask = I915_USER_INTERRUPT;
1898
	}
2162
	}
1899
	ring->write_tail = ring_write_tail;
2163
	ring->write_tail = ring_write_tail;
-
 
2164
 
1900
	if (IS_HASWELL(dev))
2165
	if (IS_HASWELL(dev))
1901
		ring->dispatch_execbuffer = hsw_ring_dispatch_execbuffer;
2166
		ring->dispatch_execbuffer = hsw_ring_dispatch_execbuffer;
1902
	else if (IS_GEN8(dev))
2167
	else if (IS_GEN8(dev))
1903
		ring->dispatch_execbuffer = gen8_ring_dispatch_execbuffer;
2168
		ring->dispatch_execbuffer = gen8_ring_dispatch_execbuffer;
1904
	else if (INTEL_INFO(dev)->gen >= 6)
2169
	else if (INTEL_INFO(dev)->gen >= 6)
1905
		ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
2170
		ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
1906
	else if (INTEL_INFO(dev)->gen >= 4)
2171
	else if (INTEL_INFO(dev)->gen >= 4)
1907
		ring->dispatch_execbuffer = i965_dispatch_execbuffer;
2172
		ring->dispatch_execbuffer = i965_dispatch_execbuffer;
1908
	else if (IS_I830(dev) || IS_845G(dev))
2173
	else if (IS_I830(dev) || IS_845G(dev))
1909
		ring->dispatch_execbuffer = i830_dispatch_execbuffer;
2174
		ring->dispatch_execbuffer = i830_dispatch_execbuffer;
1910
	else
2175
	else
1911
		ring->dispatch_execbuffer = i915_dispatch_execbuffer;
2176
		ring->dispatch_execbuffer = i915_dispatch_execbuffer;
1912
	ring->init = init_render_ring;
2177
	ring->init = init_render_ring;
1913
	ring->cleanup = render_ring_cleanup;
2178
	ring->cleanup = render_ring_cleanup;
1914
 
2179
 
1915
	/* Workaround batchbuffer to combat CS tlb bug. */
2180
	/* Workaround batchbuffer to combat CS tlb bug. */
1916
	if (HAS_BROKEN_CS_TLB(dev)) {
2181
	if (HAS_BROKEN_CS_TLB(dev)) {
1917
		struct drm_i915_gem_object *obj;
-
 
1918
		int ret;
-
 
1919
 
-
 
1920
		obj = i915_gem_alloc_object(dev, I830_BATCH_LIMIT);
2182
		obj = i915_gem_alloc_object(dev, I830_BATCH_LIMIT);
1921
		if (obj == NULL) {
2183
		if (obj == NULL) {
1922
			DRM_ERROR("Failed to allocate batch bo\n");
2184
			DRM_ERROR("Failed to allocate batch bo\n");
1923
			return -ENOMEM;
2185
			return -ENOMEM;
1924
		}
2186
		}
1925
 
2187
 
1926
		ret = i915_gem_obj_ggtt_pin(obj, 0, true, false);
2188
		ret = i915_gem_obj_ggtt_pin(obj, 0, 0);
1927
		if (ret != 0) {
2189
		if (ret != 0) {
1928
			drm_gem_object_unreference(&obj->base);
2190
			drm_gem_object_unreference(&obj->base);
1929
			DRM_ERROR("Failed to ping batch bo\n");
2191
			DRM_ERROR("Failed to ping batch bo\n");
1930
			return ret;
2192
			return ret;
1931
		}
2193
		}
1932
 
2194
 
1933
		ring->scratch.obj = obj;
2195
		ring->scratch.obj = obj;
1934
		ring->scratch.gtt_offset = i915_gem_obj_ggtt_offset(obj);
2196
		ring->scratch.gtt_offset = i915_gem_obj_ggtt_offset(obj);
1935
	}
2197
	}
1936
 
2198
 
1937
	return intel_init_ring_buffer(dev, ring);
2199
	return intel_init_ring_buffer(dev, ring);
1938
}
2200
}
1939
 
2201
 
1940
#if 0
2202
#if 0
1941
int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
2203
int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size)
1942
{
2204
{
1943
	drm_i915_private_t *dev_priv = dev->dev_private;
2205
	struct drm_i915_private *dev_priv = dev->dev_private;
1944
	struct intel_ring_buffer *ring = &dev_priv->ring[RCS];
2206
	struct intel_engine_cs *ring = &dev_priv->ring[RCS];
-
 
2207
	struct intel_ringbuffer *ringbuf = ring->buffer;
1945
	int ret;
2208
	int ret;
-
 
2209
 
-
 
2210
	if (ringbuf == NULL) {
-
 
2211
		ringbuf = kzalloc(sizeof(*ringbuf), GFP_KERNEL);
-
 
2212
		if (!ringbuf)
-
 
2213
			return -ENOMEM;
-
 
2214
		ring->buffer = ringbuf;
-
 
2215
	}
1946
 
2216
 
1947
	ring->name = "render ring";
2217
	ring->name = "render ring";
1948
	ring->id = RCS;
2218
	ring->id = RCS;
1949
	ring->mmio_base = RENDER_RING_BASE;
2219
	ring->mmio_base = RENDER_RING_BASE;
1950
 
2220
 
1951
	if (INTEL_INFO(dev)->gen >= 6) {
2221
	if (INTEL_INFO(dev)->gen >= 6) {
1952
		/* non-kms not supported on gen6+ */
2222
		/* non-kms not supported on gen6+ */
1953
		return -ENODEV;
2223
		ret = -ENODEV;
-
 
2224
		goto err_ringbuf;
1954
	}
2225
	}
1955
 
2226
 
1956
	/* Note: gem is not supported on gen5/ilk without kms (the corresponding
2227
	/* Note: gem is not supported on gen5/ilk without kms (the corresponding
1957
	 * gem_init ioctl returns with -ENODEV). Hence we do not need to set up
2228
	 * gem_init ioctl returns with -ENODEV). Hence we do not need to set up
1958
	 * the special gen5 functions. */
2229
	 * the special gen5 functions. */
1959
	ring->add_request = i9xx_add_request;
2230
	ring->add_request = i9xx_add_request;
1960
	if (INTEL_INFO(dev)->gen < 4)
2231
	if (INTEL_INFO(dev)->gen < 4)
1961
		ring->flush = gen2_render_ring_flush;
2232
		ring->flush = gen2_render_ring_flush;
1962
	else
2233
	else
1963
		ring->flush = gen4_render_ring_flush;
2234
		ring->flush = gen4_render_ring_flush;
1964
	ring->get_seqno = ring_get_seqno;
2235
	ring->get_seqno = ring_get_seqno;
1965
	ring->set_seqno = ring_set_seqno;
2236
	ring->set_seqno = ring_set_seqno;
1966
	if (IS_GEN2(dev)) {
2237
	if (IS_GEN2(dev)) {
1967
		ring->irq_get = i8xx_ring_get_irq;
2238
		ring->irq_get = i8xx_ring_get_irq;
1968
		ring->irq_put = i8xx_ring_put_irq;
2239
		ring->irq_put = i8xx_ring_put_irq;
1969
	} else {
2240
	} else {
1970
		ring->irq_get = i9xx_ring_get_irq;
2241
		ring->irq_get = i9xx_ring_get_irq;
1971
		ring->irq_put = i9xx_ring_put_irq;
2242
		ring->irq_put = i9xx_ring_put_irq;
1972
	}
2243
	}
1973
	ring->irq_enable_mask = I915_USER_INTERRUPT;
2244
	ring->irq_enable_mask = I915_USER_INTERRUPT;
1974
	ring->write_tail = ring_write_tail;
2245
	ring->write_tail = ring_write_tail;
1975
	if (INTEL_INFO(dev)->gen >= 4)
2246
	if (INTEL_INFO(dev)->gen >= 4)
1976
		ring->dispatch_execbuffer = i965_dispatch_execbuffer;
2247
		ring->dispatch_execbuffer = i965_dispatch_execbuffer;
1977
	else if (IS_I830(dev) || IS_845G(dev))
2248
	else if (IS_I830(dev) || IS_845G(dev))
1978
		ring->dispatch_execbuffer = i830_dispatch_execbuffer;
2249
		ring->dispatch_execbuffer = i830_dispatch_execbuffer;
1979
	else
2250
	else
1980
		ring->dispatch_execbuffer = i915_dispatch_execbuffer;
2251
		ring->dispatch_execbuffer = i915_dispatch_execbuffer;
1981
	ring->init = init_render_ring;
2252
	ring->init = init_render_ring;
1982
	ring->cleanup = render_ring_cleanup;
2253
	ring->cleanup = render_ring_cleanup;
1983
 
2254
 
1984
	ring->dev = dev;
2255
	ring->dev = dev;
1985
	INIT_LIST_HEAD(&ring->active_list);
2256
	INIT_LIST_HEAD(&ring->active_list);
1986
	INIT_LIST_HEAD(&ring->request_list);
2257
	INIT_LIST_HEAD(&ring->request_list);
1987
 
2258
 
1988
	ring->size = size;
2259
	ringbuf->size = size;
1989
	ring->effective_size = ring->size;
2260
	ringbuf->effective_size = ringbuf->size;
1990
	if (IS_I830(ring->dev) || IS_845G(ring->dev))
2261
	if (IS_I830(ring->dev) || IS_845G(ring->dev))
1991
		ring->effective_size -= 128;
2262
		ringbuf->effective_size -= 2 * CACHELINE_BYTES;
1992
 
2263
 
1993
	ring->virtual_start = ioremap_wc(start, size);
2264
	ringbuf->virtual_start = ioremap_wc(start, size);
1994
	if (ring->virtual_start == NULL) {
2265
	if (ringbuf->virtual_start == NULL) {
1995
		DRM_ERROR("can not ioremap virtual address for"
2266
		DRM_ERROR("can not ioremap virtual address for"
-
 
2267
			  " ring buffer\n");
1996
			  " ring buffer\n");
2268
		ret = -ENOMEM;
1997
		return -ENOMEM;
2269
		goto err_ringbuf;
1998
	}
2270
	}
1999
 
2271
 
2000
	if (!I915_NEED_GFX_HWS(dev)) {
2272
	if (!I915_NEED_GFX_HWS(dev)) {
2001
		ret = init_phys_status_page(ring);
2273
		ret = init_phys_status_page(ring);
2002
		if (ret)
2274
		if (ret)
2003
			return ret;
2275
			goto err_vstart;
2004
	}
2276
	}
2005
 
2277
 
2006
	return 0;
2278
	return 0;
-
 
2279
 
-
 
2280
err_vstart:
-
 
2281
	iounmap(ringbuf->virtual_start);
-
 
2282
err_ringbuf:
-
 
2283
	kfree(ringbuf);
-
 
2284
	ring->buffer = NULL;
-
 
2285
	return ret;
2007
}
2286
}
2008
#endif
2287
#endif
2009
 
2288
 
2010
int intel_init_bsd_ring_buffer(struct drm_device *dev)
2289
int intel_init_bsd_ring_buffer(struct drm_device *dev)
2011
{
2290
{
2012
	drm_i915_private_t *dev_priv = dev->dev_private;
2291
	struct drm_i915_private *dev_priv = dev->dev_private;
2013
	struct intel_ring_buffer *ring = &dev_priv->ring[VCS];
2292
	struct intel_engine_cs *ring = &dev_priv->ring[VCS];
2014
 
2293
 
2015
	ring->name = "bsd ring";
2294
	ring->name = "bsd ring";
2016
	ring->id = VCS;
2295
	ring->id = VCS;
2017
 
2296
 
2018
	ring->write_tail = ring_write_tail;
2297
	ring->write_tail = ring_write_tail;
2019
	if (INTEL_INFO(dev)->gen >= 6) {
2298
	if (INTEL_INFO(dev)->gen >= 6) {
2020
		ring->mmio_base = GEN6_BSD_RING_BASE;
2299
		ring->mmio_base = GEN6_BSD_RING_BASE;
2021
		/* gen6 bsd needs a special wa for tail updates */
2300
		/* gen6 bsd needs a special wa for tail updates */
2022
		if (IS_GEN6(dev))
2301
		if (IS_GEN6(dev))
2023
			ring->write_tail = gen6_bsd_ring_write_tail;
2302
			ring->write_tail = gen6_bsd_ring_write_tail;
2024
		ring->flush = gen6_bsd_ring_flush;
2303
		ring->flush = gen6_bsd_ring_flush;
2025
		ring->add_request = gen6_add_request;
2304
		ring->add_request = gen6_add_request;
2026
		ring->get_seqno = gen6_ring_get_seqno;
2305
		ring->get_seqno = gen6_ring_get_seqno;
2027
		ring->set_seqno = ring_set_seqno;
2306
		ring->set_seqno = ring_set_seqno;
2028
		if (INTEL_INFO(dev)->gen >= 8) {
2307
		if (INTEL_INFO(dev)->gen >= 8) {
2029
			ring->irq_enable_mask =
2308
			ring->irq_enable_mask =
2030
				GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT;
2309
				GT_RENDER_USER_INTERRUPT << GEN8_VCS1_IRQ_SHIFT;
2031
			ring->irq_get = gen8_ring_get_irq;
2310
			ring->irq_get = gen8_ring_get_irq;
2032
			ring->irq_put = gen8_ring_put_irq;
2311
			ring->irq_put = gen8_ring_put_irq;
2033
			ring->dispatch_execbuffer =
2312
			ring->dispatch_execbuffer =
2034
				gen8_ring_dispatch_execbuffer;
2313
				gen8_ring_dispatch_execbuffer;
-
 
2314
			if (i915_semaphore_is_enabled(dev)) {
-
 
2315
				ring->semaphore.sync_to = gen8_ring_sync;
-
 
2316
				ring->semaphore.signal = gen8_xcs_signal;
-
 
2317
				GEN8_RING_SEMAPHORE_INIT;
-
 
2318
			}
2035
		} else {
2319
		} else {
2036
		ring->irq_enable_mask = GT_BSD_USER_INTERRUPT;
2320
		ring->irq_enable_mask = GT_BSD_USER_INTERRUPT;
2037
		ring->irq_get = gen6_ring_get_irq;
2321
		ring->irq_get = gen6_ring_get_irq;
2038
		ring->irq_put = gen6_ring_put_irq;
2322
		ring->irq_put = gen6_ring_put_irq;
2039
			ring->dispatch_execbuffer =
2323
			ring->dispatch_execbuffer =
2040
				gen6_ring_dispatch_execbuffer;
2324
				gen6_ring_dispatch_execbuffer;
-
 
2325
			if (i915_semaphore_is_enabled(dev)) {
-
 
2326
		ring->semaphore.sync_to = gen6_ring_sync;
-
 
2327
		ring->semaphore.signal = gen6_signal;
-
 
2328
		ring->semaphore.mbox.wait[RCS] = MI_SEMAPHORE_SYNC_VR;
-
 
2329
		ring->semaphore.mbox.wait[VCS] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2330
		ring->semaphore.mbox.wait[BCS] = MI_SEMAPHORE_SYNC_VB;
-
 
2331
		ring->semaphore.mbox.wait[VECS] = MI_SEMAPHORE_SYNC_VVE;
-
 
2332
		ring->semaphore.mbox.wait[VCS2] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2333
		ring->semaphore.mbox.signal[RCS] = GEN6_RVSYNC;
-
 
2334
		ring->semaphore.mbox.signal[VCS] = GEN6_NOSYNC;
-
 
2335
		ring->semaphore.mbox.signal[BCS] = GEN6_BVSYNC;
-
 
2336
		ring->semaphore.mbox.signal[VECS] = GEN6_VEVSYNC;
-
 
2337
		ring->semaphore.mbox.signal[VCS2] = GEN6_NOSYNC;
-
 
2338
			}
2041
		}
2339
		}
2042
		ring->sync_to = gen6_ring_sync;
-
 
2043
		ring->semaphore_register[RCS] = MI_SEMAPHORE_SYNC_VR;
-
 
2044
		ring->semaphore_register[VCS] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2045
		ring->semaphore_register[BCS] = MI_SEMAPHORE_SYNC_VB;
-
 
2046
		ring->semaphore_register[VECS] = MI_SEMAPHORE_SYNC_VVE;
-
 
2047
		ring->signal_mbox[RCS] = GEN6_RVSYNC;
-
 
2048
		ring->signal_mbox[VCS] = GEN6_NOSYNC;
-
 
2049
		ring->signal_mbox[BCS] = GEN6_BVSYNC;
-
 
2050
		ring->signal_mbox[VECS] = GEN6_VEVSYNC;
-
 
2051
	} else {
2340
	} else {
2052
		ring->mmio_base = BSD_RING_BASE;
2341
		ring->mmio_base = BSD_RING_BASE;
2053
		ring->flush = bsd_ring_flush;
2342
		ring->flush = bsd_ring_flush;
2054
		ring->add_request = i9xx_add_request;
2343
		ring->add_request = i9xx_add_request;
2055
		ring->get_seqno = ring_get_seqno;
2344
		ring->get_seqno = ring_get_seqno;
2056
		ring->set_seqno = ring_set_seqno;
2345
		ring->set_seqno = ring_set_seqno;
2057
		if (IS_GEN5(dev)) {
2346
		if (IS_GEN5(dev)) {
2058
			ring->irq_enable_mask = ILK_BSD_USER_INTERRUPT;
2347
			ring->irq_enable_mask = ILK_BSD_USER_INTERRUPT;
2059
			ring->irq_get = gen5_ring_get_irq;
2348
			ring->irq_get = gen5_ring_get_irq;
2060
			ring->irq_put = gen5_ring_put_irq;
2349
			ring->irq_put = gen5_ring_put_irq;
2061
		} else {
2350
		} else {
2062
			ring->irq_enable_mask = I915_BSD_USER_INTERRUPT;
2351
			ring->irq_enable_mask = I915_BSD_USER_INTERRUPT;
2063
			ring->irq_get = i9xx_ring_get_irq;
2352
			ring->irq_get = i9xx_ring_get_irq;
2064
			ring->irq_put = i9xx_ring_put_irq;
2353
			ring->irq_put = i9xx_ring_put_irq;
2065
		}
2354
		}
2066
		ring->dispatch_execbuffer = i965_dispatch_execbuffer;
2355
		ring->dispatch_execbuffer = i965_dispatch_execbuffer;
2067
	}
2356
	}
2068
	ring->init = init_ring_common;
2357
	ring->init = init_ring_common;
2069
 
2358
 
2070
	return intel_init_ring_buffer(dev, ring);
2359
	return intel_init_ring_buffer(dev, ring);
2071
}
2360
}
-
 
2361
 
-
 
2362
/**
-
 
2363
 * Initialize the second BSD ring for Broadwell GT3.
-
 
2364
 * It is noted that this only exists on Broadwell GT3.
-
 
2365
 */
-
 
2366
int intel_init_bsd2_ring_buffer(struct drm_device *dev)
-
 
2367
{
-
 
2368
	struct drm_i915_private *dev_priv = dev->dev_private;
-
 
2369
	struct intel_engine_cs *ring = &dev_priv->ring[VCS2];
-
 
2370
 
-
 
2371
	if ((INTEL_INFO(dev)->gen != 8)) {
-
 
2372
		DRM_ERROR("No dual-BSD ring on non-BDW machine\n");
-
 
2373
		return -EINVAL;
-
 
2374
	}
-
 
2375
 
-
 
2376
	ring->name = "bsd2 ring";
-
 
2377
	ring->id = VCS2;
-
 
2378
 
-
 
2379
	ring->write_tail = ring_write_tail;
-
 
2380
	ring->mmio_base = GEN8_BSD2_RING_BASE;
-
 
2381
	ring->flush = gen6_bsd_ring_flush;
-
 
2382
	ring->add_request = gen6_add_request;
-
 
2383
	ring->get_seqno = gen6_ring_get_seqno;
-
 
2384
	ring->set_seqno = ring_set_seqno;
-
 
2385
	ring->irq_enable_mask =
-
 
2386
			GT_RENDER_USER_INTERRUPT << GEN8_VCS2_IRQ_SHIFT;
-
 
2387
	ring->irq_get = gen8_ring_get_irq;
-
 
2388
	ring->irq_put = gen8_ring_put_irq;
-
 
2389
	ring->dispatch_execbuffer =
-
 
2390
			gen8_ring_dispatch_execbuffer;
-
 
2391
	if (i915_semaphore_is_enabled(dev)) {
-
 
2392
		ring->semaphore.sync_to = gen8_ring_sync;
-
 
2393
		ring->semaphore.signal = gen8_xcs_signal;
-
 
2394
		GEN8_RING_SEMAPHORE_INIT;
-
 
2395
	}
-
 
2396
	ring->init = init_ring_common;
-
 
2397
 
-
 
2398
	return intel_init_ring_buffer(dev, ring);
-
 
2399
}
2072
 
2400
 
2073
int intel_init_blt_ring_buffer(struct drm_device *dev)
2401
int intel_init_blt_ring_buffer(struct drm_device *dev)
2074
{
2402
{
2075
	drm_i915_private_t *dev_priv = dev->dev_private;
2403
	struct drm_i915_private *dev_priv = dev->dev_private;
2076
	struct intel_ring_buffer *ring = &dev_priv->ring[BCS];
2404
	struct intel_engine_cs *ring = &dev_priv->ring[BCS];
2077
 
2405
 
2078
	ring->name = "blitter ring";
2406
	ring->name = "blitter ring";
2079
	ring->id = BCS;
2407
	ring->id = BCS;
2080
 
2408
 
2081
	ring->mmio_base = BLT_RING_BASE;
2409
	ring->mmio_base = BLT_RING_BASE;
2082
	ring->write_tail = ring_write_tail;
2410
	ring->write_tail = ring_write_tail;
2083
	ring->flush = gen6_ring_flush;
2411
	ring->flush = gen6_ring_flush;
2084
	ring->add_request = gen6_add_request;
2412
	ring->add_request = gen6_add_request;
2085
	ring->get_seqno = gen6_ring_get_seqno;
2413
	ring->get_seqno = gen6_ring_get_seqno;
2086
	ring->set_seqno = ring_set_seqno;
2414
	ring->set_seqno = ring_set_seqno;
2087
	if (INTEL_INFO(dev)->gen >= 8) {
2415
	if (INTEL_INFO(dev)->gen >= 8) {
2088
		ring->irq_enable_mask =
2416
		ring->irq_enable_mask =
2089
			GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT;
2417
			GT_RENDER_USER_INTERRUPT << GEN8_BCS_IRQ_SHIFT;
2090
		ring->irq_get = gen8_ring_get_irq;
2418
		ring->irq_get = gen8_ring_get_irq;
2091
		ring->irq_put = gen8_ring_put_irq;
2419
		ring->irq_put = gen8_ring_put_irq;
2092
		ring->dispatch_execbuffer = gen8_ring_dispatch_execbuffer;
2420
		ring->dispatch_execbuffer = gen8_ring_dispatch_execbuffer;
-
 
2421
		if (i915_semaphore_is_enabled(dev)) {
-
 
2422
			ring->semaphore.sync_to = gen8_ring_sync;
-
 
2423
			ring->semaphore.signal = gen8_xcs_signal;
-
 
2424
			GEN8_RING_SEMAPHORE_INIT;
-
 
2425
		}
2093
	} else {
2426
	} else {
2094
	ring->irq_enable_mask = GT_BLT_USER_INTERRUPT;
2427
	ring->irq_enable_mask = GT_BLT_USER_INTERRUPT;
2095
	ring->irq_get = gen6_ring_get_irq;
2428
	ring->irq_get = gen6_ring_get_irq;
2096
	ring->irq_put = gen6_ring_put_irq;
2429
	ring->irq_put = gen6_ring_put_irq;
2097
	ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
2430
	ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
-
 
2431
		if (i915_semaphore_is_enabled(dev)) {
-
 
2432
			ring->semaphore.signal = gen6_signal;
-
 
2433
	ring->semaphore.sync_to = gen6_ring_sync;
-
 
2434
	/*
-
 
2435
			 * The current semaphore is only applied on pre-gen8
-
 
2436
			 * platform.  And there is no VCS2 ring on the pre-gen8
-
 
2437
			 * platform. So the semaphore between BCS and VCS2 is
-
 
2438
			 * initialized as INVALID.  Gen8 will initialize the
-
 
2439
			 * sema between BCS and VCS2 later.
-
 
2440
	 */
-
 
2441
	ring->semaphore.mbox.wait[RCS] = MI_SEMAPHORE_SYNC_BR;
-
 
2442
	ring->semaphore.mbox.wait[VCS] = MI_SEMAPHORE_SYNC_BV;
-
 
2443
	ring->semaphore.mbox.wait[BCS] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2444
	ring->semaphore.mbox.wait[VECS] = MI_SEMAPHORE_SYNC_BVE;
-
 
2445
	ring->semaphore.mbox.wait[VCS2] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2446
	ring->semaphore.mbox.signal[RCS] = GEN6_RBSYNC;
-
 
2447
	ring->semaphore.mbox.signal[VCS] = GEN6_VBSYNC;
-
 
2448
	ring->semaphore.mbox.signal[BCS] = GEN6_NOSYNC;
-
 
2449
	ring->semaphore.mbox.signal[VECS] = GEN6_VEBSYNC;
-
 
2450
	ring->semaphore.mbox.signal[VCS2] = GEN6_NOSYNC;
-
 
2451
		}
2098
	}
2452
	}
2099
	ring->sync_to = gen6_ring_sync;
-
 
2100
	ring->semaphore_register[RCS] = MI_SEMAPHORE_SYNC_BR;
-
 
2101
	ring->semaphore_register[VCS] = MI_SEMAPHORE_SYNC_BV;
-
 
2102
	ring->semaphore_register[BCS] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2103
	ring->semaphore_register[VECS] = MI_SEMAPHORE_SYNC_BVE;
-
 
2104
	ring->signal_mbox[RCS] = GEN6_RBSYNC;
-
 
2105
	ring->signal_mbox[VCS] = GEN6_VBSYNC;
-
 
2106
	ring->signal_mbox[BCS] = GEN6_NOSYNC;
-
 
2107
	ring->signal_mbox[VECS] = GEN6_VEBSYNC;
-
 
2108
	ring->init = init_ring_common;
2453
	ring->init = init_ring_common;
2109
 
2454
 
2110
	return intel_init_ring_buffer(dev, ring);
2455
	return intel_init_ring_buffer(dev, ring);
2111
}
2456
}
2112
 
2457
 
2113
int intel_init_vebox_ring_buffer(struct drm_device *dev)
2458
int intel_init_vebox_ring_buffer(struct drm_device *dev)
2114
{
2459
{
2115
	drm_i915_private_t *dev_priv = dev->dev_private;
2460
	struct drm_i915_private *dev_priv = dev->dev_private;
2116
	struct intel_ring_buffer *ring = &dev_priv->ring[VECS];
2461
	struct intel_engine_cs *ring = &dev_priv->ring[VECS];
2117
 
2462
 
2118
	ring->name = "video enhancement ring";
2463
	ring->name = "video enhancement ring";
2119
	ring->id = VECS;
2464
	ring->id = VECS;
2120
 
2465
 
2121
	ring->mmio_base = VEBOX_RING_BASE;
2466
	ring->mmio_base = VEBOX_RING_BASE;
2122
	ring->write_tail = ring_write_tail;
2467
	ring->write_tail = ring_write_tail;
2123
	ring->flush = gen6_ring_flush;
2468
	ring->flush = gen6_ring_flush;
2124
	ring->add_request = gen6_add_request;
2469
	ring->add_request = gen6_add_request;
2125
	ring->get_seqno = gen6_ring_get_seqno;
2470
	ring->get_seqno = gen6_ring_get_seqno;
2126
	ring->set_seqno = ring_set_seqno;
2471
	ring->set_seqno = ring_set_seqno;
2127
 
2472
 
2128
	if (INTEL_INFO(dev)->gen >= 8) {
2473
	if (INTEL_INFO(dev)->gen >= 8) {
2129
		ring->irq_enable_mask =
2474
		ring->irq_enable_mask =
2130
			GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT;
2475
			GT_RENDER_USER_INTERRUPT << GEN8_VECS_IRQ_SHIFT;
2131
		ring->irq_get = gen8_ring_get_irq;
2476
		ring->irq_get = gen8_ring_get_irq;
2132
		ring->irq_put = gen8_ring_put_irq;
2477
		ring->irq_put = gen8_ring_put_irq;
2133
		ring->dispatch_execbuffer = gen8_ring_dispatch_execbuffer;
2478
		ring->dispatch_execbuffer = gen8_ring_dispatch_execbuffer;
-
 
2479
		if (i915_semaphore_is_enabled(dev)) {
-
 
2480
			ring->semaphore.sync_to = gen8_ring_sync;
-
 
2481
			ring->semaphore.signal = gen8_xcs_signal;
-
 
2482
			GEN8_RING_SEMAPHORE_INIT;
-
 
2483
		}
2134
	} else {
2484
	} else {
2135
	ring->irq_enable_mask = PM_VEBOX_USER_INTERRUPT;
2485
	ring->irq_enable_mask = PM_VEBOX_USER_INTERRUPT;
2136
	ring->irq_get = hsw_vebox_get_irq;
2486
	ring->irq_get = hsw_vebox_get_irq;
2137
	ring->irq_put = hsw_vebox_put_irq;
2487
	ring->irq_put = hsw_vebox_put_irq;
2138
	ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
2488
	ring->dispatch_execbuffer = gen6_ring_dispatch_execbuffer;
-
 
2489
		if (i915_semaphore_is_enabled(dev)) {
-
 
2490
	ring->semaphore.sync_to = gen6_ring_sync;
-
 
2491
	ring->semaphore.signal = gen6_signal;
-
 
2492
	ring->semaphore.mbox.wait[RCS] = MI_SEMAPHORE_SYNC_VER;
-
 
2493
	ring->semaphore.mbox.wait[VCS] = MI_SEMAPHORE_SYNC_VEV;
-
 
2494
	ring->semaphore.mbox.wait[BCS] = MI_SEMAPHORE_SYNC_VEB;
-
 
2495
	ring->semaphore.mbox.wait[VECS] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2496
	ring->semaphore.mbox.wait[VCS2] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2497
	ring->semaphore.mbox.signal[RCS] = GEN6_RVESYNC;
-
 
2498
	ring->semaphore.mbox.signal[VCS] = GEN6_VVESYNC;
-
 
2499
	ring->semaphore.mbox.signal[BCS] = GEN6_BVESYNC;
-
 
2500
	ring->semaphore.mbox.signal[VECS] = GEN6_NOSYNC;
-
 
2501
	ring->semaphore.mbox.signal[VCS2] = GEN6_NOSYNC;
-
 
2502
		}
2139
	}
2503
	}
2140
	ring->sync_to = gen6_ring_sync;
-
 
2141
	ring->semaphore_register[RCS] = MI_SEMAPHORE_SYNC_VER;
-
 
2142
	ring->semaphore_register[VCS] = MI_SEMAPHORE_SYNC_VEV;
-
 
2143
	ring->semaphore_register[BCS] = MI_SEMAPHORE_SYNC_VEB;
-
 
2144
	ring->semaphore_register[VECS] = MI_SEMAPHORE_SYNC_INVALID;
-
 
2145
	ring->signal_mbox[RCS] = GEN6_RVESYNC;
-
 
2146
	ring->signal_mbox[VCS] = GEN6_VVESYNC;
-
 
2147
	ring->signal_mbox[BCS] = GEN6_BVESYNC;
-
 
2148
	ring->signal_mbox[VECS] = GEN6_NOSYNC;
-
 
2149
	ring->init = init_ring_common;
2504
	ring->init = init_ring_common;
2150
 
2505
 
2151
	return intel_init_ring_buffer(dev, ring);
2506
	return intel_init_ring_buffer(dev, ring);
2152
}
2507
}
2153
 
2508
 
2154
int
2509
int
2155
intel_ring_flush_all_caches(struct intel_ring_buffer *ring)
2510
intel_ring_flush_all_caches(struct intel_engine_cs *ring)
2156
{
2511
{
2157
	int ret;
2512
	int ret;
2158
 
2513
 
2159
	if (!ring->gpu_caches_dirty)
2514
	if (!ring->gpu_caches_dirty)
2160
		return 0;
2515
		return 0;
2161
 
2516
 
2162
	ret = ring->flush(ring, 0, I915_GEM_GPU_DOMAINS);
2517
	ret = ring->flush(ring, 0, I915_GEM_GPU_DOMAINS);
2163
	if (ret)
2518
	if (ret)
2164
		return ret;
2519
		return ret;
2165
 
2520
 
2166
	trace_i915_gem_ring_flush(ring, 0, I915_GEM_GPU_DOMAINS);
2521
	trace_i915_gem_ring_flush(ring, 0, I915_GEM_GPU_DOMAINS);
2167
 
2522
 
2168
	ring->gpu_caches_dirty = false;
2523
	ring->gpu_caches_dirty = false;
2169
	return 0;
2524
	return 0;
2170
}
2525
}
2171
 
2526
 
2172
int
2527
int
2173
intel_ring_invalidate_all_caches(struct intel_ring_buffer *ring)
2528
intel_ring_invalidate_all_caches(struct intel_engine_cs *ring)
2174
{
2529
{
2175
	uint32_t flush_domains;
2530
	uint32_t flush_domains;
2176
	int ret;
2531
	int ret;
2177
 
2532
 
2178
	flush_domains = 0;
2533
	flush_domains = 0;
2179
	if (ring->gpu_caches_dirty)
2534
	if (ring->gpu_caches_dirty)
2180
		flush_domains = I915_GEM_GPU_DOMAINS;
2535
		flush_domains = I915_GEM_GPU_DOMAINS;
2181
 
2536
 
2182
	ret = ring->flush(ring, I915_GEM_GPU_DOMAINS, flush_domains);
2537
	ret = ring->flush(ring, I915_GEM_GPU_DOMAINS, flush_domains);
2183
	if (ret)
2538
	if (ret)
2184
		return ret;
2539
		return ret;
2185
 
2540
 
2186
	trace_i915_gem_ring_flush(ring, I915_GEM_GPU_DOMAINS, flush_domains);
2541
	trace_i915_gem_ring_flush(ring, I915_GEM_GPU_DOMAINS, flush_domains);
2187
 
2542
 
2188
	ring->gpu_caches_dirty = false;
2543
	ring->gpu_caches_dirty = false;
2189
	return 0;
2544
	return 0;
2190
}
2545
}
-
 
2546
 
-
 
2547
void
-
 
2548
intel_stop_ring_buffer(struct intel_engine_cs *ring)
-
 
2549
{
-
 
2550
	int ret;
-
 
2551
 
-
 
2552
	if (!intel_ring_initialized(ring))
-
 
2553
		return;
-
 
2554
 
-
 
2555
	ret = intel_ring_idle(ring);
-
 
2556
	if (ret && !i915_reset_in_progress(&to_i915(ring->dev)->gpu_error))
-
 
2557
		DRM_ERROR("failed to quiesce %s whilst cleaning up: %d\n",
-
 
2558
			  ring->name, ret);
-
 
2559
 
-
 
2560
	stop_ring(ring);
-
 
2561
}
2191
>
2562
>
2192
>
2563
>