@@ -90,6 +90,24 @@ static void guc_ct_buffer_desc_init(struct guc_ct_buffer_desc *desc,
90
90
desc -> owner = CTB_OWNER_HOST ;
91
91
}
92
92
93
+ static void guc_ct_buffer_reset (struct intel_guc_ct_buffer * ctb , u32 cmds_addr )
94
+ {
95
+ guc_ct_buffer_desc_init (ctb -> desc , cmds_addr , ctb -> size );
96
+ }
97
+
98
+ static void guc_ct_buffer_init (struct intel_guc_ct_buffer * ctb ,
99
+ struct guc_ct_buffer_desc * desc ,
100
+ u32 * cmds , u32 size )
101
+ {
102
+ GEM_BUG_ON (size % 4 );
103
+
104
+ ctb -> desc = desc ;
105
+ ctb -> cmds = cmds ;
106
+ ctb -> size = size ;
107
+
108
+ guc_ct_buffer_reset (ctb , 0 );
109
+ }
110
+
93
111
static int guc_action_register_ct_buffer (struct intel_guc * guc ,
94
112
u32 desc_addr ,
95
113
u32 type )
@@ -148,7 +166,10 @@ static int ct_deregister_buffer(struct intel_guc_ct *ct, u32 type)
148
166
int intel_guc_ct_init (struct intel_guc_ct * ct )
149
167
{
150
168
struct intel_guc * guc = ct_to_guc (ct );
169
+ struct guc_ct_buffer_desc * desc ;
170
+ u32 blob_size ;
151
171
void * blob ;
172
+ u32 * cmds ;
152
173
int err ;
153
174
int i ;
154
175
@@ -176,19 +197,24 @@ int intel_guc_ct_init(struct intel_guc_ct *ct)
176
197
* other code will need updating as well.
177
198
*/
178
199
179
- err = intel_guc_allocate_and_map_vma (guc , PAGE_SIZE , & ct -> vma , & blob );
200
+ blob_size = PAGE_SIZE ;
201
+ err = intel_guc_allocate_and_map_vma (guc , blob_size , & ct -> vma , & blob );
180
202
if (unlikely (err )) {
181
- CT_ERROR (ct , "Failed to allocate CT channel (err=%d)\n" , err );
203
+ CT_PROBE_ERROR (ct , "Failed to allocate %u for CTB data (%pe)\n" ,
204
+ blob_size , ERR_PTR (err ));
182
205
return err ;
183
206
}
184
207
185
- CT_DEBUG (ct , "vma base=%#x\n" , intel_guc_ggtt_offset (guc , ct -> vma ));
208
+ CT_DEBUG (ct , "base=%#x size=%u \n" , intel_guc_ggtt_offset (guc , ct -> vma ), blob_size );
186
209
187
210
/* store pointers to desc and cmds */
188
211
for (i = 0 ; i < ARRAY_SIZE (ct -> ctbs ); i ++ ) {
189
212
GEM_BUG_ON ((i != CTB_SEND ) && (i != CTB_RECV ));
190
- ct -> ctbs [i ].desc = blob + PAGE_SIZE /4 * i ;
191
- ct -> ctbs [i ].cmds = blob + PAGE_SIZE /4 * i + PAGE_SIZE /2 ;
213
+
214
+ desc = blob + PAGE_SIZE / 4 * i ;
215
+ cmds = blob + PAGE_SIZE / 4 * i + PAGE_SIZE / 2 ;
216
+
217
+ guc_ct_buffer_init (& ct -> ctbs [i ], desc , cmds , PAGE_SIZE / 4 );
192
218
}
193
219
194
220
return 0 ;
@@ -217,7 +243,7 @@ void intel_guc_ct_fini(struct intel_guc_ct *ct)
217
243
int intel_guc_ct_enable (struct intel_guc_ct * ct )
218
244
{
219
245
struct intel_guc * guc = ct_to_guc (ct );
220
- u32 base , cmds , size ;
246
+ u32 base , cmds ;
221
247
int err ;
222
248
int i ;
223
249
@@ -232,10 +258,11 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
232
258
*/
233
259
for (i = 0 ; i < ARRAY_SIZE (ct -> ctbs ); i ++ ) {
234
260
GEM_BUG_ON ((i != CTB_SEND ) && (i != CTB_RECV ));
261
+
235
262
cmds = base + PAGE_SIZE / 4 * i + PAGE_SIZE / 2 ;
236
- size = PAGE_SIZE / 4 ;
237
- CT_DEBUG ( ct , "%d: addr=%#x size=%u\n" , i , cmds , size );
238
- guc_ct_buffer_desc_init ( ct -> ctbs [i ]. desc , cmds , size );
263
+ CT_DEBUG ( ct , "%d: cmds addr=%#x\n" , i , cmds ) ;
264
+
265
+ guc_ct_buffer_reset ( & ct -> ctbs [i ], cmds );
239
266
}
240
267
241
268
/*
@@ -259,7 +286,7 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
259
286
err_deregister :
260
287
ct_deregister_buffer (ct , INTEL_GUC_CT_BUFFER_TYPE_RECV );
261
288
err_out :
262
- CT_PROBE_ERROR (ct , "Failed to open channel (err=%d )\n" , err );
289
+ CT_PROBE_ERROR (ct , "Failed to enable CTB (%pe )\n" , ERR_PTR ( err ) );
263
290
return err ;
264
291
}
265
292
@@ -314,7 +341,7 @@ static int ct_write(struct intel_guc_ct *ct,
314
341
struct guc_ct_buffer_desc * desc = ctb -> desc ;
315
342
u32 head = desc -> head ;
316
343
u32 tail = desc -> tail ;
317
- u32 size = desc -> size ;
344
+ u32 size = ctb -> size ;
318
345
u32 used ;
319
346
u32 header ;
320
347
u32 * cmds = ctb -> cmds ;
@@ -323,7 +350,7 @@ static int ct_write(struct intel_guc_ct *ct,
323
350
if (unlikely (desc -> is_in_error ))
324
351
return - EPIPE ;
325
352
326
- if (unlikely (!IS_ALIGNED (head | tail | size , 4 ) ||
353
+ if (unlikely (!IS_ALIGNED (head | tail , 4 ) ||
327
354
(tail | head ) >= size ))
328
355
goto corrupted ;
329
356
@@ -530,7 +557,7 @@ static int ct_read(struct intel_guc_ct *ct, u32 *data)
530
557
struct guc_ct_buffer_desc * desc = ctb -> desc ;
531
558
u32 head = desc -> head ;
532
559
u32 tail = desc -> tail ;
533
- u32 size = desc -> size ;
560
+ u32 size = ctb -> size ;
534
561
u32 * cmds = ctb -> cmds ;
535
562
s32 available ;
536
563
unsigned int len ;
@@ -539,7 +566,7 @@ static int ct_read(struct intel_guc_ct *ct, u32 *data)
539
566
if (unlikely (desc -> is_in_error ))
540
567
return - EPIPE ;
541
568
542
- if (unlikely (!IS_ALIGNED (head | tail | size , 4 ) ||
569
+ if (unlikely (!IS_ALIGNED (head | tail , 4 ) ||
543
570
(tail | head ) >= size ))
544
571
goto corrupted ;
545
572
0 commit comments