@@ -244,22 +244,26 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
244
244
{
245
245
struct intel_guc * guc = ct_to_guc (ct );
246
246
u32 base , cmds ;
247
+ void * blob ;
247
248
int err ;
248
249
int i ;
249
250
250
251
GEM_BUG_ON (ct -> enabled );
251
252
252
253
/* vma should be already allocated and map'ed */
253
254
GEM_BUG_ON (!ct -> vma );
255
+ GEM_BUG_ON (!i915_gem_object_has_pinned_pages (ct -> vma -> obj ));
254
256
base = intel_guc_ggtt_offset (guc , ct -> vma );
255
257
256
- /* (re)initialize descriptors
257
- * cmds buffers are in the second half of the blob page
258
- */
258
+ /* blob should start with send descriptor */
259
+ blob = __px_vaddr (ct -> vma -> obj );
260
+ GEM_BUG_ON (blob != ct -> ctbs [CTB_SEND ].desc );
261
+
262
+ /* (re)initialize descriptors */
259
263
for (i = 0 ; i < ARRAY_SIZE (ct -> ctbs ); i ++ ) {
260
264
GEM_BUG_ON ((i != CTB_SEND ) && (i != CTB_RECV ));
261
265
262
- cmds = base + PAGE_SIZE / 4 * i + PAGE_SIZE / 2 ;
266
+ cmds = base + ptrdiff ( ct -> ctbs [ i ]. cmds , blob ) ;
263
267
CT_DEBUG (ct , "%d: cmds addr=%#x\n" , i , cmds );
264
268
265
269
guc_ct_buffer_reset (& ct -> ctbs [i ], cmds );
@@ -269,12 +273,12 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
269
273
* Register both CT buffers starting with RECV buffer.
270
274
* Descriptors are in first half of the blob.
271
275
*/
272
- err = ct_register_buffer (ct , base + PAGE_SIZE / 4 * CTB_RECV ,
276
+ err = ct_register_buffer (ct , base + ptrdiff ( ct -> ctbs [ CTB_RECV ]. desc , blob ) ,
273
277
INTEL_GUC_CT_BUFFER_TYPE_RECV );
274
278
if (unlikely (err ))
275
279
goto err_out ;
276
280
277
- err = ct_register_buffer (ct , base + PAGE_SIZE / 4 * CTB_SEND ,
281
+ err = ct_register_buffer (ct , base + ptrdiff ( ct -> ctbs [ CTB_SEND ]. desc , blob ) ,
278
282
INTEL_GUC_CT_BUFFER_TYPE_SEND );
279
283
if (unlikely (err ))
280
284
goto err_deregister ;
0 commit comments