Skip to content

Commit 480c6fe

Browse files
mwajdeczdanvet
authored andcommitted
drm/i915/guc: Don't repeat CTB layout calculations
We can retrieve offsets to cmds buffers and descriptor from actual pointers that we already keep locally. Signed-off-by: Michal Wajdeczko <[email protected]> Signed-off-by: Matthew Brost <[email protected]> Reviewed-by: Matthew Brost <[email protected]> Signed-off-by: Daniel Vetter <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 99b2f5f commit 480c6fe

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

drivers/gpu/drm/i915/gt/uc/intel_guc_ct.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -244,22 +244,26 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
244244
{
245245
struct intel_guc *guc = ct_to_guc(ct);
246246
u32 base, cmds;
247+
void *blob;
247248
int err;
248249
int i;
249250

250251
GEM_BUG_ON(ct->enabled);
251252

252253
/* vma should be already allocated and map'ed */
253254
GEM_BUG_ON(!ct->vma);
255+
GEM_BUG_ON(!i915_gem_object_has_pinned_pages(ct->vma->obj));
254256
base = intel_guc_ggtt_offset(guc, ct->vma);
255257

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 */
259263
for (i = 0; i < ARRAY_SIZE(ct->ctbs); i++) {
260264
GEM_BUG_ON((i != CTB_SEND) && (i != CTB_RECV));
261265

262-
cmds = base + PAGE_SIZE / 4 * i + PAGE_SIZE / 2;
266+
cmds = base + ptrdiff(ct->ctbs[i].cmds, blob);
263267
CT_DEBUG(ct, "%d: cmds addr=%#x\n", i, cmds);
264268

265269
guc_ct_buffer_reset(&ct->ctbs[i], cmds);
@@ -269,12 +273,12 @@ int intel_guc_ct_enable(struct intel_guc_ct *ct)
269273
* Register both CT buffers starting with RECV buffer.
270274
* Descriptors are in first half of the blob.
271275
*/
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),
273277
INTEL_GUC_CT_BUFFER_TYPE_RECV);
274278
if (unlikely(err))
275279
goto err_out;
276280

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),
278282
INTEL_GUC_CT_BUFFER_TYPE_SEND);
279283
if (unlikely(err))
280284
goto err_deregister;

0 commit comments

Comments
 (0)